欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus多條件篩選分頁的實(shí)現(xiàn)

 更新時(shí)間:2021年09月27日 16:06:50   作者:Eggsy.Li  
本文主要介紹了Mybatis-plus多條件篩選分頁,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1. 數(shù)據(jù)庫映射對象與視圖對象

筆者在開發(fā)過程中在面向客戶端展示時(shí)都是使用二次封裝的視圖對象(VO)來進(jìn)行內(nèi)容展示.

package com.fod.fodapi.vo;

import lombok.Data;

/**
 * 用戶視圖對象
 * @author 86137
 * @date 2021-09-26 15:03
 */
@Data
public class UrmUserInfoVO {

	/**
	 * 用戶主鍵
	 */
	private Integer id;

	/**
	 * 用戶賬號(hào)
	 */
	private String userNumber;

	/**
	 * 用戶名稱
	 */
	private String userName;

	/**
	 * 用戶頭像
	 */
	private String userImage;

	/**
	 * 用戶性別
	 */
	private Integer userSex;

	/**
	 * 聯(lián)系方式
	 */
	private String userPhone;

	/**
	 * 狀態(tài)
	 */
	private Integer status;

	/*
	 * 	用戶角色
	 * */
	private String userRole;
}

2. 測試SQL

測試sql是在數(shù)據(jù)庫客戶端進(jìn)行數(shù)據(jù)測試時(shí)進(jìn)行編寫,確保在編寫代碼時(shí)不會(huì)出現(xiàn)sql查詢錯(cuò)誤

SELECT 
users.id, users.user_number, users.user_name, users.user_image, users.user_sex,
users.user_phone, users.native_place, users.status, roles.role_name
FROM 
urm_user_info AS users 
JOIN urm_user_online AS onlines ON users.id = onlines.user_info 
JOIN urm_user_role_relevance AS userAndRole ON users.id = userAndRole.user_id 
LEFT JOIN urm_role_info AS roles ON userAndRole.role_id = roles.id 
WHERE
	users.STATUS = 1 
	AND users.deleted = 0 
	AND onlines.online_status = 1
ORDER BY
	users.add_time

測試結(jié)果:

在這里插入圖片描述

3. MVC層分解

3.1 查詢參數(shù)封裝

查詢過程中部分參數(shù)是需要重復(fù)使用比如:當(dāng)前頁,當(dāng)前頁的數(shù)量,篩選條件等等。同時(shí)也可以解決查詢參數(shù)過多導(dǎo)致接口層接收數(shù)據(jù)的代碼過多。
公共使用的字段封裝:(類名:PublicSelect)

	private Integer page = 1;	//第幾頁
	private Integer limit = 10;	// 每頁多少條數(shù)據(jù)
	private String sort = "add_time";	// 排序字段
	private Boolean order = true;	// 排序方式(true:asc,false:desc)

特定功能查詢字段封裝:(類名:UrmUserInfoSelect )
在使用公共字段的時(shí)候繼承一下即可

/**
 * 用戶查詢條件
 */
@Data
public class UrmUserInfoSelect extends PublicSelect{

	/**用戶賬號(hào)*/
	private String userNumber;
	/**用戶名稱*/
	private String userName;
	/**用戶性別*/
	private Integer userSex;
	/**聯(lián)系方式*/
	private String userPhone;

	/** 狀態(tài)*/
	private Integer status;
	/**新增時(shí)間*/
	private Date addTime;
}

3.2 Controller層代碼

筆者在controller層只用做數(shù)據(jù)接收,數(shù)據(jù)的基本過濾驗(yàn)證,以及返回操作,業(yè)務(wù)全部在接口實(shí)現(xiàn)層里面(serverImpl)

@ApiOperation(value = "人員在線列表")
@GetMapping("/list")
@ResponseBody
public Object listSelective(@RequestBody UrmUserInfoSelect select){
	return rdmPersonOnlineService.listSelective(select);
}

3.3 Service接口層

public interface RdmPersonOnlineService {
	Object listSelective(UrmUserInfoSelect select);
}

3.4 ServiceImpl接口實(shí)現(xiàn)層

