Mybatis动态SQL

范例:根据用户名称和角色id进行查询
1.接口方法

//根据用户名称和角色id进行查询
  	public List<User> getUserListByUserNameAndRoleId(@Param("userName")String userName,@Param("roleId")Integer roleId);

2.映射文件

<!-- 根据用户名称和角色id进行查询 -->
  <select id="getUserListByUserNameAndRoleId" resultType="User">
     select u.*,r.id,r.roleName from smbms_user u,smbms_role r where u.userName like concat('%',#{userName},'%') and u.userRole=#{roleId} and u.userRole=r.id
  </select>

3.测试

@Test
	public void test18(){  
		SqlSession sqlSession = SqlSessionUtil.creatSqlSession();
		List<User> user=sqlSession.getMapper(UserMapper.class).getUserListByUserNameAndRoleId("赵", 2);
		for(User u:user) {
			System.out.println(u.getUserName());
		}
		
		// 关闭sqlSession
				SqlSessionUtil.closSqleSession(sqlSession);
	}

一般而言,用户在查询时会输入查询内容,如果此时用户在搜索栏啥也没输入,应该查出所有的信息,如果按照以上写法,查出来为空。
解决改进:使用动态SQL

动态SQL

  • <if>
 select u.*,r.id as r_id,r.roleName from smbms_user u,smbms_role r where 
    <if test="roleId!=null">u.userRole=#{roleId} and</if> 
    <if test="userName!=null">and u.userName like concat('%',#{userName},'%') </if>
     u.userRole=r.id 

测试

@Test
	public void test18(){  
		SqlSession sqlSession = SqlSessionUtil.creatSqlSession();
		List<User> user=sqlSession.getMapper(UserMapper.class).getUserListByUserNameAndRoleId(null, 2);
		for(User u:user) {
			System.out.println(u.getUserName());
		}
		
		// 关闭sqlSession
				SqlSessionUtil.closSqleSession(sqlSession);
	}
  • <where>+<if>
 select * from smbms_user
    <where>
    <if test="userName!=null and userName!=''">and userName like concat('%',#{userName},'%') </if>
    <if test="roleId!=null">and userRole=#{roleId}</if> 
    </where>
  • <trim>
<!-- trim使用 -->
	select * from smbms_user
	<trim prefix="where" prefixOverrides="and|or">
		<if test="userName!=null and userName!=''">
			and userName like concat('%',#{userName},'%')
		</if>
		<if test="roleId!=null">and userRole=#{roleId}</if> 
	</trim>
update smbms_user
  <trim prefix="set" suffix="where id=#{id}" suffixOverrides=",">
  <if test="userCode!=null">userCode=#{userCode},</if>
  <if test="userName!=null">userName=#{userName},</if>
  <if test="userPassword!=null">userPassword=#{userPassword},</if>
  <if test="phone!=null">phone=#{phone}</if>
  
  </trim>

范例:更新用户的信息
1.接口文件

//更新用户的信息
  	public void updtaUser();

2.映射文件

 <!-- 更新用户信息 -->
  <update id="updtaUser" 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="phone!=null">phone=#{phone}</if>
  </set>
  where id=#{id}
  </update>

测试

@Test
	public void test19(){  
		SqlSession sqlSession = SqlSessionUtil.creatSqlSession();
		User user=new User();
		user.setId(14);
		user.setUserName("帅哥美女");
		user.setUserCode("123456");
		user.setPhone("null");
		sqlSession.getMapper(UserMapper.class).updtaUser(user);
		sqlSession.commit();
		
		// 关闭sqlSession
				SqlSessionUtil.closSqleSession(sqlSession);
	}
  • <set>
 <!-- 更新用户信息 -->
  <update id="updtaUser" 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="phone!=null">phone=#{phone}</if>
  </set>
  where id=#{id}
  </update>

范例:数组入参
1.接口方法

//数组入参
  	public List<User> getUserListByArray(Integer [] roleIds);

2.映射文件

<!-- 数组入参 -->
  <select id="getUserListByArray" resultMap="userResult">
  select * from smbms_user where userRole in 
  <foreach collection="array" item="roleIds" open="(" separator="," close=")">
   #{roleIds}
  </foreach>
     
  </select>
  <resultMap type="User" id="userResult">
  <id property="id" column="id"></id>
  <result property="userName" column="userName" />
  
  </resultMap>

测试

@Test
	public void test20(){  
		SqlSession sqlSession = SqlSessionUtil.creatSqlSession();
		//要查询的角色数组集合
		Integer roleIds[]= {1,2};
		List<User> list=sqlSession.getMapper(UserMapper.class).getUserListByArray(roleIds);
		for(User u:list) {
			System.out.println(u.getUserName()+"\t"+u.getUserPassword());
		}
		// 关闭sqlSession
				SqlSessionUtil.closSqleSession(sqlSession);
	}
  • <foreach >
<!-- 数组入参 -->
  <select id="getUserListByArray" resultMap="userResult">
  select * from smbms_user where userRole in 
  <foreach collection="array" item="roleIds" open="(" separator="," close=")">
   #{roleIds}
  </foreach>
     
  </select>
  <resultMap type="User" id="userResult">
  <id property="id" column="id"></id>
  <result property="userName" column="userName" />
  
  </resultMap>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值