MyBatis之多对一映射
概念理解:
就拿拿老师与学生的关系来做例子,一个学生可以有多个老师,相反一个老师也可以有多个学生。多对一就好比一个老师可以管理一个班学生的关系.
实操:
1.新建数据表与实体类
注意:本次项目的实体类采用了Lombok工具,详细使用参考===>Lombok使用方法
数据表设计
实体类Student
@Data
public class Student
{
private int id;
private String name;
//学生需要关联一个老师
private Teacher teacher;
}
实体类Teacher
@Data
public class Teacher
{
private int id;
private String name;
}
2.建立Mapper接口
注意:必须要将接口注册绑定到我们的核心配置文件中(mybatis-config.xml)
<!--绑定接口--> <mappers> <mapper class="com.zzx.dao.StudentMapper"/> <mapper class="com.zzx.dao.TeacherMapper"/> </mappers>
StudentMapper与TeacherMapper
public interface StudentMapper
{
//查询所有学生信息及对应的老师
List<Student> getStudent();
List<Student> getStudent2();
}
3.建立Mapper.xml文件
StudentMapper.xml(这里给大家举例了两个方法,大家以后觉得哪个方便就用哪个)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzx.dao.StudentMapper">
<!--按照结果嵌套处理-->
<select id="getStudent" resultMap="Student">
select s.id sid,s.name sname,t.id tid,t.name tname
from student s,teacher t
where s.tid=t.id;
</select>
<resultMap id="Student" type="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
</association>
</resultMap>
<!--按照查询嵌套处理-->
<select id="getStudent2" resultMap="StudentTeacher">
select * from student
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--复杂的属性,我们需要单独处理
对象:association
集合:collection
-->
<association property="teacher" column="tid" javaType="Teacher" select="com.zzx.dao.TeacherMapper.getTeacher"/>
</resultMap>
</mapper>
TeacherMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzx.dao.TeacherMapper">
<!--根据id查询-->
<select id="getTeacher" resultType="Teacher">
select * from teacher where id =#{tid}
</select>
</mapper>
4.测试
public class Test
{
//查询所有--按照结果嵌套处理
@org.junit.Test
public void test()
{
//1.获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2.执行SQL
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studentList = studentMapper.getStudent();
for (Student student : studentList)
{
System.out.println(student);
}
//关闭SqlSession
sqlSession.close();
}
//查询所有--按照查询嵌套处理
@org.junit.Test
public void test2()
{
//1.获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2.执行SQL
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studentList = studentMapper.getStudent2();
for (Student student : studentList)
{
System.out.println(student);
}
//关闭SqlSession
sqlSession.close();
}
}
OK,今天的学习就结束啦,如果对你有帮助麻烦给个三连(点赞关注加收藏),我是猪猪侠,一个码农,我们在Mybatis07篇再会
往期MyBatis教学地址----->MyBatis文章合集