使用mybatis的一對多查詢

2021-10-06 18:33:12 字數 4178 閱讀 1077

在寫**的時候經常有這種需求,乙個訂單對應多個商品,需要對訂單以及商品進行分頁模糊搜尋,

在首頁展示多個滿足要求的訂單,並且同時展示出訂單中的商品資訊,

此時需要返回乙個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次查詢,在資料量非常大的情況下不推薦使...