动态SQL
解决拼接SQL语句字符串时的问题。
if标签
if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行
<!-- List<Emp> getEmpByCondition(Emp emp); --> <select id="getEmpByCondition" resultType="com.gu.mybatis.pojo.Emp"> select <include refid="empColumns"></include> from t_emp where <if test="empName != null and empName != ''"> emp_name = #{empName} </if> <if test="age != null and age != ''"> and age =#{age} </if> <if test="gender != null and gender != ''"> and gender =#{gender} </if> </select>
where标签
where和if一般结合使用:
a> 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
b> 若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的and去掉
注意:where标签不能去掉条件最后多余的and
<!-- List<Emp> getEmpByWhere(Emp emp); --> <select id="getEmpByWhere" resultType="com.gu.mybatis.pojo.Emp"> select * from t_emp <where> <if test="empName != null and empName != ''"> emp_name = #{empName} </if> <if test="age != null and age != ''"> and age =#{age} </if> <if test="gender != null and gender != ''"> and gender =#{gender} </if> </where> </select> a. 若where标签中有条件成立,会自动生成where关键字。 b. 会自动将where中内容前多余的and去掉,但内容后多余的and无法去掉 c. 若where标签中没有任何一个条件成立,则where没有任何功能
trim标签
trim用于去掉或添加标签中的内容
常用属性:
prefix:在trim标签中的内容的前面添加某些内容
prefixOverrides:在trim标签中的内容的前面去掉某些内容
suffix:在trim标签中的内容的后面添加某些内容
suffixOverrides:在trim标签中的内容的后面去掉某些内容
<!-- List<Emp> getEmpByTrim(Emp emp); --> <select id="getEmpByTrim" resultType="com.gu.mybatis.pojo.Emp"> select * from t_emp <trim prefix="where" suffixOverrides="and"> <if test="empName != null and empName != ''"> emp_name = #{empName} and </if> <if test="age != null and age != ''"> age =#{age} and </if> <if test="gender != null and gender != ''"> gender =#{gender} </if> </trim> </select> prefix,suffix:在标签中内容前或者后面添加指定内容 prefixOverrides,suffixOverrides :在标签中内容前或者后面去掉指定内容
choose when otherwise标签
相当于if ... else if...else
<!-- List<Emp> getEmpByChoose(Emp emp); --> <select id="getEmpByChoose" resultType="com.gu.mybatis.pojo.Emp"> select * from t_emp <where> <choose> <when test="empName != null and empName != ''"> emp_name = #{empName} </when> <when test="age != null and age != ''"> age =#{age} </when> <when test="gender != null and gender != ''"> gender =#{gender} </when> </choose> </where> </select> 相当于Java中的if...else if ...else when至少设置一个,otherwise最多设置一个
foreach标签
<!-- void insertMoreEmp(List<Emp> emps); --> <insert id="insertMoreEmp"> insert into t_emp values <foreach collection="emps" item="emp" separator=","> (null,#{emp.empName},#{emp.age},#{emp.gender},null) </foreach> </insert> <!-- void deleteMoreEmp(@Param("empIds") Integer[] empIds); --> <delete id="deleteMoreEmp"> <!-- delete from t_emp where emp_id in--> <!-- <foreach collection="empIds" item="empId" separator="," close=")" open="(">--> <!-- #{empId}--> <!-- </foreach>--> delete from t_emp where <foreach collection="empIds" item="empId" separator="or"> emp_id =#{empId} </foreach> </delete> collection:设置循环的数组集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环的数据之间的分割符 open:循环内容以什么开始 close:循环内容以什么结束
sql片段
<sql id="empColumns"> emp_id,emp_name,age,gender,dept_id </sql>
记录一些公共sql片段,进行标签引入
总结
<!-- mybatis中的动态SQL: 1. if标签:通过test中的表达式判断标签的内容是否有效,是否会拼接到SQL中 2. where标签: a. 若where标签中有条件成立,会自动生成where关键字。 b. 会自动将where中内容前多余的and去掉,但内容后多余的and无法去掉 c. 若where标签中没有任何一个条件成立,则where没有任何功能 3. trim标签: prefix,suffix:在标签中内容前或者后面添加指定内容 prefixOverrides,suffixOverrides :在标签中内容前或者后面去掉指定内容 4. choose,when,otherwise 标签 相当于Java中的if...else if ...else when至少设置一个,otherwise最多设置一个 5. foreach标签 collection:设置循环的数组集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环的数据之间的分割符 open:循环内容以什么开始 close:循环内容以什么结束 6. sql片段 可以记录一个片段,在需要用的地方使用include引用 <sql id="empColumns"> emp_id,emp_name,age,gender,dept_id </sql> select <include refid="empColumns"></include> from t_emp -->
标签:day114,gender,标签,age,内容,emp,sql,动态,where From: https://www.cnblogs.com/GUGUZIZI/p/17515191.html