一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Mybatis-plus多條件篩選分頁的實現(xiàn)

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

2022-01-20 12:00Eggsy.Li Java教程

本文主要介紹了Mybatis-plus多條件篩選分頁,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

筆者在開發(fā)過程中在面向客戶端展示時都是使用二次封裝的視圖對象(VO)來進行內(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;

	/**
	 * 用戶賬號
	 */
	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ù)庫客戶端進行數(shù)據(jù)測試時進行編寫,確保在編寫代碼時不會出現(xiàn)sql查詢錯誤

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é)果:

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

 

3. MVC層分解

3.1 查詢參數(shù)封裝

查詢過程中部分參數(shù)是需要重復(fù)使用比如:當前頁,當前頁的數(shù)量,篩選條件等等。同時也可以解決查詢參數(shù)過多導致接口層接收數(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 )
在使用公共字段的時候繼承一下即可

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

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

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

3.2 Controller層代碼

筆者在controller層只用做數(shù)據(jù)接收,數(shù)據(jù)的基本過濾驗證,以及返回操作,業(yè)務(wù)全部在接口實現(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接口實現(xiàn)層

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

@Override
public Object listSelective(UrmUserInfoSelect select) {
	// QueryWrapper用于構(gòu)建sql的過濾數(shù)據(jù)條件內(nèi)容,詳細看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自動進行分頁操作
	Page<UrmUserInfoVO> voPage = new Page<>(select.getPage(),select.getLimit());
	// setRecords是Page類里面的一個放置查詢結(jié)果的參數(shù)
	voPage.setRecords(
	urmUserInfoMapper.selectiveUserInfoByOnlineStatus(voPage,voQueryWrapper));
	return ResponseUtil.ok(voPage);
}

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

在mypper層編寫sql時:在方法里面的條件參數(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": "成功"
}

圖示:

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

 

5 補充

5.1 分頁失效問題

分頁時出現(xiàn)查詢出來的都是所有數(shù)據(jù),并不會進行分頁。原因是mybatis-plus配置出現(xiàn)問題。
不同版本可能會出現(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ù)請求  默認false
		paginationInnerInterceptor.setOverflow(false);
		// 設(shè)置最大單頁限制數(shù)量,默認 500 條,-1 不受限制
		paginationInnerInterceptor.setMaxLimit(-1L);
		return paginationInnerInterceptor;
	}

}

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

原文鏈接:https://blog.csdn.net/qq_19331985/article/details/120496441

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: les在宿舍吃她奶 | 国产精品久久国产三级国电话系列 | 国产精品亚洲va在线观看 | 国产精品久久国产精品99 | 亚洲福利一区二区 | 干妞网免费视频 | 男女啪啪gif | 欧美男男gaysgays| 波多野结衣在线观看视频 | 无遮挡h肉动漫在线观看电车 | 日本一区二区三区在线 观看网站 | 黄色大片免费网站 | 国产成人亚洲影视在线 | 久久永久影院免费 | 污污的动态图合集 | 艾秋麻豆果冻传媒老狼仙踪林 | 日本片免费观看一区二区 | 亚洲乱码尤物193yw在线播放 | 成人精品亚洲人成在线 | 国产精品区一区二区免费 | www.男人天堂 | 俺去啦最新官网 | 精品免费tv久久久久久久 | 岛国片免费观看 | 欧美亚洲一区二区三区 | 精品免费tv久久久久久久 | 视频一区久久 | 日韩视频一区 | 亚洲毛片免费看 | 91精品乱码一区二区三区 | 4455四色永久免费 | 夫妻性生活一级黄色片 | 97午夜视频 | 福利视频一区二区三区 | 国产成人综合精品一区 | 日本高清免费不卡在线播放 | 国产91素人搭讪系列天堂 | 日韩香蕉网 | 免费α片 | 黄蓉h系列| 免费国产一级 |