這篇文章主要介紹“mybatis映射怎么實現”,在日常操作中,相信很多人在mybatis映射怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mybatis映射怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Mybatis 1對1關聯 實現方式
通過resultType方式
通過級聯屬性的方式【resultType 和 resultMap方式】
通過association關聯的方式
通過association的分步查詢方式
通過包裝類的雙association的關聯方式
通過association的嵌套定義方式
案例: 查詢 訂單 對應的用戶信息
用戶表:
-- ---------------------------- -- 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.. } |
一個訂單 對應 一個用戶
對訂單實體類進行擴展: 【只增加 對應的字段 ;例如案例中的 用戶名稱】
新建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 延遲加載相關設置項
新建包裝類:
OrdersAndUser
public class OrdersAndUser { //getter.. setter.. } |
這種內嵌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.. } |
到此,關于“mybatis映射怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。