1. 程式人生 > >MyBatis幾種關聯查詢配置

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配置詳解

但是有些地方沒有解釋詳細,自己研究了一會,決定將之詳細化 首先是有兩張表,頭行結構。相當於是一張老師表一張學生表。 邏輯結構就是一個老師有多個學生,我們在查詢的時候想要的結果是查出所有的老師的