MyBatis幾種關聯查詢配置
前言
簡單的記錄使用MyBatis關聯查詢的幾種寫法
正文
<select id="getLogonByCondition" parameterType="withoutspring.TestDTO" resultMap="logons">
select t.id as logon_id,
t.logonname,
t.password,
t.userid,
t1.id as user_id,
t1.displayname,
t1.logon
from logon t,user1 t1
where t.userid = t1.id
<if test="userid != null">
and t.userid = #{userid}
</if>
<if test="displayname != null and displayname != '' ">
and t1.displayname = #{displayname}
</if>
</select>
這是一個mybatis查詢關聯的配置,從上面看到,我通過sql的關聯查詢將兩個表需要的欄位都查詢出來了。下面需要做的就是將查詢的欄位匹配到返回的物件中,這裡返回的物件是一個Logon的javaBean
private Integer id;
private String logonname;
private String password;
private List<User> user;
id、logonname、password是logon表中,這種匹配簡單,關鍵是List<User>如何與查詢出來的欄位關聯?
幾種方法
從上面看到List<User>是一個集合,所以resultMap配置的時候使用<collection> 這個標籤,如果只是一個實體類物件,那麼使用<association>標籤,兩種使用方法差不多
<select id="getLogonByCondition" parameterType="withoutspring.TestDTO" resultMap="logons">
select t.id as logon_id,
t.logonname,
t.password,
t.userid,
t1.id as user_id,
t1.displayname,
t1.logon
from logon t,user1 t1
where t.userid = t1.id
<if test="userid != null">
and t.userid = #{userid}
</if>
<if test="displayname != null and displayname != '' ">
and t1.displayname = #{displayname}
</if>
</select>
對應的resultMap配置
<resultMap id="logons" type="withoutspring.Logon">
<id property="id" column="logon_id" />
<result property="logonname" column="logonname"/>
<result property="password" column="password"/>
<!-- 關聯查詢,單個例項association 集合collection-->
<!-- 可以select(n+1),也可以resultmap(無,sql關聯查詢,欄位匹配),或者在collection中配置對應欄位 -->
<!-- column指的是sql後面的別名,這樣才能正確匹配 -->
<collection property="user" javaType="list" ofType="withoutspring.User">
<id property="id" column="user_id" />
<result property="display" column="displayname"/>
<result property="logon" column="logon"/>
</collection>
</resultMap>
具體看一下<collection>裡面的配置,為了能將select查詢出來的欄位匹配到返回物件中,我們必須得將查詢出來的欄位一一對應返回物件的屬性,
select t.id as logon_id, //column為logon_id
t.logonname, //column為logonname
t.password, //column為password
t.userid, //column為userid
t1.id as user_id, //column為 user_id
t1.displayname, //displayname
t1.logon //displayname
從上面程式碼註釋可以看出,如果有別名,那麼別名就是column,沒有別名那麼column每張表的欄位名;這裡如果t.id 和t1.id不使用別名,那麼他們column都是id,這樣產生歧義了。
<collection property="user" javaType="list" ofType="withoutspring.User">
<id property="id" column="user_id" />
<result property="display" column="displayname"/>
<result property="logon" column="logon"/>
</collection>
我從關聯表查出了t1.id as user_id,t1.displayname, t1.logon ,這三個欄位,我要關聯到Logon中: <id property=”id” column=”user_id” />將查詢出來的欄位user_id的值賦值到User物件的id屬性中,
<result property=”display” column=”displayname”/>將t1.displayname查詢出來的值,賦值到這個User物件的display屬性中
<result property=”logon” column=”logon”/>將查詢出來的t1.logon的值賦值到User物件的logon屬性中
可以看到resultMap的好處,將查詢出來的column(別名或表字段名)值與返回物件的property一一匹配。在hibernate中通過hibernateTemplate來做一些sql查詢,不得不用setResultTransformer來繫結實體類,而且需要用別名(column)來保證與實體類的屬性一致
當然在關聯查詢中還可以collection 中使用select(會有n+1問題),resultMap(減少程式碼重複)
如果查詢出來2條資料,resultMap的返回物件是Logon,如何才能返回一個集合? 只需要在介面中返回值設定為List<Logon>就可以了,配置檔案resultMap只是說明查詢出來的每一行資料與實體類對映的關係
相關推薦
MyBatis幾種關聯查詢配置
前言 簡單的記錄使用MyBatis關聯查詢的幾種寫法 正文 <select id="getLogonByCondition" parameterType="withoutspring.TestDTO" resultMap="logons"&
mybatis 幾種實現模糊查詢的方法簡介
這篇文章主要介紹了mybatis 模糊查詢的實現方法的相關資料,希望通過本文能幫助到大家,讓大家掌握這部分內容,需要的朋友可以參考下mybatis的模糊查詢功能使用的很廣泛,以MySQL資料庫為例常用的模糊查詢有三種方法:直接使用 % 拼接字串,如 '%'#{name}'%'
在CentOS7.4中安裝jdk的幾種方法及配置環境變量
HR 環境 -o OS 安裝jdk 加載類 軟件包 上傳 jre_home 一、下載jdk jdk下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Hibernate的條件查詢的幾種方式+查詢所有的記錄
數據庫 rop query 寫法 OS 由於 AC 對象 tst 1、 第一種,用?占位符,如: //登錄(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Session
(十四)Mybatis一對多關聯查詢
注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-10-one2many,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sql中),覺得有
mybatis 多表關聯查詢時,如果使用resultType作為輸出對映時,估計會出現重複資料
mybatis 多表關聯查詢時,一般建議還是使用把需要關聯的表的pojo新增到主表對應的pojo中作為它的屬性,這樣在mapper.xml檔案中可以使用assacition(一對一查詢),或者colletion(一對多查詢)來使用resultMap作為輸出對映。 不過最近我
淺談MongoDB中幾種不同查詢方法
1.findMongoDB使用find來進行查詢.查詢就是返回一個集合中文件的子集,子集合的範圍從0個文件到整個集合.find的第一個引數決定了要返回哪些文件.其形式也是一個文件,說明要查詢的細節.空的查詢文件{}會匹配集合的全部內容.要是不指定查詢文件,預設是{}.如:d
Mybatis多表關聯查詢之三表查詢
在開發中經常用到多表查詢,這裡演示三表查詢的情況。 業務邏輯:購物車訂單的邏輯 該邏輯共涉及到三張表 1. order表 就是訂單表 記錄 訂單人的資訊、訂單地址、訂單號、訂單的總
SSM框架(三)——Mybatis多表關聯查詢
一、一對一關聯 1.1、提出需求 根據班級id查詢班級資訊(帶老師的資訊) 1.2、建立表和資料 建立一張教師表和班級表,這裡我們假設一個老師只負責教一個班,那麼老師和班級之間的關係就是一種一對一的關係。 CREATE TABLE teacher( t_id INT PRIMARY
【SSM-MyBatis框架】關聯查詢--一對多查詢
1.ResultMap: 1.需求: 查詢訂單及訂單明細 2.分析: 若使用resultType,則資訊就會造成重複: 但要求查詢資訊不能重複, 在order類中新增List<orderde
【SSM-MyBatis框架】關聯查詢--多對多查詢
1. 需求: 查詢使用者及使用者購買商品的資訊: 2.對映思路: 將使用者資訊對映到user中。 在user中新增List<Order> orderList屬性,將使用者建立的訂單對映到orderList屬性中。
幾種Sql查詢分頁的寫法
1.建立測試環境,(插入100萬條資料大概耗時5分鐘)。 create database DBTest use DBTest --建立測試表 create table pagetest ( id int identity(
Centos6.5的幾種網路環境配置方法
但是,這時候你配置的網路並沒有生效,你可以通過ifconfig來檢視對比,那麼要想讓剛才的配置生效該怎麼辦呢?答案就是再執行一條命令 /etc/rc.d/init.d/network restart或者執行service network restart,等待執行完畢再用ifconfig檢視網路配置可以發現已生
資料庫的幾種連線查詢
1:連線查詢 通過連線運算子可以實現多個表查詢。連線是關係資料庫模型的主要特點,也是它區別於其它型別 資料庫管理系統的一個標誌。 在關係資料庫管理系統中,表建立時各資料之間的關係不必確定,常把一個實體的所有資訊存放在 一個表中。當檢索資料時,通過連線操作查詢出存放在多
[Hibernate]七種關聯關係配置檔案和測試例項詳解
用了一天整理下來。所有關係分為以下七種:單向【1-1】雙向【1-1】單向【1-N】雙向【1-N】單向【N-1】單向【N-N】雙向【N-N】1單向【1-1】基於外來鍵的單向【1-1】是【N-1】的特殊形式,要求【N】方唯一。基於外來鍵的單向1-1只需要在原有的<many-
mybatis一對多關聯查詢子表只返回一條資料
注意:在mybatis的部分版本中發現當兩個表的主鍵列名一致,比如都是id時,配置關聯查詢時子表只能返回1條資料,在這裡提供一種簡單的方法,避免大量修改檔案,由於我的原始碼不便公開,請大家看這裡的原始碼:http://blog.csdn.net/qinshijangshan/
mybatis學習(5):關聯查詢的幾種方式
文章末尾附上Employee.java 和 Department.java 方式一:聯合查詢:級聯屬性封裝結果集 <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDi
mybatis進行模糊查詢的幾種方式
單個 ase nco ash face myba select from rda mapper文件: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org
javaEE Mybatis,一對一、一對多關聯查詢,resultMap配置關聯屬性的對映
OrderMapper.xml(實體類的Sql配置檔案,resultMap配置一對一、一對多關聯屬性的對映): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//
Mybatis關聯查詢之一對多XML配置詳解
但是有些地方沒有解釋詳細,自己研究了一會,決定將之詳細化 首先是有兩張表,頭行結構。相當於是一張老師表一張學生表。 邏輯結構就是一個老師有多個學生,我們在查詢的時候想要的結果是查出所有的老師的