数据库关系模型中有一对一,一对多,关系,
首先建立如下表 继续用最经典的学生管理系统
模型图如图所示
学生表为中心
学生证表和其为一对一关系
学生表和课程表为一对多
因为上图中,学生和学生关系为一对一关系.
由于是数据库的一对一关系,那么对应的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的配置
再增加Student的映射
可以看到当查询到studentCard的时候,将会调用com.ming.MyBatis.RoleMapper.findStudentSelfCardByStudentId sql语句的执行
对于数据展示层来说
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.ming.Util.SqlSessionFactoryUtil" %>
<%@ page import="com.ming.MyBatis.RoleMapper" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="com.ming.MyBatis.POJO.Student" %>
Hello World!
<%
long startTime = System.currentTimeMillis(); //获取开始时间
SqlSession sqlSession = null;
List 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(); //获取结束时间
%>
<%
Iterator iterator = students.iterator();
while(iterator.hasNext()){
%>
<%=((Student)iterator.next()).getStudentCard().getEndDate()%>
<%
}
%>
这个和上方同理,跳过
根据学生信息去关联男性或者女性的健康指标
两个类只需要继承同一个类,使用case语句即可.
跳过
在使用级联的时候,会造成多条sql语句的执行,此时,使用延迟加载
一开始不使用sql语句,只有当使用了sql才去发送数据
在setting这里设置,可以降低sql语句的执行问题
一般情况下是层级加载,取消层级加载,使用aggressiveLazyLoading值设置为false即可
写原生sql 这个很简单,跳过