Répertoire d'articles
Quatre, SQL dynamique
1. SQL dynamique
Le SQL dynamique fait référence au fait que le contenu de l'instruction SQL est modifié et que différentes instructions SQL peuvent être obtenues en fonction des conditions. La
partie principale de l' instruction where est modifiée.
2. La réalisation de SQL dynamique
L'implémentation de SQL dynamique utilise les balises fournies par mybatis, par exemple,
(1) si tag
La balise if sert à juger de la condition.
Syntaxe:
partie de l'instruction 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) où tag
La balise where est utilisée pour contenir plusieurs balises if. Lorsque plusieurs ifs sont établis, la balise where ajoute automatiquement un mot-clé where et supprime les redondants and, or, etc. dans le 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) pour chaque tag
La balise foreach est utilisée pour boucler le tableau ou la collection de listes en java
Principalement utilisé en SQL dans l'instruction
Par exemple: Trouvez des étudiants dont l'id est 1001, 1002, 1003
select * from t_test where id in (1001,1002,1003);
Deux façons d'utiliser
fichier de mappage 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éthodes dans l'interface 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) extrait de code SQL
Objectif: réutiliser certaines phrases
Étape
1. Définissez d'abord l'instruction sql
2. Utilisez la balise include pour importer
fichier de mappage 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>