成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MyBatis之ResultMap的Association和Collection標(biāo)簽詳解

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
我們希望每個(gè)數(shù)據(jù)庫(kù)都具備良好的第三范式或 BCNF 范式,可惜它們并不都是那樣。如果能有一種數(shù)據(jù)庫(kù)映射模式,完美適配所有的應(yīng)用程序,那就太好了,但可惜也沒(méi)有。而 ResultMap 就是 MyBatis 對(duì)這個(gè)問(wèn)題的答案。

一、前言

MyBatis 創(chuàng)建時(shí)的一個(gè)思想是:數(shù)據(jù)庫(kù)不可能永遠(yuǎn)是你所想或所需的那個(gè)樣子。我們希望每個(gè)數(shù)據(jù)庫(kù)都具備良好的第三范式或 BCNF 范式,可惜它們并不都是那樣。如果能有一種數(shù)據(jù)庫(kù)映射模式,完美適配所有的應(yīng)用程序,那就太好了,但可惜也沒(méi)有。而 ResultMap 就是 MyBatis 對(duì)這個(gè)問(wèn)題的答案。

二、ResultMap 的屬性列表

屬性

描述

id

當(dāng)前命名空間中的一個(gè)唯一標(biāo)識(shí),用于標(biāo)識(shí)一個(gè)結(jié)果映射。

type

類的完全限定名, 或者一個(gè)類型別名(關(guān)于內(nèi)置的類型別名,可以參考上面的表格)。

autoMapping

如果設(shè)置這個(gè)屬性,MyBatis 將會(huì)為本結(jié)果映射開(kāi)啟或者關(guān)閉自動(dòng)映射。這個(gè)屬性會(huì)覆蓋全局的屬性 autoMappingBehavior。默認(rèn)值:未設(shè)置(unset)。

extends

可以繼承其他resultMap的一些寫好的屬性

三、resultMap標(biāo)簽介紹

  • constructor - 用于在實(shí)例化類時(shí),注入結(jié)果到構(gòu)造方法中。
  • idArg - ID 參數(shù);標(biāo)記出作為 ID 的結(jié)果可以幫助提高整體性能。
  • arg - 將被注入到構(gòu)造方法的一個(gè)普通結(jié)果。
  • id – 一個(gè) ID 結(jié)果;標(biāo)記出作為 ID 的結(jié)果可以幫助提高整體性能。
  • result – 注入到字段或 JavaBean 屬性的普通結(jié)果。
  • association – 一個(gè)復(fù)雜類型的關(guān)聯(lián);許多結(jié)果將包裝成這種類型。
    嵌套結(jié)果映射 – 關(guān)聯(lián)可以是 resultMap 元素,或是對(duì)其它結(jié)果映射的引用。
  • collection – 一個(gè)復(fù)雜類型的集合。
    嵌套結(jié)果映射 – 集合可以是 resultMap 元素,或是對(duì)其它結(jié)果映射的引用。
  • discriminator – 使用結(jié)果值來(lái)決定使用哪個(gè) resultMap。
  • case – 基于某些值的結(jié)果映射。
    嵌套結(jié)果映射 – case 也是一個(gè)結(jié)果映射,因此具有相同的結(jié)構(gòu)和元素;或者引用其它的結(jié)果映射。

四、id & result標(biāo)簽參數(shù)詳解

屬性

描述

property

映射到列結(jié)果的字段或?qū)傩浴H绻?JavaBean 有這個(gè)名字的屬性(property),會(huì)先使用該屬性。否則 MyBatis 將會(huì)尋找給定名稱的字段(field)。無(wú)論是哪一種情形,你都可以使用常見(jiàn)的點(diǎn)式分隔形式進(jìn)行復(fù)雜屬性導(dǎo)航。人話為:就是你的Java實(shí)體類

column

數(shù)據(jù)庫(kù)中的列名,或者是列的別名。一般情況下,這和傳遞給 resultSet.getString(columnName) 方法的參數(shù)一樣。

javaType

一個(gè) Java 類的全限定名,或一個(gè)類型別名(關(guān)于內(nèi)置的類型別名,可以參考上面的表格)。如果你映射到一個(gè) JavaBean,MyBatis 通常可以推斷類型。然而,如果你映射到的是 HashMap,那么你應(yīng)該明確地指定 javaType 來(lái)保證行為與期望的相一致。

jdbcType

