目录
- 一、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文件
返回的是集合
接口方法
List selectStudents();
mapper文件,返回的结果类型是这个集合所包含的集合类型
Student类中要写set和get方法
3. Map(了解)
sql 的查询结果作为 Map 的 key 和 value。推荐使用 Map
列名是map的key, 列值是map的value
接口方法
//定义方法返回Map
Map
mapper文件
测试方法
@Test
public void testReturnMap(){
Map
二、resultMap(了解)
resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。
常用在列名和 java 对象属性名不一样的情况
,具体看下面
使用方式:
- 先定义 resultMap,指定列名和属性的对应关系
- 在
接口方法
List selectAllStudents();
mapper文件
三、实体类属性名和列名不同
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
模糊查询的实现有两种方式
- java 代码中给查询数据加上“%”
- 在 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