MyBatis输出参数 resultType 和 resultMap
我们需要在 mybatis-config.xml 文件中加如下配置
文件完全内容如下
一、resultType
执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名
1、简单类型
UserDao接口文件
public User selectUserByUserId(@Param("userId") Integer id); ListselectMultiParam(@Param("username") String userName, @Param("userage") Integer age);
UserDao.xml文件
TestMyBatis测试类
@Test public void testSelectUserByUserId(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.selectUserByUserId(1); System.out.println("user="+user); sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testSelectMultiParam(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); ListuserList = userDao.selectMultiParam("zhangsan",20); for(User user: userList){ System.out.println("用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } }
2、Map类型
UserDao接口文件
//定义方法返回Map Map
TestMyBatis测试类
@Test public void testSelectMapById(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); Map
3、对象类型
UserDao接口文件
ViewUser selectUserReturnViewUser(@Param("userId") Integer id);
UserDao.xml文件
TestMyBatis测试类
@Test public void testSelectUserReturnViewUser(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); ViewUser user = userDao.selectUserReturnViewUser(1); System.out.println("ViewUser="+user); sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } }
注:
(1)如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身
(2)resultType 和 resultMap,不能同时使用
(3)resultType="User" 如果一个项目中有多个User类文件,会报错
Could not resolve type alias 'User'. Cause: java.lang.
ClassNotFoundException: Cannot find class: User
此时最好指定全限定名称
二、resultMap
resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系;更灵活的把列值赋值给指定属性
常用在列名和 java 对象属性名不一样的情况
使用方式:
(1)先定义 resultMap,指定列名和属性的对应关系
(2)在
列名和Java对象属性名不一样时,有两种处理方式
(1)使用resultMap映射
(2)resultType的默认原则是 同名的列值赋值给同名的属性, 使用列别名(java对象的属性名)
如下Java类属性
public class User { private int userId; private String userName; private String email; private int age; } public class MyUser { private int myUserId; private String myUserName; private String myUserEmail; private int myUserAge; }
UserDao接口文件
/* 使用resultMap定义映射关系 */ ListselectAllUsers(); List selectMyUser(); List selectDiffColProperty();
UserDao.xml文件
TestMyBatis测试类
@Test public void testSelectAllUsers(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); ListuserList = userDao.selectAllUsers(); for(User user: userList){ System.out.println("用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testSelectMyUser(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); List userList = userDao.selectMyUser(); for(MyUser user: userList){ System.out.println("MyUser用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testSelectDiffColProperty(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); List userList = userDao.selectDiffColProperty(); for(MyUser user: userList){ System.out.println("MyUser用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } }
三、模糊 like
模糊查询的实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%”
UserDao接口文件
/*第一种模糊查询, 在java代码指定 like的内容*/ ListselectLikeOne(String name); /*name就是李值, 在mapper中拼接 like "%" li "%" */ List selectLikeTwo(String name);
UserDao.xml文件
TestMyBatis测试类
@Test public void testSelectLikeOne(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); //like的内容 String name = "%li%"; ListuserList = userDao.selectLikeOne(name); for(User user: userList){ System.out.println("User用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testSelectLikeTwo(){ try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); //like的内容 String name = "li"; List userList = userDao.selectLikeTwo(name); for(User user: userList){ System.out.println("User用户="+user); } sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。