Mybatis一对多映射详解 |
您所在的位置:网站首页 › mybatis实现一对多 › Mybatis一对多映射详解 |
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-21Mybatis连接Oracle的配置 2021-07-26什么是Mybatis 2021-07-16MyBatis框架中的事务处理 2021-07-16最新文章 Hibernate的Session获取方式 2022-04-29一文读懂如何删除Cookie 2022-04-29MVC连接数据库的步骤 2022-04-29三种ES6数组去重的方法 2022-04-29 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |