很好的一篇關於MyBatis 多表聯合查詢及優化的文章
序
這篇文章我打算來簡單的談談 mybatis 的多表聯合查詢。起初是覺得挺簡單的,沒必要拿出來寫,畢竟 mybatis 這東西現在是個開發的都會用,而且網上的文章也是一搜羅一大堆,根本就用不著我來重複。但是吧,就我前幾天在做一個多表聯合查詢的時候,竟然出了很多意想不到的問題,而且這些問題的出現,並不是對 mybatis 不瞭解,而是在用的過程中會或多或少的忽略一些東西,導致提示各種錯誤。背景
老規矩,開始之前,還是要先說說這件事的背景。也就是最近幾天,公司要做一個後臺的管理平臺,由於之前的一些限制,這次要做成單獨的專案進行部署,因此就要重新考慮很多東西。索性這幾天有時間,就做了一個小 Demo ,實現 mybatis 的多表聯合查詢的,由於之前用的是 Hibernate 做的聯合查詢,眾所周知,Hibernate 是全自動的資料庫持久層框架,它可以通過實體來對映資料庫,通過設定一對多、多對一、一對一、多對多的關聯來實現聯合查詢。正文
這裡,我已經搭好了開發的環境,用到的是 SpringMVC + Spring + MyBatis,當然,為了簡單期間,你可以不用搭前端的框架,只使用 Spring + MyBatis 就可以,外加 junit 測試即可。環境我就不帶大家搭了,這裡只說涉及到聯合查詢的操作。 設計好表之後,我用到了 mybatis 的自動生成工具 mybatis generator 生成的實體類、mapper 介面、以及 mapper xml 檔案。由於是測試多表聯合查詢,因此需要自己稍加改動。 下面是 User 和 Role 的實體類程式碼: User
-
<span style=
- import java.io.Serializable;
- import java.util.List;
- publicclass User implements Serializable {
- private String id;
- private String username;
- private String password;
-
private List<Role> roles;
- privatestaticfinallong serialVersionUID = 1L;
- public String getId() {
- return id;
- }
- publicvoid setId(String id) {
- this.id = id == null ? null : id.trim();
- }
- public String getUsername() {
- return username;
- }
- publicvoid setUsername(String username) {
- this.username = username == null ? null : username.trim();
- }
- public String getPassword() {
- return password;
- }
- publicvoid setPassword(String password) {
- this.password = password == null ? null : password.trim();
- }
- public List<Role> getRoles() {
- return roles;
- }
- publicvoid setRoles(List<Role> roles) {
- this.roles = roles;
- }
- @Override
- publicboolean equals(Object that) {
- if (this == that) {
- returntrue;
- }
- if (that == null) {
- returnfalse;
- }
- if (getClass() != that.getClass()) {
- returnfalse;
- }
- User other = (User) that;
- return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
- && (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
- && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()));
- }
- @Override
- publicint hashCode() {
- finalint prime = 31;
- int result = 1;
- result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
- result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
- result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
- return result;
- }
- }</span>
- <span style="font-family:Comic Sans MS;font-size:12px;">package com.sica.domain;
- import java.io.Serializable;
- publicclass Role implements Serializable {
- private String id;
- private String name;
- private String jsms;
- private String bz;
- private Integer jlzt;
- private String glbm;
- private String userid;
- privatestaticfinallong serialVersionUID = 1L;
- public String getId() {
- return id;
- }
- publicvoid setId(String id) {
- this.id = id == null ? null : id.trim();
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name == null ? null : name.trim();
- }
- public String getJsms() {
- return jsms;
- }
- publicvoid setJsms(String jsms) {
- this.jsms = jsms == null ? null : jsms.trim();
- }
- public String getBz() {
-
相關推薦
很好的一篇關於MyBatis 多表聯合查詢及優化的文章
序 這篇文章我打算來簡單的談談 mybatis 的多表聯合查詢。起初是覺得挺簡單的,沒必要拿出來寫,畢竟 mybatis 這東西現在是個開發的都會用,而且網上的文章也是一搜羅一大堆,根本就用不著我來重複。但是吧,就我前幾天在做一個多表聯合查詢的時候,竟然出了很多
MyBatis 多表聯合查詢及優化
序 這篇文章我打算來簡單的談談 mybatis 的多表聯合查詢。起初是覺得挺簡單的,沒必要拿出來寫,畢竟 mybatis 這東西現在是個開發的都會用,而且網上的文章也是一搜羅一大堆,根本就用不著我來重複。但是吧,就我前幾天在做一個多表聯合查詢的時候,竟然出了很多意想不到的
Mybatis多表聯合查詢,多對一關聯查詢
有兩張表,一張表為業務賬戶表,一張為資費表,業務賬戶表其中有一個外來鍵為資費型別id,引用了資費表的主鍵id。建表語句:/*資費表*/ create table sys_charge( id int(11) auto_increment, name varchar
MyBatis 多表聯合查詢
最近在做在eclipse + maven搭建SSM框架下做一個簡單的後臺管理系統,因為是第一次搭建SSM專案,在mybatis進行多表連線查詢的時候遇到問題,不知道如何進行處理?在網上搜了一下解決方法是,以實現,記錄下自己的實現方案。 表之間的關係如下圖所示:
mybatis多表聯合查詢
以前東拼西湊來的,不知道都是哪些連結! User 、Role 的對應關係是,一個使用者有多個角色,因此,在 User 的實體中加入一個 Role 的屬性private List<Role> roles;對應一對多的關係。 <select id="q
最終解決Mybatis多表聯合查詢中欄位名重複導致的各路問題
解決欄位名重複導致的問題,簡單直接的方法是設定別名,例如 <id column="id" jdbcType="BIGINT" property="id"/> <result column="name" jd
MyBatis-Plus多表聯合查詢並且分頁(3表)
這3張表的關係是 模型表Model ===> 訓練表Training ===》應用表Application(大概的邏輯是:選擇應用,然後訓練,然後成為模型)如有不理解的可加我微信:17625089935 白天問我一般晚上回 首先我們先建立實體Model(我使用的d
MyBatis學習總結(九)---基於XML多表聯合查詢(一對一、一對多、多對多)
1、一對一的關聯 使用association,association元素用於處理“has-one”(一對一)這種型別關係。 作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名, property對應pojo的
史上最簡單MySQL教程詳解(基礎篇)之多表聯合查詢
常用術語 內連線 外連線 左外連線 右外連線 注意事項: 自連線 子查詢 在上篇文章史上最簡單MySQL教程詳解(基礎篇)之資料庫設計正規化及應用舉例我們介紹過,在關係型資料庫中,我們通常為了減少資料的冗餘量將對資料表進行規範,將
mysql常用語句——多表聯合查詢(一)
學習筆記: 學生選課資料庫SCT 學生表(學號,姓名,性別,年齡,院系編號,班級) Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6) 院系表(院系編號
利用SSM(springmvc+spring+mybatis)實現多表聯合查詢
一、資料庫 Author表 (authorid主鍵) NewsInfo表(newsno主
SQL多表聯合查詢(LEFT JOIN)條件差異
logs 技術分享 .cn where 聯合查詢 uid exist 包含 into 查詢A: select a.*,b.* into Bus605115_ON_Where_And --(642 行受影響) from PositionN a left join szt
MySQL DML操作--------多表聯合查詢實戰
join 聯合查詢 mysql dba 1. 背景 * 多表聯合查詢是把不同表的記錄到一起的一種方式 * 在SQL標準中規劃的聯合(join)大致分內連接,外連接,全連接。其中外連接又分左外連接,右外連接。2. 內連接例子 (inner join) [ 員工 --> 部門 ]
MySQL增刪改查之【多表聯合查詢】
包括 實現 鼠標 thead 黃曉明 eba 字符 order 有時 很多時候在實際的業務中我們不只是查詢一張表。 在電子商務系統中,查詢哪些用戶沒有購買過產品。 銀行中可能查詢違規記錄,同時查詢出用戶的 查詢中獎信息和中獎人員的基本信息。 以上只是列的情況
thinkphp3.1 多表聯合查詢代碼
function table php php代碼 數據集 width pan code 顯示 php代碼 public function info(){ $where[‘openid‘]=session(‘openid‘);////用戶sess
SharePoint 列表多表聯合查詢
int lists esp mco 連接 city .com spf 城市 在SharePoint平臺二次開發中,我們有時需要涉及多表關聯查詢展示多列表中的不同字段信息;SharePoint和Sql數據表一樣,也支持多表聯合查詢,但是不像Sql語句那樣簡單,有一定的局限性,
Oracle ODI 12c之多表聯合查詢以及定時任務設置
Oracle ODI 本文介紹如何通過ODI進行多表聯合查詢並設置定時任務。準備工作如下: 準備物理方案和邏輯方案; 創建模型並通過“逆向工程”同步方案; 創建項目(根據實際情況創建或者使用現有的); 確保源表和目標表都有主鍵存在。以上內容的前三點可以參考我博客中的相關文章。 一、Preparing
約束條件 ,表與表之間的關系 和多表聯合查詢***
特點 左連接 min 想要 關系型數據庫 高效 行數據 人的 單行 一.約束條件 為了確保數據的完整性 可以給列加上約束條件 完整性的分類: 1.實體完整性 2.域完整性 3.引用完整性 1.實體完整性
Spring Data JPA 一:實現多表關聯查詢
多表查詢在spring data jpa中有兩種實現方式,第一種是利用hibernate的級聯查詢來實現,第二種是建立一個結果集的介面來接收連表查詢後的結果,這裡介紹第二種方式。 一、一對一對映 實體 UserInfo :使用者。 實體 Address:家庭住址。 這裡通過外來鍵的方
多表聯合查詢語句
select dpt.*, info.*, gd.*, mat.* from depart as dpt left join info_sys as info on dpt.id = info.dept_name left join grade as gd on info