Mybatis (4) --- sql dinámico

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>

Supongo que te gusta

Origin blog.csdn.net/weixin_46841376/article/details/114667624
Recomendado
Clasificación