91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis-plus如何實現多條件篩選分頁

發布時間:2021-09-28 09:19:46 來源:億速云 閱讀:676 作者:小新 欄目:開發技術

這篇文章主要介紹Mybatis-plus如何實現多條件篩選分頁,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1. 數據庫映射對象與視圖對象

在開發過程中在面向客戶端展示時都是使用二次封裝的視圖對象(VO)來進行內容展示.

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;

	/**
	 * 聯系方式
	 */
	private String userPhone;

	/**
	 * 狀態
	 */
	private Integer status;

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

2. 測試SQL

測試sql是在數據庫客戶端進行數據測試時進行編寫,確保在編寫代碼時不會出現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

測試結果:

Mybatis-plus如何實現多條件篩選分頁

3. MVC層分解

3.1 查詢參數封裝

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

	private Integer page = 1;	//第幾頁
	private Integer limit = 10;	// 每頁多少條數據
	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;
	/**聯系方式*/
	private String userPhone;

	/** 狀態*/
	private Integer status;
	/**新增時間*/
	private Date addTime;
}

3.2 Controller層代碼

筆者在controller層只用做數據接收,數據的基本過濾驗證,以及返回操作,業務全部在接口實現層里面(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接口實現層

在這個類里面將編寫所有與業務有關的內容

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

3.5 Mapper數據持久層

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

@Mapper
@Repository
public interface UrmUserInfoMapper extends BaseMapper<UrmUserInfo> {
	// 出現的+為回車換行
	@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. 結果

篩選條件

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

篩選結果:

{
    "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如何實現多條件篩選分頁

5 補充

5.1 分頁失效問題

分頁時出現查詢出來的都是所有數據,并不會進行分頁。原因是mybatis-plus配置出現問題。
不同版本可能會出現配置差異(筆者使用的是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();
		// 設置數據庫類型為mysql
		paginationInnerInterceptor.setDbType(DbType.MYSQL);
		// 設置請求的頁面大于最大頁后操作, true調回到首頁,false 繼續請求  默認false
		paginationInnerInterceptor.setOverflow(false);
		// 設置最大單頁限制數量,默認 500 條,-1 不受限制
		paginationInnerInterceptor.setMaxLimit(-1L);
		return paginationInnerInterceptor;
	}

}

以上是“Mybatis-plus如何實現多條件篩選分頁”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郁南县| 清水县| 海晏县| 枣强县| 河西区| 洛浦县| 茌平县| 开鲁县| 衡阳县| 资讯| 望谟县| 健康| 方城县| 彩票| 张家港市| 论坛| 滁州市| 岳阳市| 天津市| 昌图县| 舞钢市| 荔波县| 临夏县| 改则县| 乌兰察布市| 新巴尔虎右旗| 江陵县| 新余市| 盐边县| 原阳县| 梁山县| 阿城市| 鄂伦春自治旗| 江阴市| 浪卡子县| 贵定县| 六安市| 依兰县| 合川市| 枞阳县| 舟曲县|