在這個(gè)類里面將編寫所有與業(yè)務(wù)有關(guān)的內(nèi)容

@Override
public Object listSelective(UrmUserInfoSelect select) {
	// QueryWrapper用于構(gòu)建sql的過濾數(shù)據(jù)條件內(nèi)容,詳細(xì)看Mybatis-Plus官方文檔即可
	QueryWrapper<UrmUserInfoVO> voQueryWrapper = new QueryWrapper<>();
	voQueryWrapper.eq("users.status",STATUS_START);
	voQueryWrapper.eq("users.deleted",DELETED_NO);
	voQueryWrapper.eq("onlines.online_status",USER_ONLINE);
	voQueryWrapper.orderBy(true, select.getOrder(), select.getSort());
	// 構(gòu)建分頁條件,通過Page自動(dòng)進(jìn)行分頁操作
	Page<UrmUserInfoVO> voPage = new Page<>(select.getPage(),select.getLimit());
	// setRecords是Page類里面的一個(gè)放置查詢結(jié)果的參數(shù)
	voPage.setRecords(
	urmUserInfoMapper.selectiveUserInfoByOnlineStatus(voPage,voQueryWrapper));
	return ResponseUtil.ok(voPage);
}

3.5 Mapper數(shù)據(jù)持久層

在mypper層編寫sql時(shí):在方法里面的條件參數(shù)中必須加上**@Param(Constants.WRAPPER),在Sql末尾必須加上${ew.customSqlSegment}**否在定義的條件無效。由于篩選條件(查詢條件)在條件參數(shù)中已經(jīng)配置完成,在mapper的sql里面就不需要再次寫入。

@Mapper
@Repository
public interface UrmUserInfoMapper extends BaseMapper<UrmUserInfo> {
	// 出現(xiàn)的+為回車換行
	@Select("SELECT " +
			"users.id, users.user_number, users.user_name, users.user_image, users.user_sex, users.user_phone, users.native_place, users.status, roles.role_name " +
			"FROM " +
			"urm_user_info AS users " +
			"JOIN urm_user_online AS onlines ON users.id = onlines.user_info " +
			"JOIN urm_user_role_relevance AS userAndRole ON users.id = userAndRole.user_id " +
			"LEFT JOIN urm_role_info AS roles ON userAndRole.role_id = roles.id ${ew.customSqlSegment}")
	List<UrmUserInfoVO> selectiveUserInfoByOnlineStatus(Page<UrmUserInfoVO> voPage, @Param(Constants.WRAPPER)QueryWrapper<UrmUserInfoVO> voQueryWrapper);
}

4. 結(jié)果

篩選條件

{
    "page":1,
    "limit":5,
    "sort": null,
    "order":true,
    "userNumber":null,
    "userName":null,
    "userSex": null,
    "userPhone": null,
    "status": null,
    "addTime":null
}

篩選結(jié)果:

{
    "errno": 0,
    "data": {
        "records": [
            {
                "id": 1,
                "userNumber": "admin",
                "userName": "admin",
                "userImage": null,
                "userSex": 1,
                "userPhone": "1234567890123",
                "status": 1,
                "userRole": null,
                "userOrganize": null
            },
            {
                "id": 2,
                "userNumber": "123456",
                "userName": "張三",
                "userImage": null,
                "userSex": 0,
                "userPhone": "1234567890123",
                "status": 1,
                "userRole": null,
                "userOrganize": null
            },
            {
                "id": 3,
                "userNumber": "123456789",
                "userName": "李四",
                "userImage": null,
                "userSex": 1,
                "userPhone": "1234567890123",
                "status": 1,
                "userRole": null,
                "userOrganize": null
            },
            {
                "id": 4,
                "userNumber": "123123",
                "userName": "王五",
                "userImage": null,
                "userSex": 1,
                "userPhone": "1234567890123",
                "status": 1,
                "userRole": null,
                "userOrganize": null
            },
            {
                "id": 5,
                "userNumber": "12121212",
                "userName": "馬六",
                "userImage": null,
                "userSex": 1,
                "userPhone": "1234567890123",
                "status": 1,
                "userRole": null,
                "userOrganize": null
            }
        ],
        "total": 6,
        "size": 5,
        "current": 1,
        "orders": [],
        "optimizeCountSql": true,
        "hitCount": false,
        "countId": null,
        "maxLimit": null,
        "searchCount": true,
        "pages": 2
    },
    "errmsg": "成功"
}

