1. 掌握SQL映射文件的常用元素
2. 掌握select完成(单/多)条件查询
1. MyBatis真正的强大在于映射语句,专注于SQL,功能强大,SQL映射的配置却是相当简单。
2. SQL映射文件的几个顶级元素(按照定义的顺序)
mapper - namespace(接口的包名.接口名保持一致)cache - 配置给定命名空间的缓存cache-ref - 从其他命名空间引用缓存配置resultMap - 用来描述数据库结果集和对象的对应关系(重点)sql - 可以重用的SQL块,也可以被其他语句引用insert - 映射插入语句update - 映射更新语句delete - 映射删除语句select - 映射查询语句详解:
mapper映射文件的根节点,只有一个属性namespace,通过namespace可以区分不同的mapper,做到全局的唯一,通过namespace绑定dao接口,实现面向接口编程。
1. mapper:只有一个属性namespace,命名空间。
2. namespace和子元素的id联合保证唯一,区别不同的mapper。
3. 绑定DAO接口:namespace的命名必须跟某个接口同名;接口中的方法与映射文件中SQL语句id一一对应。
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