封装MyBatis输出结果

目录
  • 一、resultType
    • 1. 简单类型(掌握)
    • 2. 对象类型(掌握)
    • 3. Map(了解)
  • 二、resultMap(了解)
  • 三、实体类属性名和列名不同
    • 1. 使用resultMap
    • 2. 使用列别名和resultType
  • 四、模糊查询like
    • 1. 第一种
    • 2. 第二种
  • 五、总结
    • 1. resultType
    • 2. resultMap
    • 3. 列名和属性名不同
    • 4. like

一、resultType

resultType: 执行 sql 得到 ResultSet 转换的类型,也就是要返回的结果类型,使用类型的完全限定名或别名。

注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。

resultType 和 resultMap,不能同时使用

1. 简单类型(掌握)

接口方法:

int countStudent();

mapper文件




测试方法

@Test
public void testRetunInt(){
	int count = studentDao.countStudent();
	System.out.println(" 学生总人数:"+ count);
}

2. 对象类型(掌握)

接口方法

Student selectById(int id);

mapper文件


封装MyBatis输出结果_第1张图片

返回的是集合

接口方法

List selectStudents();

mapper文件,返回的结果类型是这个集合所包含的集合类型


Student类中要写set和get方法

3. Map(了解)

sql 的查询结果作为 Map 的 key 和 value。推荐使用 Map
注意:Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录是错误。

列名是map的key, 列值是map的value

接口方法

//定义方法返回Map
    Map selectMapById(Integer id);

mapper文件


    

测试方法

@Test
public void testReturnMap(){
	Map retMap = studentDao.selectMapById(1002);
	System.out.println(" 查询结果是 Map:"+retMap);
}

二、resultMap(了解)

resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。
常用在列名和 java 对象属性名不一样的情况,具体看下面

使用方式:

  • 先定义 resultMap,指定列名和属性的对应关系
  • select id,name, email , age from student

    三、实体类属性名和列名不同

    1. 使用resultMap

    接口方法

    List selectMyStudent();
    

    此时的情况就是实体类的属性名和表中的列名不同,

    实体类:

    public class MyStudent {
        private Integer stuid;
        private String stuname;
        private String stuemail;
        private Integer stuage;
        // get、set、等方法
    }    
    

    mapper文件

    
            
    
            
            
            
            
            
    
    
        
        
        
    

    测试方法

     @Test
        public void testSelectMyStudent(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            StudentDao dao = sqlSession.getMapper(StudentDao.class);
    
            List myStudentList = dao.selectMyStudent();
            myStudentList.forEach(stu-> System.out.println(stu));
    
            sqlSession.close();
    
        }
    
    // 打印的结果
    MyStudent{stuid=1001, stuname='唐三', stuemail='[email protected]', stuage=18}
    MyStudent{stuid=1002, stuname='无邪', stuemail='[email protected]', stuage=20}
    MyStudent{stuid=1003, stuname='白昊天', stuemail='[email protected]', stuage=18}
    MyStudent{stuid=1004, stuname='刘桑', stuemail='[email protected]', stuage=18}
    MyStudent{stuid=1005, stuname='李白', stuemail='[email protected]', stuage=30}
    MyStudent{stuid=1006, stuname='王昭君', stuemail='[email protected]', stuage=30}
    

    2. 使用列别名和resultType

    此时的实体类还是

    public class MyStudent {
        private Integer stuid;
        private String stuname;
        private String stuemail;
        private Integer stuage;
        // get、set、等方法
    } 
    

    接口方法

    List selectDiffColProperty();
    

    mapper文件

     
        
    

    测试方法

        @Test
        public void testSelectDiffColProperty(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            StudentDao dao = sqlSession.getMapper(StudentDao.class);
    
            List myStudentList = dao.selectDiffColProperty();
            myStudentList.forEach(stu-> System.out.println(stu));
    
            sqlSession.close();
        }
    

    结果和使用resultMap是一样的,所以这两种方法使用哪一种都行

    四、模糊查询like

    模糊查询的实现有两种方式

    1. java 代码中给查询数据加上“%”
    2. 在 mapper 文件 sql 语句的条件位置加上“%”

    1. 第一种

    接口方法

        /*第一种模糊查询, 在java代码指定 like的内容*/
    //   例如:唐%
        List selectLikeOne(String name);
    

    mapper文件

    
        
    

    测试文件

       @Test
        public void testSelectLikeOne(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            StudentDao dao = sqlSession.getMapper(StudentDao.class);
    
            List studentList = dao.selectLikeOne("唐%");
            studentList.forEach(stu-> System.out.println(stu));
    
            sqlSession.close();
        }
    

    可以看出这种方法非常的方便

    2. 第二种

    接口方法

    /* name就是唐这个值, 在mapper中拼接 like  "%" 李 "%" */
        List selectLikeTwo(String name);
    

    mapper文件

     
        
    

    测试

     @Test
        public void testSelectLikeTwo(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            StudentDao dao = sqlSession.getMapper(StudentDao.class);
    
            List studentList = dao.selectLikeTwo("白");
            studentList.forEach(stu-> System.out.println(stu));
    
            sqlSession.close();
        }
    

    这种的是直接在mapper中写死了sql模糊查询,不利于扩展

    推荐第一种方式

    五、总结

    1. resultType

    表示sql语句的执行结果,转换为java对象的类型

    • 类型的全限定名称

    2. resultMap

    自定义列名和java对象的属性名对应关系

    3. 列名和属性名不同

    • 使用resultMap
    • 使用列别名

    4. like

    • 在java代码中指定like的内容
    • 在mapper文件中拼接like

你可能感兴趣的:(封装MyBatis输出结果)