JDBC 類型,所支持的 JDBC 類型參見(jiàn)這個(gè)表格之后的“支持的 JDBC 類型”。只需要在可能執(zhí)行插入、更新和刪除的且允許空值的列上指定 JDBC 類型。這是 JDBC 的要求而非 MyBatis 的要求。如果你直接面向 JDBC 編程,你需要對(duì)可以為空值的列指定這個(gè)類型。

typeHandler

我們?cè)谇懊嬗懻撨^(guò)默認(rèn)的類型處理器。使用這個(gè)屬性,你可以覆蓋默認(rèn)的類型處理器。這個(gè)屬性值是一個(gè)類型處理器實(shí)現(xiàn)類的全限定名,或者是類型別名。

常用例子展示

<resultMap  id="UsersMap" type="com.wang.test.demo.entity.User">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="role" column="role" jdbcType="VARCHAR"/>
<result property="addTime" column="add_time" jdbcType="TIMESTAMP"/>
</resultMap>

五、association標(biāo)簽常用參數(shù)詳解

屬性

描述

property

映射到列結(jié)果的字段或?qū)傩?/strong>。如果用來(lái)匹配的 JavaBean 存在給定名字的屬性,那么它將會(huì)被使用。否則 MyBatis 將會(huì)尋找給定名稱的字段。無(wú)論是哪一種情形,你都可以使用通常的點(diǎn)式分隔形式進(jìn)行復(fù)雜屬性導(dǎo)航。人話為:你要一對(duì)一的實(shí)體類中的另一個(gè)實(shí)體類的名稱

javaType

一個(gè) Java 類的完全限定名,或一個(gè)類型別名。 如果你映射到一個(gè) JavaBean,MyBatis 通常可以推斷類型。然而,如果你映射到的是 HashMap,那么你應(yīng)該明確地指定 javaType 來(lái)保證行為與期望的相一致。

例子演示

  • 實(shí)體類演示
@Data
//書籍
public class Book {
private String id;
private String name;
private String author;
private Double price;
private Integer del;
private Date publishdate;
private String info;
//把出版社對(duì)象當(dāng)作屬性
private Publisher pub;//------重點(diǎn)在這里一本書對(duì)應(yīng)一個(gè)出版社,這是一個(gè)出版社對(duì)象
}
@Data
//出版社
public class Publisher {
private String id;
private String name;
private String phone;
private String address;
}

xml演示

<resultMap id="rMap_book" type="com.wang.test.demo.entity.Book">
<!-- 主鍵 property為實(shí)體類屬性 column為數(shù)據(jù)庫(kù)字段 jdbcType為實(shí)體類對(duì)應(yīng)的jdbc類型-->
<id property="id" column="b_id" jdbcType="VARCHAR"></id>
<!-- 普通屬性 property為實(shí)體類屬性 column為數(shù)據(jù)庫(kù)字段 jdbcType為實(shí)體類對(duì)應(yīng)的jdbc類型-->
<result property="name" column="b_name" jdbcType="VARCHAR"></result>
<result property="author" column="author" jdbcType="VARCHAR"></result>
<result property="price" column="price" jdbcType="VARCHAR"></result>
<result property="del" column="del" jdbcType="NUMERIC"></result>
<result property="publisherid" column="publisher_id" jdbcType="VARCHAR"></result>
<result property="publishdate" column="publish_date" jdbcType="TIMESTAMP"></result>
<!--一對(duì)一映射association property 為實(shí)體類book中的屬性名字 javaType為實(shí)體類屬性的類型 -->
<association property="pub" javaType="com.wang.test.demo.entity.Publisher">
<id property="id" column="p_id" jdbcType="VARCHAR"></id>
<result property="name" column="name" jdbcType="VARCHAR"></result>
<result property="phone" column="phone" jdbcType="VARCHAR"></result>
<result property="address" column="address" jdbcType="VARCHAR"></result>
</association>
</resultMap>

六、collection標(biāo)簽常用參數(shù)詳解

屬性

描述

property

映射到列結(jié)果的字段或?qū)傩?/strong>。如果用來(lái)匹配的 JavaBean 存在給定名字的屬性,那么它將會(huì)被使用。否則 MyBatis 將會(huì)尋找給定名稱的字段。無(wú)論是哪一種情形,你都可以使用通常的點(diǎn)式分隔形式進(jìn)行復(fù)雜屬性導(dǎo)航。人話為:你要一對(duì)一的實(shí)體類中的另一個(gè)實(shí)體類的名稱

javaType

這里和一對(duì)一的表示不太一樣,這里一般是一對(duì)多的集合類型,如:list

ofType

指定的這個(gè)一對(duì)多的集合的所存放的實(shí)體類的類型

