Java MyBatis传出参数resultType和resultMap解读

MyBatis输出参数 resultType 和 resultMap

我们需要在 mybatis-config.xml 文件中加如下配置


    
        
        
        
 
        
        
        
 
    

文件完全内容如下



 


 
    
    
        
        
    
 
    
    
        
        
        
 
        
        
        
 
    
 
    
    
 
        
        
            
            
            
            
                
                
                
                
                
                
                
                
                
            
        
 
        
        
            
            
                
                
                
                
            
        
 
    
 
    
    
        
        
    

一、resultType

执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名

1、简单类型

UserDao接口文件

public User selectUserByUserId(@Param("userId") Integer id);
 
List selectMultiParam(@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);
 
            List userList = userDao.selectMultiParam("zhangsan",20);
            for(User user: userList){
                System.out.println("用户="+user);
            }
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2、Map类型

UserDao接口文件

//定义方法返回Map
    Map selectMapById(Integer id);
UserDao.xml文件

TestMyBatis测试类

@Test
    public void testSelectMapById(){
        try {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
 
            Map map = userDao.selectMapById(1);
            System.out.println("map=="+map);
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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)在         select user_id,user_name,email,age         from user         where user_id=#{userId}                                                                  

TestMyBatis测试类

@Test
    public void testSelectAllUsers(){
        try {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
 
            List userList = 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的内容*/
    List selectLikeOne(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%";
            List userList = 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();
        }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(Java MyBatis传出参数resultType和resultMap解读)