Dynamic SQL es la generación dinámica de SQL.
Si la etiqueta
Supongamos que hay un requisito: al consultar al usuario, cuando el nombre de usuario no es igual al "administrador", también necesitamos una contraseña de 123456.
Los datos en la base de datos son:
Mybatisconfig.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtdd" <Configuration> < -> <Pypealiases> <typealias type = "jike.book.pojo.jikeuser" alias = "jikeuser"/> <typealias type = "jike.book.pojo.author" alias = "autor"/> </typealiases> <entornos predeterminado = "desarrollo"> <entorno id = "desarrollo"> <transaccionManager = "jdbc"> </</transaccionManager> </<tatuArce> </datasureger> </datasurce/</datasurceMana type = "Poured"> <Property Name = "Driver" value = "com.mysql.jdbc.driver"/> <propiedad name = "url" value = "jdbc: mysql: // localhost: 3306/jikeBook"/> <propiedad = "nombre de usuario" value = "root"/> <nombre de propiedad = "contraseña" value = "****"/> </shasource> </entorno> </bostinments> <mappers> <mapper resource = "jike/book/map/jikeuser.xml"/> </mappers> </figuration>
Jikeuser.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mappublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtdd"> <mapperspace = "/" <"<<>" <<> "</" <<> "Selects. resultType = "JikeUser" Parametertype = "JikeUser"> SELECT * de jikeBook.jikeUserWhere 1 = 1 <if test = "username! = 'admin'"> y contraseña =#{contraseña} </if> </select> </mapper>Clase de prueba:
paquete jike.book.test; import jike.book.pojo.jikeuser; importar org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; importar org.apache.ibatis.session.sqlsessionFactory; import org.apache.session.sqlsession factory; importar; org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.ioxception; import java.io.eader; import java.util.list;/*** dateTime: 2016/9/6 13: 36* Función:* Idea:*/Public Class TestSQl {Public Static Void Main (String [] args) {// Resource = "jike/book/map/mybatisconfig.xml"; lector lector = null; sqlsession session; try {reader = recursos.getResourceasReader (recursos);} Catch (ioexception e) {e.printstacktRace ();} sqlSessionFactory sqlmapper = new SqlSessionFactoryBuilder (). Build (lector); session = sqlmapper.opensession (); jikeuser jikeuser = new jikeuser (); jikeuser.setpassword ("123456"); list <jikeuser> userList = session.selectlist ("SelectSql", jikeuser); for (jikeuser) {System.out.println ("UserName:"+user.getUsername ());} session.close ();}}El resultado de la ejecución es:
Elija etiqueta
Suponga que actualmente tenemos un requisito: consulte el usuario, si el nombre de usuario no está vacío, agregue la condición del nombre de usuario, si la ID no está vacía, agregue la condición de ID, de lo contrario, configure la contraseña no vacía, que es una opción múltiple.
Mybatisconfig.xml no cambia, agregue:
<select id = "selectJikeUserChoose" resultType = "JikeUser" parametertype = "jikeuser"> select * de jikeuser donde 1 = 1 <selección> <w test = "userName! = null"> y userName como #{username} </when> <when test = "id! = 0"> e id = #{id} </When> when <lo contrario> <lo contrario> contraseña y contraseñas NULL </STOOTHESS> </le Choose> </SELECT>Clase de prueba: suponga que el nombre de usuario no está vacío:
paquete jike.book.test; import jike.book.pojo.jikeuser; importar org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; importar org.apache.ibatis.session.sqlsessionFactory; import org.apache.session.sqlsession factory; importar; org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.ioxception; import java.io.eader; import java.util.list;/*** dateTime: 2016/9/6 13: 36* Función:* Idea:*/Public Class TestSQl {Public Static Void Main (String [] args) {// Resource = "jike/book/map/mybatisconfig.xml"; lector lector = null; sqlsession session; try {reader = recursos.getResourceasReader (recursos);} Catch (ioexception e) {e.printstacktRace ();} sqlSessionFactory sqlmapper = new SqlSessionFactoryBuilder (). Build (lector); session = sqlmapper.opensession (); jikeuser jikeuser = new jikeuser (); jikeuser.setusername ("yen"); list <jikeuser> userList = session.selectlist ("SelectJikeuserChoos {System.out.println ("UserName:"+user.getUsername ());} session.close ();}}El resultado es:
Suponiendo que la condición del nombre de usuario no esté establecida, es decir, comente jikeuser.setusername ("yen");:
Donde marcador, establezca marcador
La consulta anterior en la elección es que no podemos determinar si se escribe o no en la condición de la subconexión o no, por lo que agregamos un 1 = 1. Y donde solo podemos juzgar si se debe agregar.
<select id = "selectJikeUserWhere" resultType = "jikeUser" parametertype = "jikeuser"> select * de jikeuser <where> <if test = "username! = null"> y username como #{username} </if> <if "id" id! = null "> e id = #{id} </if </where> </where> </where> </select>La asignación inteligente de etiqueta establecida eliminará automáticamente el exceso ",", ",", ",",
<update id = "updateJikeUserset" parametertype = "jikeUser"> update jikeuser <set> <if "username! = null"> username =#{username}, </if> <if test = "contraseña! = null"> contraseña =#{contraseña}, </if> </set> where id =#{id} </Úndate>Datos antes de la operación:
funcionar:
Resultados de la operación:
<update id = "updateUsertrim" parametertype = "jikeUser"> update jikeuser <trim prefix = "set" suffiXoverRides = "," suffix = "donde id = #{id}"> <if test = "username! = null y username! = ''"> username = #{usame}, </if> <if test = "contraseña! "> contraseña =#{contraseña}, </if> </crim> </update>etiqueta foreach
Generalmente se usa para consulta de bucle o asignación de bucle
<select id = "selectJikeUserForeach" resultType = "jikeUser" parametertype = "list"> select * de JikeUser <where> id en <foreach item = "item" index = "index" colección = "list" abre = "(" separator = "," close = ")">#{item} </foreach> </section>prueba:
Lo anterior es una explicación detallada del SQL dinámico MyBatis si, elige, dónde, establecer, recortar y foreach Etiquetas presentados por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjeme un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!