網(wǎng)頁制作建立站點廈門人才網(wǎng)官方網(wǎng)站
?🍃作者簡介:準(zhǔn)大三本科網(wǎng)絡(luò)工程專業(yè)在讀,持續(xù)學(xué)習(xí)Java,努力輸出優(yōu)質(zhì)文章
?MyBatis系列①:增刪改查
?MyBatis系列②:兩種Dao開發(fā)方式
?MyBatis系列③:動態(tài)SQL
?MyBatis系列④:核心配置文件詳解
?MyBatis系列⑤:多表查詢
1、基本步驟
步驟如下:
①編寫接口,在接口方法上面使用對應(yīng)的注解,配置相應(yīng)的SQL語句
②編寫測試方法
③在mybatis核心配置文件中修改映射信息。
2、常用注解
首先是基本的CRUD來學(xué)習(xí),后面再介紹復(fù)雜映射多表操作。
注解 | 說明 |
@Insert | 實現(xiàn)新增 |
@Update | 實現(xiàn)更新 |
@Delete | 實現(xiàn)刪除 |
@Select | 實現(xiàn)查詢 |
@Result | 實現(xiàn)結(jié)果集封裝 |
@Results | 可以與@Result 一起使用,封裝多個結(jié)果集 |
@One | 實現(xiàn)一對一結(jié)果集封裝 |
@Many | 實現(xiàn)一對多結(jié)果集封裝 |
代碼如下:
①接口及其接口方法:
②測試方法:
③核心配置文件加載映射:
3、復(fù)雜映射
實現(xiàn)復(fù)雜關(guān)系映射之前可以在映射文件中通過配置<resultMap>來實現(xiàn),使用注解開發(fā)后,可以使用@Results注解 ,@Result注解,@One注解,@Many注解組合完成復(fù)雜關(guān)系的配置。
注解 | 說明 | ||
@Results | 代替的是標(biāo)簽該注解中可以使用單個@Result注解,也可以使用@Result集合。 使用格式: @Results( {@Result (),@Result () } ) 或 @Results( @Result () ) | ||
@Result | 代替了<id>標(biāo)簽和<result>標(biāo)簽 @Result 中屬性介紹 : - column:數(shù)據(jù)庫的列名 | ||
@One (一對一) | 代替了<assocation>標(biāo)簽,是多表查詢的關(guān)鍵,在注解中用來指定子查詢返回單一對象。 @One 注解屬性介紹 : - select: 指定用來多表查詢的 sqlmapper 使用格式:@Result(column="",property="",one=@One(select="")) | ||
@Many (多對一) | 代替了<collection>標(biāo)簽, 是多表查詢的關(guān)鍵,在注解中用來指定子查詢返回對象集合。 使用格式:@Result(property="",column="",many=@Many(select="")) | ||
3.1、一對一
用戶表和訂單表的關(guān)系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶。
一對一查詢的需求:查詢一個訂單,與此同時查詢出該訂單所屬的用戶
3.1.1、xml回顧
在使用xml配置的時候,對應(yīng)的sql語句為:
select ordersquery.*, userquery.username,userquery.`password`,userquery.birthday from ordersquery, userquery where ordersquery.userID = userquery.id;
3.1.2、注解
使用注解配置的時候,需要把之前的SQL語句一分為二:
3.2、一對多
用戶表和訂單表的關(guān)系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶
一對多查詢的需求:查詢一個用戶,與此同時查詢出該用戶具有的訂單
3.2.1、xml回顧
在使用xml配置的時候,對應(yīng)的sql語句為:
select userquery.*,ordersquery.id as orderID,ordersquery.ordertime,ordersquery.total from userquery left join ordersquery on userquery.id = ordersquery.userID;
3.2.2、注解
使用注解配置的時候,需要把之前的SQL語句一分為二:
3.3、多對多
用戶表和角色表的關(guān)系為,一個用戶有多個角色,一個角色被多個用戶使用
多對多查詢的需求:查詢用戶同時查詢出該用戶的所有角色
3.3.1、xml回顧
在使用xml配置的時候,對應(yīng)的sql語句為:
select userquery.id,userquery.username,userquery.`password`,userquery.birthday,rolequery.id AS roleID,rolequery.rolename from userquery LEFT JOIN user_role ON userquery.id = user_role.user_id INNER JOIN rolequery ON user_role.role_id = rolequery.id;
3.3.2、注解
使用注解配置的時候,需要把之前的SQL語句一分為二:
4、?注意事項
在使用注解的時候,不管是“一對一”、“一對多”還是“多對多”,都涉及到一個“對獨立的@Result封裝”的過程,其中有一個參數(shù)為column,這個傳的是數(shù)據(jù)庫類型,但是傳的是來源于第一條SQL查詢的數(shù)據(jù)庫的表單,如下:
🍁行文至此,煩請給個三連支持一下。
🍁您的三連支持,是我創(chuàng)作的最大動力