Mybatis之高階對映以及延遲載入

2021-08-28 12:20:38 字數 2580 閱讀 5562

場景:查詢寵物資訊,關聯查詢類別資訊

通過外來鍵去查詢另乙個表

資料庫:

pets表: id,name,birth_date,type_id

types表:id,name

實體類:

pets

private int id;

private string name;

private date birthdate;

private int typeid;

types

private int id;

private string name;

這時我們想同時查詢兩個表的內容,應該怎麼辦,在不修改實體類欄位的基礎上?

這時我們就可以寫乙個擴充套件類繼承pets類,包含額外的字段

pet***t:

private int tid;  //為了區分起個別名 

private string tname;

public listfindallpetsandtypes();

}

<?xml version="1.0" encoding="utf-8"?>

select p.*,t.id tid,t.name tname

from pets p,types t

where p.type_id=t.id

使用resulttype有兩種解決方案:

①:實體類的字段和資料庫一致

②:起別名 和實體類的字段一致

下面說一下第二種:

select p.* ,t.id tid,t.name tname

from pets p,types t

where p.type_id = t.id

使用resulttype來進行一對一結果對映,查詢出的列的個數和對映的屬性的個數要一致。而且對映的屬性要存在乙個大的物件中(擴充套件),它是一種平鋪式的對映,即資料庫查詢出多少條記錄,則對映成多少個物件。

查詢寵物資訊,關聯查詢類別資訊。

乙個寵物對應乙個類別

select p.id,p.name,p.birth_date birthdate, p.type_id typeid,t.id tid,t.name tname

from pets p,types t

where p.type_id=t.id

查詢類別資訊,關聯查詢寵物資訊

乙個型別—>多隻寵物

select t.*,p.id pid,p.name pname,p.birth_date birthdate

from types t

left join pets p

on t.id=p.type_id

oftype:封裝的集合的型別

延遲載入又叫懶載入,也叫按需載入。也就是說先載入主資訊,在需要的時候,再去載入從資訊。

在mybatis中,resultmap標籤的

association標籤(配置單個物件)

collection標籤(配置集合)具有延遲載入的功能。

比如:

select * from pets

property:指定屬性

select :指定乙個查詢語句該查詢語句最終能夠返回使用property指定的物件

for (pets pets : list)

但是我們來看列印的sql語句,不難發現把型別也查詢了出來,我們把這種叫做立即載入

==>  preparing: select * from pets 

==> parameters:

<== columns: id, name, birth_date, type_id, owner_id

<== row: 100, 花花, 2018-09-07, 3001, 10

====> preparing: select * from types where id=?

====> parameters: 3001(integer)

<==== columns: id, name

<==== row: 3001, 貓科

<==== total: 1

<== row: 105, 紅花崗, 2012-03-04, 3002, 10

那麼如何設定延遲載入呢?

mybatisconfig.xml中配置settings標籤

這時我們再來看一下列印的sql語句:

==> preparing: select * from pets

==> parameters:

<== columns: id, name, birth_date, type_id, owner_id

現在就會發現這次沒有查詢型別了

Mybatis 高階對映

一對一對映 association 標籤的巢狀查詢 select id,username,useremail,user role.role id from user inner join user role on user role.role id user.id where user.id sel...

Linux記憶體管理之高階記憶體對映

分析完linux記憶體管理的基本概念與實現之後,就可以接著分析使用者空間與核心空間的互動操作了。brk系統呼叫屬於那種常用但是 可見度 不高的操作,常用於使用者空間堆的管理 請參閱本站的 中的malloc機制分析 一文 brk在使用者空間的介面為int brk void end data segme...

mybatis高階 輸入對映和輸出對映

首先是輸入型別,輸入型別分為以下幾種 1.基本型別。2.pojo物件型別。3.pojo包裝物件。所謂的包裝物件,可以理解為,乙個物件裡面包含著另外乙個物件。簡單輸入型別,比較簡單。在傳入引數的時候,直接將引數型別配置到parametertype中,如下 select from user where ...