最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

package com.fod.fodapi.vo;

import lombok.Data;

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

	/**
	 * 用戶(hù)主鍵
	 */
	private Integer id;

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

	/**
	 * 用戶(hù)名稱(chēng)
	 */
	private String userName;

	/**
	 * 用戶(hù)頭像
	 */
	private String userImage;

	/**
	 * 用戶(hù)性別
	 */
	private Integer userSex;

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

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

	/*
	 * 	用戶(hù)角色
	 * */
	private String userRole;
}

2. 測(cè)試SQL

測(cè)試sql是在數(shù)據(jù)庫(kù)客戶(hù)端進(jìn)行數(shù)據(jù)測(cè)試時(shí)進(jìn)行編寫(xiě),確保在編寫(xiě)代碼時(shí)不會(huì)出現(xiàn)sql查詢(xún)錯(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

測(cè)試結(jié)果:

在這里插入圖片描述

3. MVC層分解

3.1 查詢(xún)參數(shù)封裝

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

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

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

/**
 * 用戶(hù)查詢(xún)條件
 */
@Data
public class UrmUserInfoSelect extends PublicSelect{

	/**用戶(hù)賬號(hào)*/
	private String userNumber;
	/**用戶(hù)名稱(chēng)*/
	private String userName;
	/**用戶(hù)性別*/
	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ù)的基本過(guò)濾驗(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è)類(lèi)里面將編寫(xiě)所有與業(yè)務(wù)有關(guān)的內(nèi)容

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

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

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

@Mapper
@Repository
public interface UrmUserInfoMapper extends BaseMapper<UrmUserInfo> {
	// 出現(xiàn)的+為回車(chē)換行
	@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 分頁(yè)失效問(wèn)題

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

@Configuration(proxyBeanMethods = false)
public class MybatisPlusConfig {


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

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

}

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

相關(guān)文章

最新評(píng)論

德令哈市| 安泽县| 鸡泽县| 枞阳县| 黑山县| 措勤县| 上栗县| 深圳市| 壶关县| 广汉市| 永丰县| 小金县| 鹤庆县| 福泉市| 香河县| 唐山市| 南平市| 惠水县| 罗平县| 思南县| 阿瓦提县| 利津县| 石棉县| 徐水县| 定边县| 威远县| 乌审旗| 麻城市| 潢川县| 精河县| 江源县| 会宁县| 南丹县| 化德县| 集贤县| 南江县| 房产| 伊金霍洛旗| 万载县| 晋江市| 丰城市|