动态 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>
个性签名:北上广不相信眼泪,90后闯荡社会,不喝清晨的粥,只干最烈的酒,90后,加油!