Mybatis一对多映射详解

您所在的位置:网站首页 mybatis实现一对多 Mybatis一对多映射详解

Mybatis一对多映射详解

2022-05-03 04:12| 来源: 网络整理| 查看: 265

Mybatis一对多映射详解

更新时间:2021-09-14 10:08:43 来源:动力节点 浏览426次

1.建表

注意:在一对多关系中,数据库建表的时候外键一定是在多的那一方建立.

建表语句:

drop table courses;

drop table tutors;

如果需要可以使用 cascade constraints;

create table tutors(tutor_id number primary key, name varchar2(50) not null,email varchar2(50),phone varchar2(15), addr_id number(11) references addresses (addr_id));

create table courses(course_id number primary key,name varchar2(100) not null,description varchar2(512),start_date date ,end_date date ,tutor_id number references tutors (tutor_id));

tutors 表的样例数据如下:

insert into tutors(tutor_id,name,email,phone,addr_id)values(1,'zs','[email protected]','123-456-7890',1);

insert into tutors(tutor_id,name,email,phone,addr_id)values(2,'ls','[email protected]','111-222-3333',2);

course 表的样例数据如下:

insert into courses(course_id,name,description,start_date,end_date,tutor_id) values(1,'JavaSE','JavaSE',to_date('2015-09-10','yyyy-mm-dd'),to_date('2016-02-10','yyyy-mm-dd'),1);

insert into courses(course_id,name,description,start_date,end_date,tutor_id) values(2,'JavaEE','JavaEE',to_date('2015-09-10','yyyy-mm-dd'),to_date('2016-03-10','yyyy-mm-dd'),2);

insert into courses(course_id,name,description,start_date,end_date,tutor_id) values(3,'MyBatis','MyBatis',to_date('2015-09-10','yyyy-mm-dd'),to_date('2016-02-20','yyyy-mm-dd'),1);

在上述的表数据中,zs 讲师教授一个课程,而 ls 讲师教授两个课程

2.实现pojo java类:

Tutor类

package com.mybatis.pojo; import java.util.List; public class Tutor{ private Integer tutorId; private String name; private String email; private PhoneNumber phone; private Address address; private List courses; public Tutor(Integer tutorId, String name, String email, PhoneNumber phone, Address address, List courses) { super(); this.tutorId = tutorId; this.name = name; this.email = email; this.phone = phone; this.address = address; this.courses = courses; } public Tutor() { super(); } @Override public String toString() { return "Tutor [tutorId=" + tutorId + ", name=" + name + ", email=" + email + ", phone=" + phone + ", address=" + address + ", courses=" + courses + "]"; } public Integer getTutorId() { return tutorId; } public void setTutorId(Integer tutorId) { this.tutorId = tutorId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public PhoneNumber getPhone() { return phone; } public void setPhone(PhoneNumber phone) { this.phone = phone; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public List getCourses() { return courses; } public void setCourses(List courses) { this.courses = courses; } }

Course类实现:

package com.mybatis.pojo; import java.util.Date; public class Course{ private Integer courseId; private String name; private String description; private Date startDate; private Date endDate; public Course(Integer courseId, String name, String description, Date startDate, Date endDate) { super(); this.courseId = courseId; this.name = name; this.description = description; this.startDate = startDate; this.endDate = endDate; } public Course() { super(); } @Override public String toString() { return "Course [courseId=" + courseId + ", name=" + name + ", description=" + description + ", startDate=" + startDate + ", endDate=" + endDate + "]"; } public Integer getCourseId() { return courseId; } public void setCourseId(Integer courseId) { this.courseId = courseId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } }

配置完以上内容之后,我们需要进行配置文件中注册必要的config文件:

3.实现一对多操作

元素被用来将多行课程结果映射成一个课程Course对象的一个集合。和一对一映射一样,我们可以使用【嵌套结果ResultMap】和【嵌套查询Select】语句两种方式映射实现一对多映射。

(1)使用内嵌结果 ResultMap 实现一对多映射

我们可以使用嵌套结果resultMap方式获得课程信息,代码如下:

select t.tutor_id,t.name,t.email,t.phone,a.addr_id,a.street,a.city,a.state,a.zip,a.country,c.course_id,c.name,c.description,c.start_Date,c.end_Date from tutors t left outer join addresses a on t.addr_id=a.addr_id left outer join courses c on t.tutor_id=c.tutor_id where t.tutor_id=#{id}

这里我们使用了一个简单的使用了JOINS连接的Select语句获取课程信息。元素的resultMap属性设置成了CourseResult,CourseResult包含了Course对象属性与表列名之间的映射。

如果同时也要查询到Address相关信息,可以按照上面一对一的方式,在配置中加入即可

实现接口:

package com.mybatis.mappers; import com.mybatis.pojo.Tutor; public interface One2ManyMapper { Tutor selectTutorWithCourses(Integer id); }

测试类实现:

package com.mybatis.test; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import com.mybatis.mappers.One2ManyMapper; import com.mybatis.pojo.Tutor; import com.mybatis.utils.MyBatisSqlSessionFactory; public class One2ManyMapperTest { @Test public void test_selectTutorWithCourses() { SqlSession session=null; session = MyBatisSqlSessionFactory.openSession();//使用封装之后的类 // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象 One2ManyMapper mapper = session.getMapper(One2ManyMapper.class); Tutor tutor = mapper.selectTutorWithCourses(1); System.out.println(tutor); System.out.println("执行完毕"); } }

测试结果:

2016-10-23 14:14:26,785 [DEBUG] com.mybatis.mappers.One2ManyMapper.selectTutorWithCourses - ==> Preparing: select t.tutor_id,t.name,t.email,t.phone,a.addr_id,a.street,a.city,a.state,a.zip,a.country,c.course_id,c.name,c.description,c.start_Date,c.end_Date from tutors t left outer join addresses a on t.addr_id=a.addr_id left outer join courses c on t.tutor_id=c.tutor_id where t.tutor_id=?

2016-10-23 14:14:27,007 [DEBUG] com.mybatis.mappers.One2ManyMapper.selectTutorWithCourses - ==> Parameters: 1(Integer)

2016-10-23 14:14:27,165 [DEBUG] com.mybatis.mappers.One2ManyMapper.selectTutorWithCourses -

相关阅读

MyBatis注解详解

2021-06-21

Mybatis连接Oracle的配置

2021-07-26

什么是Mybatis

2021-07-16

MyBatis框架中的事务处理

2021-07-16

最新文章

Hibernate的Session获取方式

2022-04-29

一文读懂如何删除Cookie

2022-04-29

MVC连接数据库的步骤

2022-04-29

三种ES6数组去重的方法

2022-04-29


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3