springboot+mybatis按條件分頁(yè)查詢多張表的項(xiàng)目實(shí)踐
背景
假如同 mysql 數(shù)據(jù)源下有如下幾張表:
- 用戶基礎(chǔ)信息表
- 用戶地址表
- 用戶學(xué)歷信息表
我希望做分頁(yè)查詢用戶數(shù)據(jù),用戶數(shù)據(jù)為各個(gè)表內(nèi)信息的匯總,并且這個(gè)分頁(yè)查詢會(huì)根據(jù)各種條件來(lái)查詢
那么通常該如何做呢?
方案推薦
一般情況下通用推薦(下面主講):
使用 join 進(jìn)行多表連接查詢,使用 pagehelper 分頁(yè)插件,通過(guò) MyBatis 的 <resultMap> 和 JOIN 語(yǔ)句實(shí)現(xiàn)多表關(guān)聯(lián),使用 MyBatis 動(dòng)態(tài) SQL 標(biāo)簽(如 )處理?xiàng)l件組合
其他方案:
- 方式一:將高頻查詢字段冗余到主表,形成寬表,此方案犧牲空間換取性能,以后直接分頁(yè)查詢一張表即可
- 方式二:分步驟來(lái)查詢,在代碼層面進(jìn)行數(shù)據(jù)組裝
創(chuàng)建 DTO
創(chuàng)建 dto 做查詢數(shù)據(jù)接收的對(duì)象
public class UserQueryDTO {
private String name; // 用戶姓名(模糊查詢)
private String province; // 省份條件
private String degree; // 學(xué)歷條件
}
創(chuàng)建 Mapper
創(chuàng)建一個(gè) mapper 接口 selectUserWithConditions
創(chuàng)建對(duì)應(yīng) xml
<!-- UserMapper.xml -->
<select id="selectUserWithConditions" resultMap="UserResultMap">
SELECT u.id, u.name, a.province, e.degree
FROM user u
LEFT JOIN address a ON u.id = a.user_id
LEFT JOIN education e ON u.id = e.user_id
<where>
<if test="name != null and name != ''">
u.name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="province != null and province != ''">
AND a.province = #{province}
</if>
<if test="degree != null and degree != ''">
AND e.degree = #{degree}
</if>
</where>
</select>
<resultMap id="UserResultMap" type="UserVO">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="province" column="province"/>
<result property="degree" column="degree"/>
</resultMap>
Service 代碼
// 使用PageHelper(需在pom.xml 添加依賴)
public PageInfo<UserVO> queryUsers(UserQueryDTO dto) {
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
List<UserVO> list = userMapper.selectUserWithConditions(dto);
return new PageInfo<>(list);
}
到此這篇關(guān)于springboot+mybatis按條件分頁(yè)查詢多張表的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)springboot mybatis 條件多表分頁(yè)查詢 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java與WebUploader相結(jié)合實(shí)現(xiàn)文件上傳功能(實(shí)例代碼)
這篇文章主要介紹了Java結(jié)合WebUploader實(shí)現(xiàn)文件上傳功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
詳解SpringBoot優(yōu)雅編碼之Lombok加持
這篇文章主要介紹了詳解SpringBoot優(yōu)雅編碼之Lombok加持,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
SpringBoot配置外部靜態(tài)資源映射問(wèn)題
這篇文章主要介紹了SpringBoot配置外部靜態(tài)資源映射問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Jenkins環(huán)境搭建之下載與安裝過(guò)程
Jenkins是一個(gè)功能強(qiáng)大的應(yīng)用程序,允許持續(xù)集成和持續(xù)交付項(xiàng)目,集成Jenkins可以用于一些測(cè)試和部署技術(shù),對(duì)Jenkins環(huán)境搭建之下載與安裝過(guò)程感興趣的朋友跟隨小編一起看看吧2021-12-12
IDEA打包maven多模塊相互依賴項(xiàng)目全過(guò)程
這篇文章主要介紹了IDEA打包maven多模塊相互依賴項(xiàng)目全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程詳解
這篇文章主要介紹了SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程,文中通過(guò)代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05

