Динамический SQL - это динамическая генерация SQL.
Если тег
Предположим, что существует требование: при запросе пользователя, когда имя пользователя не равняется «администратору», нам также нужен пароль 123456.
Данные в базе данных:
Mybatisconfig.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd -> <TypeAliases> <typealias type = "jike.book.pojo.jikeuser" alias = "jikeuser"/> <typealias type = "jike.book.pojo.author" Alias = "Автоража"/> </typealiases> <среда default = "development"> efly emporte "> <TransactionManager type = "jdbc"> </transactionManager> <dataSource type = "Booled"> <name = "Driver" value = "com.mysql.jdbc.driver"/> <name = "url" value = "jdbc: mysql: // localhost: 3306/jikebook"/> <property name = "usernam value = "****"/> </dataSource> </environment> </erviness> <mappers> <mapper resource = "jike/book/map/jikeuser.xml"/> </mappers> </configuration>
Jikeuser.xml
<? xml version = "1.0" Encoding = "utf-8"?> <! Doctype mapperpublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "/"/"select"> </"select" hagl "haglse ed"/"/" select "/"/"select"/"select"/"/" select "/" select "/"/"select"/"/" select "/" select "/" select "/" select ". resultType = "jikeuser" parameterType = "jikeuser"> select * from jikebook.jikeuserwhere 1 = 1 <if test = "username! = 'admin'"> и password =#{пароль} </if> </selet> </mapper>Тестовый класс:
Пакет jike.book.test; import jike.book.pojo.jikeuser; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sqlsessionFactorce; import org.apache.session.session.sessionfactory; org.apache.ibatis.session.sqlsessionFactoryBuilder; Import Java.io.ioexception; Import java.io.reader; import java.util.list;/*** dateTime: 2016/9/6 13: 36* Функция:* Идея:*/public testsql {public void main (string [] args) resource = "jike/book/map/mybatisconfig.xml"; reader reader = null; sqlsession session; try {recrander = resources.getresourcearder (resource);} catch (ioexcept SQLSessionFactoryBuilder (). Build (Reader); Session = SQLMapper.Opensession (); JikeUser JikeUser = new Jikeuser (); Jikeuser.setPassword ("123456"); список <Jikeuser> userlist = session.selectlist ("selectSQL", JikeUser); {System.out.println ("username:"+user.getusername ());} session.close ();}}Результат работы:
Выберите тег
Предположим, у нас в настоящее время есть требование: Запросите пользователя, если имя пользователя не пустое, добавьте условие имени пользователя, если идентификатор не является пустым, добавьте условие идентификатора, в противном случае установите пароль, не пустой, что является множественным выбором.
Mybatisconfig.xml не меняется, добавьте:
<select id = "selectJikeUserChose" refultype = "jikeuser" parametertype = "jikeuser"> select * from jikeuser, где 1 = 1 <select> <w test = "username! = null"> и username, как #{username} </when> <when test = "Id! null </wheame> </selet> </select>Тестовый класс: Предположим, что имя пользователя не пустое:
Пакет jike.book.test; import jike.book.pojo.jikeuser; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sqlsessionFactorce; import org.apache.session.session.sessionfactory; org.apache.ibatis.session.sqlsessionFactoryBuilder; Import Java.io.ioexception; Import java.io.reader; import java.util.list;/*** dateTime: 2016/9/6 13: 36* Функция:* Идея:*/public testsql {public void main (string [] args) resource = "jike/book/map/mybatisconfig.xml"; reader reader = null; sqlsession session; try {recrander = resources.getresourcearder (resource);} catch (ioexcept SQLSessionFactoryBuilder (). Build (Reader); Session = SQLMapper.Opensession (); JikeUser JikeUser = new Jikeuser (); Jikeuser.setUsernam {System.out.println ("username:"+user.getusername ());} session.close ();}}Результат:
Предполагая, что условие имени пользователя не установлено, то есть комментировать jikeuser.setusername ("yen");:
Где маркер, установите маркер
Приведенный выше запрос в выборе заключается в том, что мы не можем определить, написано ли и в условиях подключения, поэтому мы добавляем 1 = 1. И где мы можем только судить, следует ли его добавить.
<select id = "selectJikeUserwhere" resultType = "jikeuser" parametertype = "jikeuser"> select * from jikeuser <где> <if test = "username! = null"> и имя пользователя, как #{username} </if> <if test = "id!Интеллектуальное назначение SET TAG автоматически удаляет избыток »,«
<Update id = "updatejikeuserset" parametertype = "jikeuser"> обновление JikeUser <Set> <if test = "userName! = null"> username =#{username}, </if> <if test = "password! = null"> password =#{password}, </if> </set> whor> wid =#{id} <> ablet> </id> </id} <> ablet> </if> </id> wid>#Данные перед операцией:
работать:
Результаты работы:
<Обновление идентификатор = "UpdateUsertrim" parameterType = "jikeuser"> обновление Jikeuser <trim prefix = "set" suffixOverrides = "," Суффикс = "где id = #{id}"> <if test = "username! = null и username! "> password =#{пароль}, </if> </trim> </update>тег Foreach
Обычно используется для цикла или назначения цикла
<select id = "selectJikeUserForeach" refultype = "jikeuser" parametertype = "list"> select * from jikeuser <where> id в <foreach item = "item" index = "index" collection = "open =" ("separator =", "close =") ">#{item} </for> </where> </select> select>") ">#{item} </for for> </where> </select> </select> </select> </select> </select> </select> </select> </select> </select>тест:
Выше приведено подробное объяснение динамического SQL Mybatis, если, выберите, где, установить, обрезать и фальсифицировать примеры тега, представленные вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!