一个尴尬的年纪,没有儿时的勇气,年少的冲动,成熟的物质,消融了那些不切实际的臆想,也接受了很多难以为继的事实,一直在路上 。

动态 SQL(1)

 

   <!--test 属性:表示进入 if 内需要满足的条件-->
    <if test="" > 
          <!--if 条件满足时执行的内容-->      
    </if>

<!-- 根据用户名称(模糊查询)和用户角色查询用户列表(要求用户角色要显示角色名称而不是角色 id) -->
    <select id="getUserList" resultMap="userList">
        SELECT u.*,r.roleName FROM `smbms_user` u,`smbms_role` r
        WHERE u.`userRole`=r.`id`
        <if test="uRole!=null">
            AND userRole=#{uRole}
        </if>
        <if test="uName!=null and uName!=''">
            AND userName LIKE CONCAT('%',#{uName},'%')
        </if> 
    </select>

 

 

使用  if+where 实现多条件查询

  where 元素

    

//案例:根据用户名称(模糊查询)和用户 id 查询用户列表,且用户列表不需要显示角色名称,显示角色 id 即可,即不用进行连表查询。

    /**
     * 根据用户名称(模糊查询)和用户角色查询用户列表
     * @param userName 用户名称
     * @param userRole 用户角色
     * @return
     */
    public List<User> getUserList(@Param("uName")String userName,@Param("uRole")Integer userRole); 


<!-- 根据用户名称(模糊查询)和用户角色查询用户列表-->
    <select id="getUserList" resultType="user">
        SELECT * FROM `smbms_user`
        <where>
            <if test="uRole!=null">
                AND userRole=#{uRole}
            </if>
            <if test="uName!=null and uName!=''">
                AND userName LIKE CONCAT('%',#{uName},'%')
            </if>
        </where>
    </select>


    @Test  //测试根据用户名称(模糊查询)和用户角色查询用户列表
    public void testGetUserList() {
        SqlSession session=null;
        List<User> userList = new ArrayList<User>();
        try {
            session=MyBatisUtil.getSqlSession();
            String userName = null;
            Integer userRole =null;
            userList = session.getMapper(UserMapper.class).getUserList(userName, userRole);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            MyBatisUtil.close(session);
        }
        
        System.out.println("userlist.size ----> " + userList.size());
        for (User user : userList) {
            System.out.println(user);
        }
    }

  

 

 使用 if+trim 实现多条件查询

  trim 元素

    

 

 

    

    

    

    

//修改上面示例中 UserMapper.xml 中的代码,使用 if+trim 达到相同的效果。

    <!-- 根据用户名称(模糊查询)和用户角色查询用户列表 -->
    <select id="getUserList" resultType="user">
        SELECT * FROM `smbms_user`
        <trim prefix="where" prefixOverrides="and | or">
            <if test="uRole!=null">
                AND userRole=#{uRole}
            </if>
            <if test="uName!=null and uName!=''">
                AND userName LIKE CONCAT('%',#{uName},'%')
            </if>
        </trim>
    </select>

 

 

使用动态 SQL 实现更新操作

  

  set 元素

    

  

//案例:实现根据用户 id 修改用户信息的操作,要求不需要修改的字段,则可以不进行更新。


   /**
     * 修改操作:实现根据用户 id 修改用户信息的操作
     * @param user 对象入参
     * @return
     */
    public int update(User user);


    <!--修改操作:实现根据用户 id 修改用户信息的操作 -->
    <update id="update" parameterType="user">
        UPDATE `smbms_user`
        <set>
            <if test="userCode != null">userCode=#{userCode},</if>
            <if test="userName != null">userName=#{userName},</if>
            <if test="userPassword != null">userPassword=#{userPassword},</if>
            <if test="gender != null">gender=#{gender},</if>
            <if test="birthday != null">birthday=#{birthday},</if>
            <if test="phone != null">phone=#{phone},</if>
            <if test="address != null">address=#{address},</if>
            <if test="userRole != null">userRole=#{userRole},</if>
            <if test="modifyBy != null">modifyBy=#{modifyBy},</if>
            <if test="modifyDate != null">modifyDate=#{modifyDate},</if>
        </set>
        where id = #{id}
    </update>


@Test // 测试修改操作:实现根据用户 id 修改用户信息的操作
    public void testUpdate() {
        SqlSession session=null;
        int count = 0;// 返回执行 SQL 影响的行数
        try {
            session=MyBatisUtil.getSqlSession();
            User user = new User();
            user.setId(16);
            user.setUserName("测试用户修改");
            user.setAddress("地址测试修改");
            user.setModifyBy(1);
            user.setModifyDate(new Date());
            count = session.getMapper(UserMapper.class).update(user);
            session.commit(); // 提交事务(MyBatisUtil 中设置了不自动提交事务,因此手动提交)
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();// 发生异常就回滚
            count = 0;
        }finally{
            MyBatisUtil.close(session);
        }
        System.out.println("执行 update 影响行数:" + count);
    }

 

 

  使用 trim 元素来替代 set 元素,并实现与 set 一样的效果。

    <!--修改操作:实现根据用户 id 修改用户信息的操作 -->
    <update id="update" parameterType="user">
        UPDATE `smbms_user`
        <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
            <if test="userCode != null">userCode=#{userCode},</if>
            <if test="userName != null">userName=#{userName},</if>
            <if test="userPassword != null">userPassword=#{userPassword},</if>
            <if test="gender != null">gender=#{gender},</if>
            <if test="birthday != null">birthday=#{birthday},</if>
            <if test="phone != null">phone=#{phone},</if>
            <if test="address != null">address=#{address},</if>
            <if test="userRole != null">userRole=#{userRole},</if>
            <if test="modifyBy != null">modifyBy=#{modifyBy},</if>
            <if test="modifyDate != null">modifyDate=#{modifyDate},</if>
        </trim>
    </update>

 

 

 

 

 

 

posted @ 2018-10-12 09:03  斯文败类i  阅读(278)  评论(0编辑  收藏  举报