Mybatis——动态SQL
Posted 龙之天族
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis——动态SQL相关的知识,希望对你有一定的参考价值。
采用代理的方式实现
一、返回每条数据存在Emp中:
方法:
1 //<select id="selectEmpList" parameterType="com.neuedu.model.Emp" resultType="com.neuedu.model.Emp"> 2 public List<Emp> selectEmpList(Emp emp);
mapper.xml:
1 <!-- 返回每条数据存在Emp中 --> 2 <select id="selectEmpList" parameterType="com.neuedu.model.Emp" resultType="com.neuedu.model.Emp"> 3 select * from emp 4 <where> 5 <if test="empno > 0"> 6 and empno = #{empno} 7 </if> 8 <if test="ename != null and ename != ‘‘ "> 9 and ename like ‘%${ename}%‘ <!-- 注意此处,拼接成字符串要使用美元符号 --> 10 </if> 11 <if test="job != null and job !=‘‘"> 12 and job like ‘%${job}%‘ 13 </if> 14 </where> 15 </select>
二、单参数List : List<Integer> empnos:
方法:
1 //<select id="selectEmpByList" resultType="com.neuedu.model.Emp"> 2 public List<Emp> selectEmpByList(List<Integer> empnos);
mapper.xml:
1 <!-- 单参数List : List<Integer> empnos--> 2 <select id="selectEmpByList" resultType="com.neuedu.model.Emp"> 3 select * from emp where empno in 4 <foreach collection="list" item="empno" open="(" separator="," close=")"> 5 #{empno} 6 </foreach> 7 </select>
注意:①collection代表遍历的集合类型
②item代表遍历出来的变量别名
③open代表拼接上去时的开始符号
④close代表拼接上去时的结束符号
⑤separator代表拼接上去时分隔的符号
三、单参数Array:Integer[] empnos
方法:
1 //<select id="selectEmpByArray" resultType="com.neuedu.model.Emp"> 2 public List<Emp> selectEmpByArray(Integer[] empnos);
mapper.xml:
1 <!-- 单参数Array:Integer[] empnos --> 2 <select id="selectEmpByArray" resultType="com.neuedu.model.Emp"> 3 select * from emp where empno in 4 <foreach collection="array" item="empno" open="(" separator="," close=")"> 5 #{empno} 6 </foreach> 7 </select>
四、多参数 Map:【注意:指的是方法的传入参数有多个的情况】
方法:
1 //<select id="selectEmpByMap" resultType="com.neuedu.model.Emp"> 2 public List<Emp> selectEmpByMap(Map<String,Object> map);
mapper.xml:
1 <!-- 多参数 Map--> 2 <select id="selectEmpByMap" resultType="com.neuedu.model.Emp"> 3 select * from emp where ename like ‘%${ename}%‘ and empno in 4 <!-- collection:指向参数名称 --> <!--此处特别重要,名称不是属性名,而是map中的key名--> 5 <foreach collection="empnos" item="empno" open="(" separator="," close=")"> 6 #{empno} 7 </foreach> 8 </select>
五、引入sql语句
定义:
1 <!-- 定义sql片段:可重复使用 --> 2 <sql id="select_emp_where_sql"> 3 <if test="empno > 0"> 4 and empno = #{empno} 5 </if> 6 <if test="ename != null and ename != ‘‘ "> 7 and ename like ‘%${ename}%‘ 8 </if> 9 <if test="job != null and job !=‘‘"> 10 and job like ‘%${job}%‘ 11 </if> 12 </sql>
引用:
1 <!-- 引入sql片段 --> 2 <include refid="select_emp_where_sql"></include>
六、动态更新
1 <!-- 动态更新 --> 2 <update id="updateEmpByEmpno" parameterType="com.neuedu.model.Emp"> 3 update emp 4 5 <set> 6 <if test="ename != null and ename !=‘‘ "> 7 ename=#{ename}, 8 </if> 9 <if test="job != null and job !=‘‘ "> 10 job=#{job}, 11 </if> 12 </set> 13 14 where empno=#{empno} 15 </update>
注意:set中if中的语句后要加逗号!
以上是关于Mybatis——动态SQL的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取
mybatis动态sql之利用sql标签抽取可重用的sql片段
MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段