摘要:數(shù)據(jù)庫關(guān)系模型中有一對一一對多關(guān)系首先建立如下表繼續(xù)用最經(jīng)典的學(xué)生管理系統(tǒng)建表模型圖如圖所示學(xué)生表為中心學(xué)生證表和其為一對一關(guān)系學(xué)生表和課程表為一對多一對一關(guān)系因?yàn)樯蠄D中學(xué)生和學(xué)生關(guān)系為一對一關(guān)系由于是數(shù)據(jù)庫的一對一關(guān)系那么對應(yīng)的中也應(yīng)該是
數(shù)據(jù)庫關(guān)系模型中有一對一,一對多,關(guān)系,
首先建立如下表 繼續(xù)用最經(jīng)典的學(xué)生管理系統(tǒng)
模型圖如圖所示
學(xué)生表為中心
學(xué)生證表和其為一對一關(guān)系
學(xué)生表和課程表為一對多
因?yàn)樯蠄D中,學(xué)生和學(xué)生關(guān)系為一對一關(guān)系.
由于是數(shù)據(jù)庫的一對一關(guān)系,那么對應(yīng)的bean中,也應(yīng)該是一對一關(guān)系
舉栗子的表為學(xué)生表和學(xué)生證表
其中學(xué)生證表的中的學(xué)生編號(hào)的外鍵為學(xué)生表的主鍵
那么在學(xué)生表的POJO對象中,應(yīng)該有學(xué)生證表的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的映射
可以看到當(dāng)查詢到studentCard的時(shí)候,將會(huì)調(diào)用com.ming.MyBatis.RoleMapper.findStudentSelfCardByStudentId sql語句的執(zhí)行
對于數(shù)據(jù)展示層來說
<%@ 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(); //獲取開始時(shí)間 SqlSession sqlSession = null; Liststudents = 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(); //獲取結(jié)束時(shí)間 %> <% Iterator iterator = students.iterator(); while(iterator.hasNext()){ %> <%=((Student)iterator.next()).getStudentCard().getEndDate()%> <% } %>
這個(gè)和上方同理,跳過
鑒別器根據(jù)學(xué)生信息去關(guān)聯(lián)男性或者女性的健康指標(biāo)
兩個(gè)類只需要繼承同一個(gè)類,使用case語句即可.
跳過
在使用級(jí)聯(lián)的時(shí)候,會(huì)造成多條sql語句的執(zhí)行,此時(shí),使用延遲加載
一開始不使用sql語句,只有當(dāng)使用了sql才去發(fā)送數(shù)據(jù)
在setting這里設(shè)置,可以降低sql語句的執(zhí)行問題
一般情況下是層級(jí)加載,取消層級(jí)加載,使用aggressiveLazyLoading值設(shè)置為false即可
另一種寫原生sql 這個(gè)很簡單,跳過
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74158.html
摘要:問題解析因?yàn)闊釔郏云床?。如何解決問題本身給出解決方案,就是延遲加載。延遲加載延遲加載會(huì)解決上述的問題,也就是在個(gè)級(jí)聯(lián)表的情況下,只加載需求的數(shù)據(jù)庫表數(shù)據(jù)。在特定的關(guān)聯(lián)中,使用屬性覆蓋該內(nèi)容的功能。 Mybatis N+1問題解析 因?yàn)闊釔?,所以拼搏? --RuiDer 前導(dǎo)必備 Mybatis 數(shù)據(jù)庫 級(jí)聯(lián) N+1問題?? N+1問題來源于數(shù)據(jù)庫中常見的...
摘要:需求背景在很多場合,我們需要對表中的數(shù)據(jù)對遞歸查詢。結(jié)果查詢結(jié)果將會(huì)以對象返回,若有多條父依賴,將顯示在的嵌套中。雖然在查詢時(shí),一次性獲得了級(jí)聯(lián)結(jié)構(gòu),后續(xù)解析仍然復(fù)雜。故長度最短為如果入棧次數(shù)太多,表明可能出現(xiàn)環(huán)形依賴。 1. 需求背景 在很多場合,我們需要對表中的數(shù)據(jù)對遞歸查詢。如以下情況: 1. 菜單分類中,我們往往需要由一級(jí)菜單獲得對應(yīng)的子菜單。 id name pid ...
摘要:代碼規(guī)約掃描插件以今年年初發(fā)布的阿里巴巴開發(fā)規(guī)約為標(biāo)準(zhǔn),作為的插件形式存在,檢測代碼中存在不規(guī)范得位置然后給予提示。 IntelliJ IDEA是目前最好最強(qiáng)最智能的Java IDE,前幾天,他剛剛年滿18歲。 showImg(https://segmentfault.com/img/remote/1460000017974611);? 本文,給大家推薦幾款我私藏已久的,自己經(jīng)常使用的...
摘要:屬性屬性表示控制權(quán)是否轉(zhuǎn)移控制權(quán)已轉(zhuǎn)移當(dāng)前一方?jīng)]有控制權(quán)控制權(quán)沒有轉(zhuǎn)移當(dāng)前一方有控制權(quán)屬性,是在維護(hù)關(guān)聯(lián)關(guān)系的時(shí)候起作用的。表的外鍵并沒有數(shù)據(jù)結(jié)論如果設(shè)置控制反轉(zhuǎn)即然后通過部門方維護(hù)關(guān)聯(lián)關(guān)系。 Inverse屬性 Inverse屬性:表示控制權(quán)是否轉(zhuǎn)移.. true:控制權(quán)已轉(zhuǎn)移【當(dāng)前一方?jīng)]有控制權(quán)】 false:控制權(quán)沒有轉(zhuǎn)移【當(dāng)前一方有控制權(quán)】 Inverse屬性,是在維護(hù)關(guān)聯(lián)...
閱讀 3328·2021-11-08 13:12
閱讀 2771·2021-10-15 09:41
閱讀 1461·2021-10-08 10:05
閱讀 3309·2021-10-08 10:04
閱讀 2119·2021-09-29 09:34
閱讀 2497·2019-08-30 15:55
閱讀 2990·2019-08-30 15:45
閱讀 2594·2019-08-29 14:17