Directorio de artículos
Cuatro, sql dinámico
1. SQL dinámico
SQL dinámico se refiere a que se cambia el contenido de la instrucción sql, y se pueden obtener diferentes instrucciones sql según las condiciones. Se
cambia la parte principal del where.
2. La realización de sql dinámico
La implementación de sql dinámico utiliza las etiquetas proporcionadas por mybatis, por ejemplo,
(1) si etiqueta
La etiqueta if es para juzgar la condición.
Sintaxis:
parte de la declaración sql
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="customDAO.TestDao">
<!--
<if test="java对象的属性">
-->
<select id="selectIf" resultType="customDAO.Test">
<!--这里加入where 1=1的目的是为了保证语法格式正确-->
SELECT * FROM t_test WHERE 1=1
<if test="name != null and name != ''">
name = #{name}
</if>
</select>
</mapper>
(2) donde etiqueta
La etiqueta where se usa para contener múltiples etiquetas if. Cuando se establecen múltiples ifs, la etiqueta where agregará automáticamente una palabra clave where y eliminará la redundante y, o, etc.en el if
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="customDAO.TestDao">
<!--
<where标签>
-->
<select id="selectIf" resultType="customDAO.Test">
SELECT * FROM t_test
<where>
<if test="name != null and name != ''">
name = #{name}
</if>
</where>
</select>
</mapper>
(3) etiqueta foreach
La etiqueta foreach se usa para hacer un bucle de la colección de listas o matrices en Java
Utilizado principalmente en SQL en declaración
Por ejemplo: Encuentre estudiantes cuyo id sea 1001, 1002, 1003
seleccione * from t_test donde id en (1001,1002,1003);
Dos formas de usar
archivo de mapeo sql
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="customDAO.TestDao">
<!--
foreach的第一种用法:List集合
-->
<select id="foreach1" resultType="customDAO.Test">
SELECT * FROM t_test WHERE id IN
<!--
collection:表示接口中方法参数的类型,如果是数组使用array,如果是list集合使用list
item:自定义的表示数组或集合成员中的变量
open:循环开始的字符
close:循环结束时的字符
separator:集合成员之间的分隔
-->
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
<!--
foreach的第二种用法
-->
<select id="foreach2" resultType="customDAO.Test">
SELECT * FROM t_test WHERE id IN
<foreach collection="list" item="test" open="(" close=")" separator=",">
<!--
循环对象的某个属性值
-->
#{test.id}
</foreach>
</select>
</mapper>
Métodos en la interfaz dao
import java.util.List;
//定义操作test表的接口
public interface TestDao
{
//foreach用法1
public List<Test> foreach1(List<Integer> idList);
//foreach用法2
public List<Test> foreach2(List<Test> test);
}
(4) fragmento de código sql
Propósito: reutilizar algunas oraciones
Paso
1. Primero defina la declaración SQL
2. Use la etiqueta de inclusión para importar
archivo de mapeo sql
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="customDAO.TestDao">
<!--定义sql的片段-->
<sql id="mysql">
SELECT * FROM t_test
</sql>
<select id="selectIf" resultType="customDAO.Test">
<!--SELECT * FROM t_test-->
<!--使用include导入sql语句-->
<include refid="mysql"></include>
<where>
<if test="name != null and name != ''">
name = #{name}
</if>
</where>
</select>
</mapper>