好程式設計師Java學習路線分享mybatis對映
好程式設計師Java學習路線分享mybatis對映
好程式設計師Java學習路線分享mybatis對映,希望對大家有所幫助。
Mybatis 1對1關聯 實現方式
- 透過resultType方式
- 透過級聯屬性的方式【resultType 和 resultMap方式】
- 透過association關聯的方式
- 透過association的分步查詢方式
- 透過包裝類的雙association的關聯方式
- 透過association的巢狀定義方式
案例: 查詢 訂單 對應的使用者資訊
Sql建表語句
使用者表:
-- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT '使用者名稱稱', `birthday` date DEFAULT NULL COMMENT '生日', `sex` char(1) DEFAULT NULL COMMENT '性別', `address` varchar(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
-- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '王五', '2019-08-30', '2', '杭州'); INSERT INTO `user` VALUES ('10', '張三', '2014-07-10', '1', '北京市'); INSERT INTO `user` VALUES ('16', '張小明', '2019-08-15', '1', '河南鄭州'); INSERT INTO `user` VALUES ('22', '陳小明', '2019-08-08', '1', '河南鄭州'); INSERT INTO `user` VALUES ('24', '張三丰', '2019-08-15', '1', '長沙'); INSERT INTO `user` VALUES ('25', '吳小明', '2019-08-08', '1', '河南鄭州'); INSERT INTO `user` VALUES ('26', '王五', '2019-08-14', '2', '武漢'); |
訂單表:
-- ---------------------------- -- Table structure for `orders` -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '下單使用者id', `number` varchar(32) NOT NULL COMMENT '訂單號', `createtime` datetime NOT NULL COMMENT '建立訂單時間', `note` varchar(100) DEFAULT NULL COMMENT '備註', PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ---------------------------- -- Records of orders -- ---------------------------- INSERT INTO `orders` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null); INSERT INTO `orders` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null); INSERT INTO `orders` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null); INSERT INTO `orders` VALUES ('6', '10', '1000013', '2015-08-30 10:11:56', null); INSERT INTO `orders` VALUES ('7', '16', '100014', '2019-08-16 10:12:54', null); |
實體類:
使用者:User
public class User {
//getter.. setter.. toString.. } |
訂單:Orders
public class Orders {
//getter.. setter.. toString.. } |
方式一:resultType方式
一個訂單 對應 一個使用者
對訂單實體類進行擴充套件: 【只增加 對應的欄位 ;例如案例中的 使用者名稱稱】
新建OrdersExtByColumn 的擴充套件類,繼承 Orders, 並 增加相應的欄位
public class OrdersExtByColumn
extends Orders {
//getter.. setter.. toString..
|
OrdersMapper對映檔案中,寫對應的sql語句
<
select
id
="queryOrdersByType"
parameterType
="int"
resultType
="OrdersExtByColumn">
|
編寫測試程式:
public class TestAssociation {
|
方式二 : 級聯屬性的方式
在orders類中, 增加 級聯屬性User user;
ResultType方式:
ResultMap方式:
方式三:association關聯的方式
方式四:association的分步查詢方式
分步查詢:即多個sql查詢 算出結果
此種方式,可以結合mybatis核心配置檔案mybatisCfg.xml的配置項,產生延遲快取;
mybatisCfg.xml 延遲載入相關設定項
方式五:包裝類的雙association的關聯方式
新建包裝類:
OrdersAndUser
public class OrdersAndUser {
//getter.. setter.. } |
方式六:內嵌association級聯
這種內嵌association會關聯三張表;
需求簡單變更為: 從某訂單詳情中,查詢訂單及對應 使用者資訊
追加一張訂單詳情表
-- ---------------------------- -- Table structure for `orderdetail` -- ---------------------------- DROP TABLE IF EXISTS `orderdetail`; CREATE TABLE `orderdetail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `orders_id` int(11) NOT NULL COMMENT '訂單id', `items_id` int(11) NOT NULL COMMENT '商品id', `items_num` int(11) DEFAULT NULL COMMENT '商品購買數量', PRIMARY KEY (`id`), KEY `FK_orderdetail_1` (`orders_id`), KEY `FK_orderdetail_2` (`items_id`), CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ---------------------------- -- Records of orderdetail -- ---------------------------- INSERT INTO `orderdetail` VALUES ('1', '3', '1', '1'); INSERT INTO `orderdetail` VALUES ('2', '3', '2', '3'); INSERT INTO `orderdetail` VALUES ('3', '4', '3', '4'); INSERT INTO `orderdetail` VALUES ('4', '4', '2', '3'); |
新增OrderDeatil類 【關聯Orders屬性】
public class OrderDetail {
//setter.. getter.. } |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2656521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java學習路線分享MyBatis之Spring整合程式設計師JavaMyBatisSpring
- 好程式設計師Java學習路線分享MyBatis之基本使用程式設計師JavaMyBatis
- 好程式設計師Java學習路線分享SpringCloud程式設計師JavaSpringGCCloud
- 好程式設計師Java學習路線分享MyBatis之關聯查詢程式設計師JavaMyBatis
- 好程式設計師大資料學習路線分享函式+map對映+元祖程式設計師大資料函式
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師Java學習路線分享MyBatis之執行緒最佳化程式設計師JavaMyBatis執行緒
- 好程式設計師Java學習路線分享Java框架怎麼搭建程式設計師Java框架
- 好程式設計師Java學習路線分享Java-String常用方法程式設計師Java
- 好程式設計師Java學習路線分享原生Ajax的使用程式設計師Java
- 好程式設計師Java學習路線分享finalize()方法詳解程式設計師Java
- 好程式設計師Java學習路線分享JVM相關概念程式設計師JavaJVM
- 好程式設計師Java學習路線分享Redis快速入門程式設計師JavaRedis
- 好程式設計師Java學習路線分享maven是什麼程式設計師JavaMaven
- 好程式設計師Java學習路線分享SpringMVC之MVC概述程式設計師JavaSpringMVC
- 好程式設計師Java學習路線分享Java中的位移運算程式設計師Java
- 好程式設計師Java學習路線分享三大特性之多型程式設計師Java多型
- 好程式設計師Java學習路線分享Dubbo架構介紹程式設計師Java架構
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- 好程式設計師Java學習路線分享MySQL目錄結構程式設計師JavaMySql
- 好程式設計師Java學習路線之集程式設計師Java
- 好程式設計師Java學習路線JSP物件程式設計師JavaJS物件
- 好程式設計師Java學習路線分享Java弱引用的理解與使用程式設計師Java
- 好程式設計師Java學習路線分享Java案例-封裝JDBC工具類程式設計師Java封裝JDBC
- 好程式設計師Java學習路線分享怎麼理解Java物件導向程式設計師Java物件
- 好程式設計師Java學習路線分享SpringMVC之請求和響應程式設計師JavaSpringMVC
- 好程式設計師Java學習路線分享如何處理中文引數程式設計師Java
- 好程式設計師Java學習路線分享JVM類載入機制程式設計師JavaJVM
- 好程式設計師Java學習路線分享Spring常見面試題程式設計師JavaSpring面試題
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師Java學習路線分享5分鐘瞭解計數排序程式設計師Java排序
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師Java學習路線分享實戰Tomcat效能最佳化程式設計師JavaTomcat
- 好程式設計師Java學習路線分享氣泡排序及最佳化程式設計師Java排序
- 好程式設計師Java學習路線分享Spring建立Bean的3種方式程式設計師JavaSpringBean
- 好程式設計師Java學習路線分享JavaScript基本資料型別分析程式設計師JavaScript資料型別
- 好程式設計師Java學習路線分享JavaEE的13種核心技術程式設計師Java