日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java - Mybatis 數據庫多表關聯分頁的問題

瀏覽:243日期:2022-06-11 15:18:25

問題描述

舉個例子:有兩個實體類 User 和 Address

public class User { private int id; private String username; // 用戶名 private List<Address> addresses; // getter setter...}public class Address { private int id; private String detail; // 詳細地址 private User user; //所屬用戶 // getter setter...}

數據庫:

create table t_user( id int(10) primary key auto_increment, username varchar(50));create table t_address( id int(10) primary key auto_increment, detail varchar(255), user_id int(10), CONSTRAINT FOREIGN KEY (user_id) REFERENCES t_user(id));

mybatis映射配置:

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'><mapper namespace='org.mkh.shop.model.User'> <resultMap type='User' autoMapping='true'><id property='id' column='u_id'/><collection property='address' ofType='Address'> <id property='id' column='a_id'/> <result property='detail' column='detail'/></collection> </resultMap> <select resultType='User' parameterType='map'>select *,ta.id as ’a_id’,tu.id as ’u_id’ from t_user tu left join t_address ta on ta.user_id=tu.id <where> <if test='name != null'>(username like #{name}) </if></where><if test='sort != null'> order by ${sort} <choose><when test='order != null'>${order}</when><otherwise>asc</otherwise> </choose> </if>limit #{pageOffset},#{pageSize} </select><select resultType='int' parameterType='map'>select count(*) from t_user tu left join t_address ta on ta.user_id=tu.id <where> <if test='name != null'>(username like #{name}) </if></where> </select> </mapper>

用戶和地址的關系為:一個用戶有多個地址,一個地址只能屬于一個用戶,一對多假設現在的需求是,分頁查詢用戶,用表格顯示,并把每個用戶的所有地址顯示出來那么問題來了按照上面的查詢返回的分頁的數據是沒有問題的,但是分頁的總記錄數卻是不對的。比如查出來的數據(數據庫數據,并非頁面顯示)如下:

u_idusernamea_iddetail 1user11北京市海淀區 1user12北京市朝陽區 2user23天津市

因為我的需求是分頁顯示用戶,所以一個用戶就是一條數據在頁面顯示大概是這樣子,理論上是兩條數據,

用戶id用戶名地址 1user1 1. 北京市海淀區 2. 北京市朝陽區 2user21. 天津市 共1頁,共2條數據,每頁顯示10條

但是,按mybatis的find_count配置 查出來是3條,這種問題如何解決?查詢count(*)的時候將所有left join 后面關聯的表去除嗎?這樣會不會導致返回的數據不準確

補充說明:感覺大家是理解錯我的意思了,其實我這個問題主要是在SQL 上,而不再mybatis上,因為我查詢出來的數據映射完畢之后是完全沒有問題的,只是在分頁的總記錄數上出現了問題,導致分頁不正確

問題解答

回答1:

剛才寫了個例子測了一下

`java - Mybatis 數據庫多表關聯分頁的問題

兩個實體類public class User {

private int id;private String username; // 用戶名private List<Address> addresses;

public class Address {

private int id;private String detail; // 詳細地址private int user_id; // 所屬用戶

映射文件<resultMap type='com.atguigu.mybatis.entity.User' autoMapping='true'>

<result property='id' column='u_id'/> <collection property='addresses' ofType='com.atguigu.mybatis.entity.Address' autoMapping='true'><result property='id' column='a_id'/><result property='user_id' column='u_id'/> </collection></resultMap><select resultMap='userMap' >

<!-- select tu.,ta., --><!-- ta.id as ’a_id’, --><!-- tu.id as ’u_id’ --><!-- from t_user tu , --><!-- t_address ta where ta.user_id=tu.id -->

select tu.*,ta.*, ta.id as ’a_id’, tu.id as ’u_id’ from t_user tu left join t_address ta on ta.user_id=tu.id </select>

測試結果java - Mybatis 數據庫多表關聯分頁的問題

封裝成的 List<User>的size是沒問題的

回答2:

關鍵詞group by 自己查一下具體操作

回答3:

SELECT *, ta.id AS ’a_id’, tu.id AS ’u_id’FROM t_user tuLEFT JOIN t_address ta ON ta.user_id = tu.id;

你希望想要兩條 但是你的sql查出三條,所以顯示錯誤,應該拆分邏輯:應該先查出你想要的用戶

<select resultType='User' parameterType='map'>select *from t_user tu <where> <if test='name != null'>(username like #{name}) </if></where><if test='sort != null'> order by ${sort} <choose><when test='order != null'>${order}</when><otherwise>asc</otherwise> </choose> </if>limit #{pageOffset},#{pageSize} </select>

然后在

<resultMap type='User' autoMapping='true'><id property='id' column='u_id'/><collection ' property='addresses' javaType= 'ArrayList' column='u_id' ofType='Address' select= '??' /> </resultMap>

??是自己實現個 用userId查List<Address>的方法

回答4:

這種情況不能這么分頁,你需要對主表數據進行分頁。

本來查詢出100條數據,由于一對多會折疊去重很多數據,導致實際結果少于100條。

這種情況下可以采取嵌套查詢方式解決,就是需要N+1次執行,可以懶加載。

或者看這里:https://my.oschina.net/flags/...

有關 MyBatis 內容可以訪問:http://mybatis.tk

回答5:

<select resultType='int' parameterType='map'> select count(*) from t_user tu left join t_address ta on ta.user_id=tu.id <where> <if test='name != null'> (username like #{name})</if> </where></select>

改:

<select resultType='int' parameterType='map'> select count(*) from t_user tu <where> <if test='name != null'> (username like #{name})</if> </where> group by username</select> 回答6:

用子查詢就不會有問題了

select count(*) from ( // query 在這里即使關聯100張表, 也不可能存在問題)

樓主可以看一下Mybatis-PageHelper count sql 轉換實現

建議樓主直接使用 Mybatis-PageHelper 實現分頁

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区清纯| 亚洲人亚洲人色久| 国产精品免费99久久久| 日韩欧美美女在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 黄色成人在线网址| 久久电影一区| 蜜桃伊人久久| 日韩中文字幕麻豆| 青草国产精品久久久久久| 日韩av一级片| 欧美成人精品一级| 亚洲精品一二| 国产亚洲欧美日韩精品一区二区三区 | 国产精品自在| 国产乱人伦精品一区| 欧美91在线| 鲁大师精品99久久久| 国产成人1区| 日韩欧美字幕| 91精品一区国产高清在线gif| 91成人网在线观看| 亚洲精品免费观看| 国产欧美一区二区色老头| 国产高清日韩| 丝袜美腿一区| 美日韩精品视频| 久久黄色影视| 国产在线看片免费视频在线观看| 欧美丝袜一区| 亚洲理论在线| 美女尤物国产一区| yellow在线观看网址| 亚洲91久久| 亚洲精品少妇| 亚洲欧美日本视频在线观看| 婷婷激情一区| 在线亚洲自拍| 91亚洲一区| 亚洲精品系列| 久久影院一区二区三区| 国产亚洲一区二区手机在线观看 | 91国内精品| 97国产成人高清在线观看| 天堂资源在线亚洲| 日韩精品成人| 亚洲播播91| 日韩激情综合| 中文字幕成在线观看| 性色av一区二区怡红| 欧美激情网址| 伊人成人网在线看| 国产精选久久| 欧美日韩三区| 精品一二三区| 综合激情婷婷| 国产成人久久精品麻豆二区| 最新亚洲激情| 欧美黄色精品| 亚洲男女自偷自拍| 久久精品国产久精国产爱| 亚洲欧美高清| 四虎8848精品成人免费网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品香蕉视频| 中文精品电影| 欧美黄色网页| 日韩av字幕| 国产视频久久| 在线视频免费在线观看一区二区| 中文字幕在线看片| 福利一区和二区| 国产高清不卡| 欧美午夜不卡| 最新中文字幕在线播放| 亚洲婷婷免费| 国产精品丝袜在线播放| 亚洲男人在线| 蜜臀久久99精品久久久久久9| 日本中文字幕一区二区视频| 岛国精品一区| 日韩欧美视频专区| 国产一区三区在线播放| 丝袜美腿亚洲色图| 国产精品美女在线观看直播| 亚洲一区日韩在线| 日本不卡免费高清视频在线| 红杏一区二区三区| 国产美女亚洲精品7777 | 美女精品视频在线| 亚洲乱码视频| 国产自产自拍视频在线观看| 91日韩在线| 99精品小视频| 亚洲一区亚洲| 欧美激情精品| 中文字幕一区二区三区日韩精品| 国产欧美精品| 精品美女在线视频| 7777精品| 精品视频高潮| 婷婷亚洲五月| 欧美黄页在线免费观看| 免费一区二区三区在线视频| 免费不卡在线观看| 成人在线免费观看网站| 欧美日韩中文一区二区| 日韩中文在线电影| 亚洲精品美女91| 青青草91久久久久久久久| 亚洲三级欧美| 久久婷婷激情| 国产精品片aa在线观看| 久久激情一区| 巨乳诱惑日韩免费av| 亚洲精品护士| 蜜臀久久99精品久久久久宅男| 国产精品久久久久9999高清| 午夜一区在线| 极品裸体白嫩激情啪啪国产精品| 欧美亚洲自偷自偷| 国产精品2023| 久久三级视频| 久久久国产亚洲精品| 一区二区三区四区在线观看国产日韩| 丁香婷婷久久| 免费人成网站在线观看欧美高清| 美女精品视频在线| 麻豆传媒一区二区三区| 国产乱子精品一区二区在线观看 | 日韩欧美2区| 老司机精品视频在线播放| 国产精品女主播一区二区三区| 日韩中文字幕高清在线观看| 国产日韩亚洲| 捆绑调教美女网站视频一区| 尤物在线精品| 日本精品另类| 国产欧美一级| 日本蜜桃在线观看视频| 婷婷精品在线观看| 久久gogo国模啪啪裸体| 在线一区免费观看| 岛国av在线网站| 你懂的亚洲视频| 97精品国产| 日韩1区2区日韩1区2区| 在线亚洲自拍| 欧美日韩在线观看首页| 水蜜桃久久夜色精品一区| 三上亚洲一区二区| 国产精品亚洲产品| 中文字幕一区久| 国产欧美日韩视频在线| 美女av在线免费看| 亚洲欧美日韩视频二区| 日韩精品a在线观看91| 超碰在线99| 亚洲综合中文| 国产精品女主播一区二区三区| 精品网站aaa| 日韩精品亚洲一区二区三区免费| 午夜久久美女| se01亚洲视频| 成人日韩在线| 成人片免费看| 精品欧美日韩精品| 国产精品亚洲欧美一级在线| 国内精品福利| 丁香六月综合| 99免费精品| 国产精品99一区二区| 国产精品资源| 国产欧美激情| 99久久婷婷| 精品国产亚洲日本| 久久国产精品久久久久久电车| 天堂а√在线最新版中文在线| 国产探花在线精品一区二区| 亚洲开心激情| 亚洲精品1区| 九九九精品视频| 久久这里只有| 国产综合亚洲精品一区二| 蜜桃视频欧美| 国产欧美日韩在线一区二区 | 国产精品午夜一区二区三区| 日韩av不卡一区二区| 美女91精品| 在线观看一区| 亚洲精品美女| 97国产成人高清在线观看| 精品九九久久| 亚洲成人三区| 日韩精品91亚洲二区在线观看| 久久亚洲黄色| 黄色亚洲精品| 免费视频一区二区三区在线观看| 91精品亚洲| 国产精品jk白丝蜜臀av小说|