zoukankan      html  css  js  c++  java
  • MyBats动态SQL之set标签、trim标签、foreach标签

    update操作之set标签

    直接上例子说明

    //接口中的方法为int update(User user);
    try
    { sqlSession = MyBatisUtil.getSqlSession(); User user = new User(); user.setId(3); user.setAccount("solider76"); user.setUser_name("士兵76号"); int num = sqlSession.getMapper(UserDao.class).update(user); sqlSession.commit(); System.out.println(num); } catch(Exception e){
       throw new RuntimeException(e.getMessage());
    }
    finally { MyBatisUtil.closeSqlSession(sqlSession); }

    映射文件:

    <update id="update" parameterType="self.exercise.bean.User">
        update web_user                                         
        <set>                                                   
            <if test="account!=null">                           
                account = #{account},                           
            </if>                                               
            <if test="password!=null">                          
                password = #{password},                         
            </if>                                               
            <if test="user_name!=null">                         
                user_name =#{user_name}                         
            </if>                                               
        </set>                                                  
        where id=#{id}                                          
    </update>                                                   

    set标签会自动检索最后一个逗号,并清除。

    trim自定义标签

    有时候如果有些标签用起来不尽人意,可以用trim标签自定义标签,比如where标签的等价trim元素为

    <trim prefix="WHERE" prefixOverrides="and | or ">
    ...
    </trim>

    执行trim标签时,会首先动态前置WHERE,并且通过prefixOverrides检索去掉无关的and 或or 

    而set标签的等价trim元素为

    <trim prefix="SET" suffixOverrides=",">
      ...
    </trim>

    首先会动态前置SET,并通过suffixOverrides去掉无关紧要的,

    foreach标签

    如果判断的条件在某个集合中,类似select * from web_user where id in(1,2,3,4)

    此时需要使用foreach标签

    //接口中的方法为List<User> foreach(int[] ids);
    try
    { sqlSession = MyBatisUtil.getSqlSession(); Integer[] ids = new Integer[]{ 1 , 2 , 3 }; List<User> list = sqlSession.getMapper(UserDao.class).foreach01(ids); logger.debug(list); } finally { MyBatisUtil.closeSqlSession(sqlSession); }

    映射文件:

    <select id="foreach01" resultType="self.exercise.bean.User">               
        select * from web_user where id in                                     
        <foreach collection="array" open="(" close=")" item="id" separator=",">
            #{id}                                                              
        </foreach>                                                             
    </select>                                                                  

    collection中可以写array、list、map中的key,具体是什么要看接口中的参数类型

    DEBUG [main] - ==>  Preparing: select * from web_user where id in ( ? , ? , ? ) 
    DEBUG [main] - ==> Parameters: 1(Integer), 2(Integer), 3(Integer)
    TRACE [main] - <==    Columns: id, account, password, user_name
    TRACE [main] - <==        Row: 1, wukong, wukong, 悟空
    TRACE [main] - <==        Row: 2, wuneng, wuneng, 悟能
    TRACE [main] - <==        Row: 3, solider76, wujing, 士兵76号
    DEBUG [main] - <==      Total: 3
  • 相关阅读:
    P3373 【模板】线段树 2
    P3372 【模板】线段树 1
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    P1004 方格取数
    P1880 [NOI1995]石子合并
    UOJ#152盘子序列
    P1886 滑动窗口
    P1440 求m区间内的最小值
    二进制中1的个数
  • 原文地址:https://www.cnblogs.com/qingyaxuan/p/6416302.html
Copyright © 2011-2022 走看看