case mybatis 不同表_MyBatis 级联

数据库关系模型中有一对一,一对多,关系,

首先建立如下表 继续用最经典的学生管理系统

建表

模型图如图所示

caf2aec68b276b697d45c04ed89e55ac.png

学生表为中心

学生证表和其为一对一关系

学生表和课程表为一对多

一对一关系

因为上图中,学生和学生关系为一对一关系.

由于是数据库的一对一关系,那么对应的bean中,也应该是一对一关系

举栗子的表为学生表和学生证表

其中学生证表的中的学生编号的外键为学生表的主键

那么在学生表的POJO对象中,应该有学生证表的POJO的映射.即

package com.ming.MyBatis.POJO;/** * @author ming */public class Student { private int uid; private String studentName; private String gender; private String studentIdNumber; private String remarks; private StudentCard studentCard; public void setStudentCard(StudentCard studentCard) { this.studentCard = studentCard; } public StudentCard getStudentCard() { return studentCard; } public void setUid(int uid) { this.uid = uid; } public void setStudentName(String studentName) { this.studentName = studentName; } public void setGender(String gender) { this.gender = gender; } public void setStudentIdNumber(String studentIdNumber) { this.studentIdNumber = studentIdNumber; } public void setRemarks(String remarks) { this.remarks = remarks; } public int getUid() { return uid; } public String getStudentName() { return studentName; } public String getGender() { return gender; } public String getStudentIdNumber() { return studentIdNumber; } public String getRemarks() { return remarks; }}

对于card的POJO如下所示

package com.ming.MyBatis.POJO;import java.util.Date;/** * @author ming */public class StudentCard { private int uid; private String studentNumber; private String birthplace; private Date dateOfIssue; private Date endDate; private String remarks; public void setUid(int uid) { this.uid = uid; } public void setStudentNumber(String studentNumber) { this.studentNumber = studentNumber; } public void setBirthplace(String birthplace) { this.birthplace = birthplace; } public void setDateOfIssue(Date dateOfIssue) { this.dateOfIssue = dateOfIssue; } public void setEndDate(Date endDate) { this.endDate = endDate; } public void setRemarks(String remarks) { this.remarks = remarks; } public int getUid() { return uid; } public String getStudentNumber() { return studentNumber; } public String getBirthplace() { return birthplace; } public Date getDateOfIssue() { return dateOfIssue; } public Date getEndDate() { return endDate; } public String getRemarks() { return remarks; }}

先增加StudentCard的配置

SELECT student_card.uid, student_card.student_number, student_card.remarks,student_card.end_date, student_card.date_of_issue, student_card.birthplaceFROM student_card WHERE student_card.uid = #{studentId};

再增加Student的映射

SELECT student.uid, student.gender, student.remarks, student.student_id_number,student.student_nameFROM studentWHERE student.uid = 1;

可以看到当查询到studentCard的时候,将会调用com.ming.MyBatis.RoleMapper.findStudentSelfCardByStudentId sql语句的执行

对于数据展示层来说

Hello World!

students = null; for(int i = 0; i < 10; i++) { try { sqlSession = SqlSessionFactoryUtil.openSqlSesion(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); students = roleMapper.getStudent(1); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally { if (sqlSession != null) { sqlSession.close(); } } } long endTime = System.currentTimeMillis(); //获取结束时间%>

一对多

这个和上方同理,跳过

鉴别器

根据学生信息去关联男性或者女性的健康指标

两个类只需要继承同一个类,使用case语句即可.

跳过

性能问题

在使用级联的时候,会造成多条sql语句的执行,此时,使用延迟加载

一开始不使用sql语句,只有当使用了sql才去发送数据

在setting这里设置,可以降低sql语句的执行问题

一般情况下是层级加载,取消层级加载,使用aggressiveLazyLoading值设置为false即可

另一种

写原生sql 这个很简单,跳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值