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>
上一篇下一篇

猜你喜欢

热点阅读