八.多对一处理
1.首先,设计2个表,一个stuent一个teacher,搞里头(偷懒使用了Lombok)
2.建立对应的实体类
package com.why.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: Mybatis_annotation
* @description:
* @author: @why
* @create: 2020-08-29 10:25
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
private Integer id;
private String name;
}
package com.why.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: Mybatis_annotation
* @description:
* @author: @why
* @create: 2020-08-29 10:25
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer tid;
//根据tid可以得到每个学生所对应的老师,也就是多对一处理
private Teacher teacher;
}
接口
package com.why.Mapper;
import com.why.bean.Student;
import java.util.List;
/**
* @program: Mybatis_annotation
* @description:
* @author: @why
* @create: 2020-08-29 10:31
**/
public interface StudentMapper {
//得到学生信息以及每个学生所对应的老师的信息
public List<Student> getMsgByStudent();
}
3.接着开始写xml 多对一使用的是association
第一种方式:按照结果嵌套处理
就是按照sql语句来进行对应的赋值,接着做结果集映射 ps:最好起一个别名
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.why.Mapper.StudentMapper">
<select id="getMsgByStudent" resultMap="stuMsg">
select stu.id sid,stu.`name` sname,stu.tid stid,tea.id tid,tea.`name` tname from student stu
join teacher tea
on stu.tid=tea.id;
</select>
<resultMap id="stuMsg" type="student">
<!-- 普通属性 按照别名来一一对应-->
<result column="sid" property="id"/>
<result column="sname" property="name"/>
<result column="stid" property="tid"/>
<!-- student的属性是有一个是teacher 此时它的类型是Teacher类型-->
<association property="teacher" javaType="com.why.bean.Teacher">
<!-- 开始赋值-->
<result column="tid" property="id"/>
<result column="tname" property="name"/>
</association>
</resultMap>
</mapper>
第二种:按照查询嵌套处理
我不咋喜欢的一种方式,先直接查询所有的信息,然后再将对应是信息做一个筛选,类似子查询
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.why.dao.studentMapper">
<!--我们先将所有学生的信息查出来 并将结果映射为一个map-->
<select id="getStudentAndTeacher" resultMap="stuAndTeacher">
select * from student;
</select>
<!-- 对学生map的映射-->
<resultMap id="stuAndTeacher" type="student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!-- 给student中的Teacher 属性绑定一个表 这个表的列名为tid 类型为Teacher 再绑定一个对Teacher表的查询 此时就会对另一个表按照对应的tid查询了-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"> </association>
</resultMap>
<!--对teacher表的查询-->
<select id="getTeacher" resultType="teacher">
select * from teacher where id=#{id};
</select>
</mapper>