zoukankan      html  css  js  c++  java
  • 动态 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>

     

     

     

  • 相关阅读:
    webuploader多次触发注册
    下载二进制文件
    表格打印
    多个请求下 loading 的展示与关闭
    前进刷新后退不刷新
    页面权限控制和登陆验证
    axios.post 配置formdata提交
    react错误边界
    关于beforeRouterEnter获取不到this
    JS
  • 原文地址:https://www.cnblogs.com/wxdestiny/p/9776198.html
Copyright © 2011-2022 走看看