例子演示

實(shí)體類演示

@Data
//班級(jí)類
public class Class {

private String id;
private String name;
private List<Student> students;//----重點(diǎn)在這里,一個(gè)班級(jí)對(duì)應(yīng)多個(gè)學(xué)生

}
@Data
public class Student {

private int id;
private String name;
private int age;
}

 xml演示

<resultMap id="rMap_class" type="com.wang.test.demo.entity.Class">
<id property="id" column="id" jdbcType="VARCHAR"></id>
<result property="name" column="name" jdbcType="VARCHAR"></result>
<!--一對(duì)多映射用這個(gè) ofTyp是一對(duì)多的集合的所存放的實(shí)體類 javaType實(shí)體類的屬性類型-->
<collection property="students" ofType="com.wang.test.demo.entity.Student" javaType="list">
<id property="id" column="id" jdbcType="INTEGER"></id>
<result property="name" column="name" jdbcType="VARCHAR"></result>
<result property="age" column="age" jdbcType="INTEGER"></result>
</collection>
</resultMap>

七、jdbc Type與java Type對(duì)照表

JDBC Type

Java Type

CHAR

String

VARCHAR

String

LONGVARCHAR

String

NUMERIC

java.math.BigDecimal

DECIMAL

java.math.BigDecimal

BIT

boolean

BOOLEAN

boolean

TINYINT

byte

SMALLINT

short

INTEGER

INTEGER

BIGINT

long

REAL

float

FLOAT

double

DOUBLE

double

BINARY

byte[]

VARBINARY

byte[]

LONGVARBINARY

byte[]

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp

CLOB

Clob

BLOB

Blob

ARRAY

Array

DISTINCT

mapping of underlying type

STRUCT

Struct

REF

Ref

DATALINK

java.net.URL

八、總結(jié)

這樣就對(duì)ResultMap具體參數(shù)進(jìn)行詳細(xì)的解釋,還有對(duì)association和collection標(biāo)簽的解釋和具體演示,希望能夠幫到你。

責(zé)任編輯:姜華 來(lái)源: 小王博客基地
相關(guān)推薦

2009-06-25 15:20:28

CollectionMap

2021-06-28 07:09:24

MybatisresultMapJava

2024-04-19 08:23:06

2009-07-15 11:43:13

<iterate>標(biāo)簽

2010-08-24 10:01:05

DIV

2023-03-29 23:23:00

MyBatis參數(shù)框架

2023-09-27 09:18:35

2009-07-07 17:34:15

collectionJDK5.0

2016-12-05 13:35:02

C語(yǔ)言數(shù)組指針

2011-03-02 11:28:28

vsftpd配置

2020-12-18 08:03:00

插件MyBatis Executor

2021-01-14 05:16:09

MyBatis動(dòng)態(tài)代理

2009-07-22 10:03:11

iBATIS Resu

2012-03-19 16:27:05

JavaHibernate

2023-06-09 08:16:09

GolangStruct Tag

2024-12-20 16:49:15

MyBatis開(kāi)發(fā)代碼

2023-03-13 07:35:44

MyBatis分庫(kù)分表

2011-05-26 08:36:07

JDKJava

2013-10-31 13:37:07

CloudaAPI手冊(cè)

2009-07-16 13:50:31

ibatisResultMap
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区视频在线播放 | a毛片 | 免费成人高清在线视频 | 精产国产伦理一二三区 | www.日韩| 先锋资源吧 | 人人做人人澡人人爽欧美 | 亚洲人精品午夜 | 99视频免费在线观看 | 亚洲在线 | 亚洲欧美中文字幕在线观看 | 国产欧美日韩精品一区 | 国产精品视频久久久久 | 国产成年人视频 | 日韩视频国产 | www.一区二区三区.com | 热re99久久精品国产99热 | 91av视频 | 91精品国产乱码久久蜜臀 | 中文字幕av网 | 欧美日韩在线观看视频 | 久草在线在线精品观看 | 波多野结衣电影一区 | 国产美女永久免费无遮挡 | 日本 欧美 国产 | 嫩草一区二区三区 | 国产成人91| 狠狠做深爱婷婷综合一区 | 日韩在线一区二区 | 欧美一级二级视频 | 日本不卡一区二区三区在线观看 | 久久国产精品视频观看 | 久久久久国产一区二区三区四区 | 日韩在线免费播放 | 日韩欧美在线观看 | 九色在线观看 | 九九精品在线 | 97视频精品 | 99免费在线观看 | 午夜在线电影网 | 午夜视频一区二区三区 |