在寫**的時候經常有這種需求,乙個訂單對應多個商品,需要對訂單以及商品進行分頁模糊搜尋,
在首頁展示多個滿足要求的訂單,並且同時展示出訂單中的商品資訊,
此時需要返回乙個list,並且list中物件是一對多的關係,就是對1對多種的多進行分頁.這個時候的思路.
我們以一為主表,多為副表進行分析
1.實現:使用mybatis的一對多,就是resultmap中的collections進行資料的接收.
2.思路:
分頁主要是多主表進行分頁
將主表(一)和副表(多)進行連表查詢,組合成乙個臨時表.
臨時表中進行條件篩選,選出符合條件的條目.
使用主表的id進行分組,找出滿足條件的主表條目.
使用mybatis中的collection使用id進行一對多查詢.
1.模擬表
*****===
t_data.sql
set names utf8mb4;
set foreign_key_checks = 0;
-- ----------------------------
-- table structure for t_data
-- ----------------------------
drop table if exists `t_data`;
create table `t_data` (
`id` int(11) not null auto_increment,
`data_code` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
`data_name` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
primary key (`id`) using btree
) engine = innodb character set = utf8mb4 collate = utf8mb4_0900_ai_ci row_format = dynamic;
-- ----------------------------
-- records of t_data
-- ----------------------------
insert into `t_data` values (1, 'data0001', '111');
insert into `t_data` values (2, 'data0002', '233');
insert into `t_data` values (3, 'data0003', '34q53');
insert into `t_data` values (4, 'data0004', 'cvzxgf');
insert into `t_data` values (5, 'data0005', '42rg');
set foreign_key_checks = 1;
**********====
t_scene.sql
set names utf8mb4;
set foreign_key_checks = 0;
-- ----------------------------
-- table structure for t_scene
-- ----------------------------
drop table if exists `t_scene`;
create table `t_scene` (
`id` int(11) not null auto_increment,
`scene_code` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
`scene_name` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
primary key (`id`) using btree
) engine = innodb character set = utf8mb4 collate = utf8mb4_0900_ai_ci row_format = dynamic;
-- ----------------------------
-- records of t_scene
-- ----------------------------
insert into `t_scene` values (1, 'scene0001', 'adf');
insert into `t_scene` values (2, 'scene0002', 'adf');
insert into `t_scene` values (3, 'scene0003', 'er');
insert into `t_scene` values (4, 'scene0004', '43');
set foreign_key_checks = 1;
set names utf8mb4;
set foreign_key_checks = 0;
-- ----------------------------
-- ----------------------------
`id` int(11) not null auto_increment,
`scene_code` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
`data_code` varchar(255) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
primary key (`id`) using btree
) engine = innodb character set = utf8mb4 collate = utf8mb4_0900_ai_ci row_format = dynamic;
-- ----------------------------
-- ----------------------------
set foreign_key_checks = 1;
2.實體類@lombok.data
public class data
@data
public class scene
@data
private int id;
private string scenecode;
private listdatalist;
}
<?xml version="1.0" encoding="utf-8" ?>
select td.* from t_data td
where scene_code = #
from t_scene ts
left join t_data td on td.data_code = sdm.data_code
where ts.scene_code like concat('%','scene00','%')
and td.data_name like concat('%','3','%')
group by ts.scene_code) t
left join t_data td on td.data_code = sdm.data_code
where ts.scene_code like concat('%','scene00','%')
and td.data_name like concat('%','3','%')
group by ts.scene_code
4.測試入口
public string page22()
return "555";
}
mybatis 一對多查詢
查詢訂單及訂單明細的資訊。這裡怎麼體現了一對多 這裡orders的id出現重複的記錄,無法對映到orders類中 collection 對關聯查詢到多條記錄對映到集合物件中 4 查詢訂單 關聯使用者 及訂單明細 public listfindordersandorderdetailresultmap...
mybatis 一對多查詢
與phoenix不同,在mysql中查詢的結果不會按照id預設排序。所以如果頁面有隱含的順序要求 兩次呼叫,列表順序不變 此時千萬不要使用set,而應該使用list。接下來進入正題 直接上 public class userpublic class order 根據id查詢使用者,並且查詢出該使用者...
Mybatis一對多查詢
mybatis中有兩個標籤,association和collection,這兩個標籤都有兩種用法 一種是如下方式一可以與查詢繫結在一起,使用這種方式association和collection的效果是一樣的,都可以進行一對多和一對一的查詢,但這種方式會進行n m次查詢,在資料量非常大的情況下不推薦使...