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

xiaoxiao2022-06-11  27

一、本文章学习目标

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

转载请注明原文地址: https://www.6miu.com/read-4930658.html

最新回复(0)