SSM(三)使用MyBatis实现条件查询

一、本文章学习目标

1. 掌握SQL映射文件的常用元素

2. 掌握select完成(单/多)条件查询

二、SQL映射的XML文件

1. MyBatis真正的强大在于映射语句,专注于SQL,功能强大,SQL映射的配置却是相当简单。

2. SQL映射文件的几个顶级元素(按照定义的顺序)

  • mapper - namespace(接口的包名.接口名保持一致)
  • cache - 配置给定命名空间的缓存
  • cache-ref - 从其他命名空间引用缓存配置
  • resultMap - 用来描述数据库结果集和对象的对应关系(重点)
  • sql - 可以重用的SQL块,也可以被其他语句引用
  • insert - 映射插入语句
  • update - 映射更新语句
  • delete - 映射删除语句
  • select - 映射查询语句

详解:

mapper映射文件的根节点,只有一个属性namespace,通过namespace可以区分不同的mapper,做到全局的唯一,通过namespace绑定dao接口,实现面向接口编程。

三、mapper元素

1. mapper:只有一个属性namespace,命名空间。

2. namespace和子元素的id联合保证唯一,区别不同的mapper。

3. 绑定DAO接口:namespace的命名必须跟某个接口同名;接口中的方法与映射文件中SQL语句id一一对应。

四、select元素

1. select是MyBatis中最常用的元素之一。

2. select语句有很多属性可以详细配置每一条语句:

  • id:命名空间中唯一的标识符。接口中的方法与映射文件中的SQL语句id一一对应
  • parameterType:传入SQL语句的参数类型的完全限定名或别名
  • resultType:SQL语句返回值类型的完整类名或别名

3. 案例:根据用户名称查询用户列表(模糊查询)

UserMapper.xml

	<!-- 根据用户名查询用户列表(模糊查询) -->
	<select id="getUserListByUserName" parameterType="string" resultType="user">
		select * from smbms_user where userName like CONCAT('%',#{uName},'%')
	</select>

UserMapper.java

public interface UserMapper {
	public List<User> getUserList();
	
	public List<User> getUserListByUserName(String uName);
}

UserMapperTest.java

@Test
	public void testGetUserListByUserName() {
		List<User> userList = null;
		SqlSession sqlSession = null;
		try {
			sqlSession = MyBatisUtil.createSqlSession();
			userList = sqlSession.getMapper(UserMapper.class).getUserListByUserName("a");
		}finally {
			MyBatisUtil.closeSqlSession(sqlSession);
		}
		
		for(User user : userList) {
			logger.debug("testGetUserListByUserName userCode: " + user.getUserCode() + " userName: " + user.getUserName());
		}
	}

4. 按条件查询用户表,若多条件情况下如何处理?

parameterType:

  • 基础数据类型

int、String、Date等

只能传入一个,通过#{参数名}即可获取传入的值

UserMapper.java

public interface UserMapper {
	public List<User> getUserList();
	
	public List<User> getUserListByUserName(String uName);
	
	public List<User> getUserListByUser(User user);
}

UserMapper.xml

<!-- 多条件查询用户列表 -->
	<select id="getUserListByUser" resultType="user" parameterType="user">
		select * from smbms_user where userName like CONCAT('%',#{userName},'%') and userRole=#{userRole}
	</select>

UserMapperTest.java

@Test
	public void testGetUserListByUser() {
		List<User> userList = null;
		SqlSession sqlSession = null;
		User user = new User();
		user.setUserName("a");
		user.setUserRole(1);
		try {
			sqlSession = MyBatisUtil.createSqlSession();
			userList = sqlSession.getMapper(UserMapper.class).getUserListByUser(user);
		} finally {
			MyBatisUtil.closeSqlSession(sqlSession);
		}
		
		for(User u : userList) {
			logger.debug("testGetUserListByUser userCode: " + u.getUserCode() + "userName: " + u.getUserName());
		}
	}
  • 复杂数据类型

Java实体类、Map等

通过#{属性名}或者#{Map的key}即可获取传入值

UserMapper.java

	public List<User> getUserListByMap(Map<String, String> userMap);

UserMapper.xml

<select id="getUserListByMap" resultType="user" parameterType="Map">
		select * from smbms_user where userName like CONCAT('%',#{uName},'%') and userRole=#{uRole}
	</select>

UserMapperTest.java

@Test
	public void testGetUserListByMap() {
		List<User> userList = null;
		SqlSession sqlSession = null;
		Map<String, String> userMap = new HashMap<String, String>();
		userMap.put("uName", "a");
		userMap.put("uRole","1");
		try {
			sqlSession = MyBatisUtil.createSqlSession();
			userList = sqlSession.getMapper(UserMapper.class).getUserListByMap(userMap);
		} finally {
			MyBatisUtil.closeSqlSession(sqlSession);
		}
		
		for(User u : userList) {
			logger.debug("testGetUserListByUser userCode: " + u.getUserCode() + "userName: " + u.getUserName());
		}
	}

总结:MyBatis入参:

(1)单参数入参:Java基础数据类型

(2)多参数入参:Java实体类或者封装成Map

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值