文章目录
1. resulttype和resultMap
当查询接口需要查询数据库时,通常我们会封装查询的数据库数据映射到实体类中,result type类型为自定义的实体类,当实体类的属性和数据库的字段不是一一对应时,就需要我们手动配置resultMap
2. resultMap简单使用
2.1 实体类
public class Class {
private Integer id;
private String classname;
}
2.2 数据库字段
可以看出数据库中的字段名为name,实体类的字段名为classname
2.3 controller层
@GetMapping("/findClass/{id}")
public Class test1(@PathVariable int id){
return resultMapDao.selectClass(id);
}
2.4 dao层
lass selectClass(int id);
2.5 mapper层
<select id="selectClass" parameterType="int" resultMap="TestMap">
select * from class where id=#{id}
</select>
<resultMap id="TestMap" type="com.example.demo.Class">
<!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
<!-- property:主键在pojo中的属性名 -->
<!-- column:主键在数据库中的列名 -->
<id property="id" column="ID"/>
<!-- 定义普通属性 -->
<result property="classname" column="name"/>
</resultMap>
结果
{
"id": 1,
"classname": "高一一班"
}
3. 使用resultMap进行关联查询
3.1 一对一查询
一个班级只能有一个班主任
3.1.1 实体类
班级类
public class Class {
private Integer id;
private String classname;
private Teacher teacher;
}
教师类
public class Teacher {
private Integer id;
private String teachername;
private Integer classid;
}
3.1.2 数据库字段
教师表
3.1.3 mapper 层
<select id="selectClass" parameterType="int" resultMap="TestMap">
select *
from class c
left join teacher t on t.classid = c.id
where c.id = #{id} </select>
<resultMap id="TestMap" type="com.example.demo.Class">
<id property="id" column="ID"/>
<result property="classname" column="name"/>
<!-- association :配置一对一属性 -->
<!-- property:Teacher里面的teacher属性名 -->
<!-- javaType:属性类型 -->
<!-- column:那个字段作为条件 -->
<association property="teacher" javaType="com.example.demo.Teacher" column="id">
<!-- id:声明主键,表示ID是关联查询对象的唯一标识-->
<id property="id" column="ID"/>
<result property="teachername" column="tname"/>
<result property="classid" column="classid"/>
</association>
</resultMap>
3.1.4 查询结果
{
"id": 1,
"classname": "高一一班",
"teacher": {
"id": 1,
"teachername": "小王老师",
"classid": 1
}
}
3.2 一对多查询
一个班级有多个学生
3.2.1 修改实体类
班级类
public class Class {
private Integer id;
private String classname;
// private Teacher teacher;
private List<Class> aclass;
}
学生类
public class Student {
private Integer id;
private String name;
private Integer classid;
}
3.2.2 修改mapper
<select id="selectClass" parameterType="int" resultMap="TestMap">
select *
from class c
left join student s on s.classid = c.id
where c.id = #{id} </select>
<resultMap id="TestMap" type="com.example.demo.Class">
<id property="id" column="ID"/>
<result property="classname" column="name"/>
<!-- association :配置一对一属性 -->
<!-- property:Class里面的aclass属性名 -->
<!-- javaType:属性类型 -->
<collection property="aclass" javaType="java.util.ArrayList" ofType="com.example.demo.Student">
<!-- 配置主键,是关联Order的唯一标识 -->
<id property="id" column="sid"/>
<result property="name" column="cname"/>
<result property="classid" column="classid"/>
</collection>
</resultMap>
3.2.3 结果
{
"id": 1,
"classname": "高一一班",
"aclass": [
{
"id": 1,
"name": "刘翔",
"classid": 1
},
{
"id": 2,
"name": "苏炳添",
"classid": 1
}
]
}