封装 MyBatis 输出结果
resultType: 执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。
1.对象类型
在实体类中不仅表对应的实体类可以拿到数据库中的值,只要字段名字对应还可以赋值给其他类、
-
定义一个类
- package com.bjpowernode.vo;
- public class ViewStudent {
- private Integer id;
- private String name;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "ViewStudent{" +
- "id=" + id +
- ", name='" + name + '\'' +
- '}';
- }
- }
-
配置mappery映射,将数据库中的数据赋值给这个viewstudent
- <select id="selectStudentReturnViewStudent" resultType="ViewStudent">
- select id,name from student where id=#{sid}
- select>
-
测试如下:
在接口的对应配置文件中:
- <select id="selectStudentById" resultType="Student">
- select id,name, email,age from student where id=#{studentId}
- select>
执行结果如下:
2. 简单类型
- 接口方法:
- int countStudent();
- mapper 文件:
- select count(*) from student
-
- 测试方法:
- @Test
- public void testRetunInt(){
- int count = studentDao.countStudent();
- System.out.println("学生总人数:"+ count);
- }
结果如下:
3. map
sql 的查询结果作为 Map 的 key 和 value。推荐使用 Map
接口方法:
- //定义方法返回Map
- Map
mapper 映射文件
只能最多返回一行记录。多余一行是错误
- <select id="selectMapById" resultType="java.util.HashMap">
- select id,name,email from student where id=#{stuid}
- select>
测试方法如下:
- //返回Map
- @Test
- public void testSelecMap(){
-
- SqlSession sqlSession = MyBatisUtils.getSqlSession();
- StudentDao dao = sqlSession.getMapper(StudentDao.class);
-
- Map
- System.out.println("map=="+map);
- }
结果如下;
4. resultMap
resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。常用在列名和 java 对象属性名不一样的情况。
其实就是手动的让数据库中的列值赋值到实体类中的各个属性上,具体实现如下:
-
-
- <resultMap id="studentMap" type="com.bjpowernode.domain.Student">
-
-
- <id column="id" property="id" />
-
- <result column="name" property="name" />
- <result column="email" property="email" />
- <result column="age" property="age" />
-
- resultMap>
- <select id="selectAllStudents" resultMap="studentMap">
- select id,name, email , age from student
- select>
5. 实体类属性名和列名不同的处理方式可能会用到
-
方法一:使用resultMap
-
创建实体类
- package com.bjpowernode.domain;
- public class MyStudent {
- private Integer stuid;
- private String stuname;
- private String stuemail;
- private Integer stuage;
- public Integer getStuid() {
- return stuid;
- }
- public void setStuid(Integer stuid) {
- this.stuid = stuid;
- }
- public String getStuname() {
- return stuname;
- }
- public void setStuname(String stuname) {
- this.stuname = stuname;
- }
- public String getStuemail() {
- return stuemail;
- }
- public void setStuemail(String stuemail) {
- this.stuemail = stuemail;
- }
- public Integer getStuage() {
- return stuage;
- }
- public void setStuage(Integer stuage) {
- this.stuage = stuage;
- }
- @Override
- public String toString() {
- return "MyStudent{" +
- "stuid=" + stuid +
- ", stuname='" + stuname + '\'' +
- ", stuemail='" + stuemail + '\'' +
- ", stuage=" + stuage +
- '}';
- }
- }
-
配置mapper文件
- <resultMap id="myStudentMap" type="com.bjpowernode.domain.MyStudent">
- <id column="id" property="stuid" />
- <result column="name" property="stuname" />
- <result column="email" property="stuemail" />
- <result column="age" property="stuage" />
- resultMap>
- <select id="selectMyStudent" resultMap="myStudentMap">
- select id,name, email , age from student
- select>
-
测试如下:
-
-
方式二:直接在sql中该表列名字(更简单写)
- <select id="selectDiffColProperty" resultType="com.bjpowernode.domain.MyStudent">
- select id as stuid ,name as stuname, email as stuemail , age stuage from student
- select>
6. 模糊 like
模糊查询的实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%”
需求:查询姓名有“力”的
- 例 1: java 代码中提供要查询的 “%力%”
- 接口方法:
- List
selectLikeFirst(String name); - mapper 文件:
- select id,name,email,age from student
- where name like #{studentName}
- 测试方法:
- @Test
- public void testSelectLikeOne(){
- String name="%力%";
- List
stuList = studentDao.selectLikeFirst(name); - stuList.forEach( stu -> System.out.println(stu));
- }
- 例 2:mapper 文件中使用 like name "%" #{xxx} "%"
- 接口方法:
- List
selectLikeSecond(String name); - mapper 文件:
- select id,name,email,age from student
- where name like "%" #{studentName} "%"
- 测试方法:
- @Test
- public void testSelectLikeSecond(){
- String name="力";
- List
stuList = studentDao.selectLikeSecond(name); - stuList.forEach( stu -> System.out.println(stu));
- }
- <select id="selectLikeOne" resultType="com.bjpowernode.domain.Student">
- select id,name,email,age from student where name like #{name}
- select>
-
-
- <select id="selectLikeTwo" resultType="com.bjpowernode.domain.Student">
- select id,name,email,age from student where name like "%" #{name} "%"
- select>