圖示:

在這里插入圖片描述

5 補(bǔ)充

5.1 分頁失效問題

分頁時(shí)出現(xiàn)查詢出來的都是所有數(shù)據(jù),并不會(huì)進(jìn)行分頁。原因是mybatis-plus配置出現(xiàn)問題。
不同版本可能會(huì)出現(xiàn)配置差異(筆者使用的是3.4.1)

@Configuration(proxyBeanMethods = false)
public class MybatisPlusConfig {


	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor()
	{
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		// 分頁插件
		interceptor.addInnerInterceptor(paginationInterceptor());
		return interceptor;
	}

	/**
	 * 分頁插件
	 */
	public PaginationInnerInterceptor paginationInterceptor() {
		PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
		// 設(shè)置數(shù)據(jù)庫類型為mysql
		paginationInnerInterceptor.setDbType(DbType.MYSQL);
		// 設(shè)置請求的頁面大于最大頁后操作, true調(diào)回到首頁,false 繼續(xù)請求  默認(rèn)false
		paginationInnerInterceptor.setOverflow(false);
		// 設(shè)置最大單頁限制數(shù)量,默認(rèn) 500 條,-1 不受限制
		paginationInnerInterceptor.setMaxLimit(-1L);
		return paginationInnerInterceptor;
	}

}

到此這篇關(guān)于Mybatis-plus多條件篩選分頁的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mybatisplus多條件篩選分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實(shí)操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Spring注解和同步鎖不能同步問題解決

    Spring注解和同步鎖不能同步問題解決

    這篇文章主要介紹了Spring注解和同步鎖不能同步問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法實(shí)例

    SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法實(shí)例

    在應(yīng)用程序啟動(dòng)后,可以自動(dòng)執(zhí)行建庫、建表等SQL腳本,下面這篇文章主要給大家介紹了關(guān)于SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • java學(xué)習(xí)之路_篇超好的文章

    java學(xué)習(xí)之路_篇超好的文章

    一篇超好的文章!就看你有沒耐心看!java學(xué)習(xí)之路!
    2008-10-10
  • Java模擬服務(wù)器解析web數(shù)據(jù)

    Java模擬服務(wù)器解析web數(shù)據(jù)

    本篇文章主要給大家詳細(xì)分享了搭建JavaWeb服務(wù)器的詳細(xì)步驟以及用到的代碼,對此有需要的朋友可以跟著學(xué)習(xí)下,希望能給你帶來幫助
    2021-07-07
  • Java 關(guān)鍵字 速查表介紹

    Java 關(guān)鍵字 速查表介紹

    下面小編就為大家?guī)硪黄狫ava 關(guān)鍵字 速查表介紹。小編覺得聽不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • java中Timer定時(shí)器的使用和啟動(dòng)方式

    java中Timer定時(shí)器的使用和啟動(dòng)方式

    這篇文章主要介紹了java中Timer定時(shí)器的使用和啟動(dòng)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java設(shè)計(jì)模式之建造者模式淺析示例

    Java設(shè)計(jì)模式之建造者模式淺析示例

    建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-11-11
  • Spring Boot Web應(yīng)用開發(fā) CORS 跨域請求支持

    Spring Boot Web應(yīng)用開發(fā) CORS 跨域請求支持

    本篇文章主要介紹了Spring Boot Web應(yīng)用開發(fā) CORS 跨域請求支持,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 關(guān)于Springboot如何獲取IOC容器

    關(guān)于Springboot如何獲取IOC容器

    大家好,我是孤焰。最近我在制作日志審計(jì)功能時(shí)發(fā)現(xiàn)不知道怎樣獲取到Springboot項(xiàng)目中的IOC容器,經(jīng)過摸索,最終解決了這個(gè)問題,現(xiàn)在把解決方式和大家分享一下
    2021-08-08

最新評論