mybatis的条件判断
2018-09-06 本文已影响0人
别叫我小新
<?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">
<!-- namespace 命名空间 -->
<mapper namespace="com.qianfeng.dynamic.Employee">
<!-- 体现表和类之间的关系 -->
<!-- 配置查询到的数据和实体类之间的映射关系 -->
<!-- type实体类 包名+类名形式 id是resultMap的唯一标识-->
<!-- 主配置中配置的别名,Person 通过<typeAlias>配置的 -->
<resultMap type="Employee" id="empMap">
<!-- 主键 -->
<!-- property 实体类中的属性, column 表中的字段 -->
<id property="id" column="id"/>
<!-- 其他字段的映射关系 -->
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="phone" column="phone"/>
<result property="qq" column="qq"/>
</resultMap>
<insert id="add" parameterType="Employee">
<!-- insert into employee(name, age, phone, qq) values(#{name}, #{age}, #{phone}, #{qq}) -->
<!-- if 单条件判断, test中设置判断条件 -->
insert into employee(
<!--suffixOverrides 重写后缀 这样能吧最后这个逗号干掉
trim能设置前缀和后缀哦~~
-->
<trim suffixOverrides=",">
<if test="name!=null">
name,
</if>
<if test="age!=null">
age,
</if>
<if test="phone!=null">
phone,
</if>
<if test="qq!=null">
qq
</if>
</trim>
) values(
<trim suffixOverrides=",">
<if test="name!=null">
#{name},
</if>
<if test="age!=null">
#{age},
</if>
<if test="phone!=null">
#{phone},
</if>
<if test="qq!=null">
#{qq},
</if>
</trim>
)
</insert>
<insert id="add2" parameterType="Employee">
insert into employee(
<!-- choose when 多条件判断 这个不用写逗号了哦~~ 一个条件成li了,其他条件就不再判断了 相当于if..else if..else...-->
<choose>
<when test="name!=null">
name
</when>
<when test="age!=null">
age
</when>
<when test="phone!=null">
phone
</when>
<otherwise>
qq
</otherwise>
</choose>
)values(
<choose>
<when test="name!=null">
#{name}
</when>
<when test="age!=null">
#{age}
</when>
<when test="phone!=null">
#{phone}
</when>
<otherwise>
#{qq}
</otherwise>
</choose>
)
</insert>
<select id="find" parameterType="Employee" resultType="Employee">
<!-- select * from employee where 1=1 and name=? and age=? -->
select * from employee
<where>
<!-- 不用写1=1了 -->
<!-- where标签可以将多余的标签去掉,比如and -->
<if test="name!=null">
and name=${name}
</if>
<if test="age!=null">
and age=${age}
</if>
</where>
</select>
<update id="update" parameterType="Employee">
<!-- update employee set name=?,age=?,phone=? where.. -->
<!-- 哪些值不是null吧哪些值更新了 -->
update employee
<!-- 使用set也不用管这个逗号了,他自己会删掉他,哈哈哈 -->
<set>
<if test="name!=null">
name=#{name},
</if>
<if test="age!=null">
age=#{age},
</if>
<if test="phone!=null">
phone=#{phone},
</if>
<if test="qq!=null">
qq=#{qq},
</if>
</set>
where id=#{id}
</update>
<!-- 指定多个id来删除数据 比如2,5,10-->
<!-- 这里是列表形式的, key是list value是传来的列表 -->
<delete id="deleteById" parameterType="list">
<!-- 只要是id这这几个数的范围内的删除掉,,这!就是in! 好屌啊-->
<!--delete from employee where id in (select id from employee where ...)-->
delete from employee where id in
<!-- collection就是要遍历的集合
item就是遍历到的元素的变量名
open/close 就是指定前面和后面包裹数据时使用的符号
separator 遍历到的元素的分隔符
-->
<forech collection="list" item="eid" open="(" close=")" separator=",">
#{eid}
</forech>
</delete>
<!-- 指定多个id来删除数据 比如2,5,10-->
<!-- sql中使用的参数,本质上会封装为map对象
自定义类 key属性value设置的值
数组,key值是array value是数组对象
列表,key值数list, value是列表对象,
这个传来的是个数组,是没办法接收的,只有用map,起始本质上就是给封装成了map,用array来找到数据
key值找到value array就是key值 value就是那个数组,
因为arry没有对应的支持,所以只能写map(value)
-->
<delete id="deleteById2" parameterType="map">
<!-- 只要是id这这几个数的范围内的删除掉,,这!就是in! 好屌啊-->
<!--delete from employee where id in (select id from employee where ...)-->
delete from employee where id in
<!-- collection就是要遍历的集合
item就是遍历到的元素的变量名
open/close 就是指定前面和后面包裹数据时使用的符号
separator 遍历到的元素的分隔符
-->
<forech collection="array" item="eid" open="(" close=")" separator=",">
#{eid}
</forech>
</delete>
</mapper>