Lectura recomendada:
Tutorial de aprendizaje de MyBatis Introducción (I) - MyBatis Quick Start
¿Qué es Dynamic SQL? ¿Cuál es la función Dynamic SQL?
En la forma tradicional de usar JDBC, creo que cuando combinas declaraciones SQL complejas, debes empalmarlas. Si no tiene cuidado, incluso si le falta espacios, conducirá a errores. La función dinámica de SQL de MyBatis es resolver este problema. Se puede combinar en declaraciones SQL muy flexibles a través de IF, elige, cuando, de lo contrario, recorte, donde, establecido, las etiquetas foreach, mejorando así la eficiencia de los desarrolladores.
Experimentemos el encanto de MyBatis Dynamic SQL:
1. Si: ¡puedes juzgar, y yo también puedo juzgar!
Como programador, ¿quién no entiende si! También puedes usar si en mybatis:
<Select id = "finduserById" resultType = "user"> select * de user where <if test = "id! = null"> id =#{id} </if> y deleteflag = 0; </select>El ejemplo anterior: si la ID entrante no está vacía, entonces SQL empalmará ID = #{id}. Creo que todos pueden entender esto al leerlo, y no diré mucho.
Las personas cuidadosas encontrarán un problema: "¡Esto está mal con usted! Si la identificación que pasa es nula, entonces su instrucción SQL final se convertirá en seleccionar * del usuario donde y DeleteFlag = 0, ¡hay un problema con esta declaración!"
Sí, en este momento, la etiqueta de mybatis debería estar hecha grandiosa:
2. ¡Dónde, conmigo, las condiciones de empalme de la declaración SQL se tratan de las nubes!
Modificemos el ejemplo anterior a través de dónde:
<Select id = "finduserById" resultType = "user"> select * de user where <where> <if null! = null "> id =#{id} </if> y deleteflag = 0; </where> </select>Algunas personas están a punto de preguntar: "¿Qué estás haciendo? En comparación con lo anterior, ¡solo hay una etiqueta adicional donde la etiqueta todavía aparecerá seleccionada * del usuario donde y DeleteFlag = 0?"
De hecho, en la superficie, solo hay un extra donde la etiqueta, pero en esencia, MyBatis trata con ella. Cuando se encuentra y o o o sabe cómo lidiar con eso. De hecho, podemos personalizar estas reglas de procesamiento a través de la etiqueta de ajuste.
3. Recorte: Mi territorio, tomo la decisión!
Lo anterior donde la etiqueta se puede expresar de la siguiente manera usando el acabado:
<TRIM prefix = "Where" PrefiXoverrides = "y | o"> ... </trim>
Significa: cuando se sigue y o o o, o o se elimina. Además de dónde, en realidad hay otra implementación clásica, que está establecida.
4. Establecer: ¡Créeme, sin errores!
<update id = "updateUser" parametertype = "com.dy.entity.user"> Update user set <if test = "name! = null"> name = #{name}, </if> <if test = "contraseña! = null"> contraseña = #{contraseña}, </if <if test = "edad! = null"> edad = #{edad} </if <<where> <whereS> null "> id = #{id} </fif> y deleteflag = 0; </where> </update>La pregunta vuelve: "Si solo tengo nombre pero no nulo, entonces este SQL se convierte en actualización de configuración nombre de nombre = #{name}, donde .........? ¡La coma después de su nombre causará un error!"
Sí, en este momento, puede usar la etiqueta establecida proporcionada por MyBatis para nosotros. Lo siguiente se modifica a través de la etiqueta establecida:
<update id = "updateUser" parametertype = "com.dy.entity.user"> update usser set <SET> <if "name! = null"> name = #{name}, </if> <if test = "contraseña! = null"> contraseña = # {contraseña}, </if> <if test = "age! = null"> edad = #{edad {if </if </if </if </set </set </set </if <</if <</if <</if <</if <</set <</if <</if <</if <</SET <</SET <</SET <</if <</if <</if <</set </Set. test = "id! = null"> id = #{id} </if> y deleteflag = 0; </where> </update>Esto se puede expresar como:
<TRIM prefix = "set" sufreMoverrides = ","> ... </crim>
Donde utiliza prefiXoverrides (prefijo), set usa sufixoverrides (sufijo), ¡puede entenderlo!
5. ForEach: Tienes, tengo ForEach, ¡no creas que solo eres tú!
Existe en Java, y se puede recorrer para. Del mismo modo, hay foreach en mybatis, y se puede usar para implementar bucles. Por supuesto, los objetos en bucle son principalmente contenedores y matrices de Java.
<select id = "selectPostin" resultType = "domain.blog.post"> select *de publicar pwhere id en <foreach item = "item" index = "índice" colección = "list" open = "(" separator = "," close = ")">#{item} </areach> </elect>Pase una instancia de lista o matriz como un objeto de parámetro a MyBatis. Al hacerlo, MyBatis lo envolverá automáticamente en un mapa y usará el nombre como clave. La instancia de la lista tomará "lista" como clave, y la clave de la instancia de la matriz será "matriz". Del mismo modo, cuando el objeto de bucle es un mapa, el índice es en realidad la tecla MAP.
6. Elige: ¡Te elegí, me elegiste!
Hay Switch en Java, y MyBatis tiene opción.
<select id = "findActiveBloglike" resultType = "Blog"> SELECT * De Blog Where state = 'Active' <Eleg '<When Test = "Title! = Null"> y Title Like #{title} </when> <when test = "autor! = null and autor.name! = null"> y author_name como #{autor.name} </when> <lo contrario> y aparecido = = 1 </stether> </lowe> </select>En el ejemplo anterior: cuando ni el título ni el autor son nulos, elija uno de los dos (se prefiere el primero). Si ambos son nulos, elija el de lo contrario. Si solo hay uno de tilte y autor que no es nulo, elija el que no sea nulo.
Lo anterior es el tutorial de introducción para MyBatis (IV) de MyBatis Dynamic SQL presentada a usted. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!