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

MybatisPlus中的多表?xiàng)l件排序查詢

 更新時(shí)間:2022年09月27日 09:46:32   作者:魏N來  
這篇文章主要介紹了MybatisPlus中的多表?xiàng)l件排序查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.pom文件

sql支持 ${ew.customSqlSegment} 最低版本3.0.7

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.0.7</version>
		</dependency>

2.自定義返回對(duì)象

@Data
@ApiModel
public class SupLogUserVO
{
	@ApiModelProperty(value="日志ID")
	private Long id;
	@ApiModelProperty(value="用戶ID")
	private Long userId;
	@ApiModelProperty(value="姓名")
	private String name;
	@ApiModelProperty(value="操作類型")
	private String operation;
	@ApiModelProperty(value="方法")
	private String method;
	@ApiModelProperty(value="參數(shù)")
	private String param;
	@ApiModelProperty(value="客戶端類型")
    private String clientType;
	@ApiModelProperty(value="業(yè)務(wù)系統(tǒng)")
    private String sysId;
	@ApiModelProperty(value="ip")
    private String ip;
	@ApiModelProperty(value="創(chuàng)建時(shí)間")
	private LocalDateTime createTime;
	}

3.mapper方法

 IPage<SupLogUserVO> getSupLogUser(IPage<SupLogUserVO> page, @Param(Constants.WRAPPER) Wrapper<SupLogUserVO> queryWrapper);

4.xml自定義sql

<select id="getSupLogUser" resultType="bw.yth.svc.web.sysmng.vo.SupLogUserVO">
   select
	    l.id,l.user_id userId,u.`name`,l.operation,l.method,l.param,
	    l.client_type clientType,l.sys_id sysId,l.ip,l.create_time createTime 
   from 	sup_log l 
   LEFT JOIN 
   		sys_user u 
   on 		l.user_id = u.user_id
     ${ew.customSqlSegment}
</select>

5.service方法

public IPage<SupLogUserVO> getSupLogUser(String name, String six, String order, Integer curPage, Integer limit) {
		QueryWrapper<SupLogUserVO> wrapper = new QueryWrapper<SupLogUserVO>().like(StringUtils.isNotBlank(name), "name", name);
		wrapper = QueryUtil.addOrderBy(wrapper, six, null, order, null);
		Page<SupLogUserVO> page = QueryUtil.getPage(curPage, limit);
		return supLogDao.getSupLogUser(page, wrapper);
	}

6.QueryUtil自定義的查詢工具

import org.apache.commons.lang3.StringUtils;

import bw.common.util.BclSqlUtil;
import bw.yth.svc.base.AppConst;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

/** 查詢相關(guān)的工具類 */
public class QueryUtil
{
	/** 防SQL注入過濾。去掉 “'";\”及空格
	 * @return - 輸入為空或全被過濾則返回空串,一定不會(huì)返回null
	 */
	public static String filterSql(String sql)
	{
		return BclSqlUtil.filterSql(sql, true);
	}

	/** 根據(jù)分頁參數(shù)生成MP分頁對(duì)象
	 * @param pageNo	頁號(hào)(從1開始) 
	 * @param pageSize	每頁條數(shù)
	 */
	public static <T> Page<T> getPage(Integer pageNo, Integer pageSize)
	{
		if(pageNo==null || pageNo<1)
			pageNo = 1;
		if(pageSize==null || pageSize<1 || pageSize>AppConst.Q_MAX_PER_PAGE)
			pageSize = AppConst.Q_DEFAULT_PER_PAGE;
		
		return new Page<T>(pageNo, pageSize);
	}

	/** 為查詢?cè)黾优判驐l件(可指定默認(rèn)條件)
	 * @param wrapper		查詢對(duì)象
	 * @param orderField	指定的排序字段,可為空
	 * @param defOrderField	缺省的排序字段(無指定字段時(shí)用),可為空
	 * @param orderType		指定的排序方向,可為空
	 * @param defOrderType	缺省的排序方向(無指定方向時(shí)用),可為空
	 * @return 查詢對(duì)象
	 */
	public static <T> QueryWrapper<T> addOrderBy(QueryWrapper<T> wrapper, String orderField, String defOrderField, String orderType, String defOrderType)
	{
		boolean isAsc;
			//先判斷排序方向
		isAsc = true;
		if( StringUtils.isBlank(orderType) )			//無指定值
		{
			if( AppConst.DESC.equalsIgnoreCase(defOrderType) )	//判斷默認(rèn)值
				isAsc = false;
		}
		else											//有指定值
		{
			if( AppConst.DESC.equalsIgnoreCase(orderType) )
				isAsc = false;
		}
			//再判斷排序字段
		if( StringUtils.isBlank(orderField) )			//無指定值
		{
			if( !StringUtils.isBlank(defOrderField) )		//有默認(rèn)值
				wrapper.orderBy(true, isAsc, QueryUtil.filterSql(defOrderField));
		}
		else											//有指定值
			wrapper.orderBy(true, isAsc, QueryUtil.filterSql(orderField));
		return wrapper;
	}
	/** 為查詢?cè)黾优判驐l件(無默認(rèn)排序條件)
	 * @param wrapper		查詢對(duì)象
	 * @param orderField	指定的排序字段,可為空
	 * @param orderType		指定的排序方向,可為空
	 * @return 查詢對(duì)象
	 */
	public static <T> QueryWrapper<T> addOrderBy(QueryWrapper<T> wrapper, String orderField, String orderType)
	{
		return addOrderBy(wrapper, orderField, null, orderType, null);
	}	
	
	//待刪除
	
	/** 獲得數(shù)據(jù)庫分頁參數(shù)。返回:[0]=開始索引(from 0) [1]=條數(shù) [2]=頁號(hào)(從1開始) */
	public static int[] getPageParam(Integer pageNo, Integer pageSize)
	{
		int[] result = new int[3];	
			//條數(shù)
		if(pageSize==null || pageSize<1)
			result[1] = 20;
		else if(pageSize > 200)
			result[1] = 200;
		else
			result[1] = pageSize;
			//開始索引
		if(pageNo==null || pageNo<1)
		{
			result[0] = 0;
			result[2] = 1;
		}
		else
		{
			result[0] = (pageNo-1)*result[1];
			result[2] = pageNo;
		}
		return result;
	}
}

7.常量配置

/** 項(xiàng)目的常量定義-業(yè)務(wù)相關(guān) */
public class AppConst
{
	//==== 查詢相關(guān)的參數(shù)
	/** 查詢返回的最大條數(shù)。優(yōu)先級(jí)高于分頁參數(shù),防止返回?cái)?shù)據(jù)太多導(dǎo)致數(shù)據(jù)庫負(fù)擔(dān)過重 */
	public static final int Q_MAX_RESULT			= 1000;
	/** 最大的每頁大小值 */
	public static final int Q_MAX_PER_PAGE			= 100;
	/** 默認(rèn)的每頁大小值 */
	public static final int Q_DEFAULT_PER_PAGE		= 20;
	/** 導(dǎo)出數(shù)據(jù)時(shí)返回的最大條數(shù) */
	public static final int Q_MAX_EXPORT			= 5000;	
	//==== 其它
	public static final String ASC					= "ASC";
	public static final String DESC					= "DESC";
	public static final String PAGE					= "page";		//返回給前端的分頁數(shù)據(jù)參數(shù)名
}

8.controller方法

@GetMapping("/getList")
	@ApiOperation(value="查詢用戶列表", notes="")
	public CommonResponse<Object> getList(
			@ApiParam(name="name", value="名稱(模糊匹配),空表示不限。",defaultValue="超級(jí)") @RequestParam(required=false) String name,
			@ApiParam(name="curPage", value="開始頁數(shù)",defaultValue="1") @RequestParam(required=false) Integer curPage,
			@ApiParam(name="limit", value="每頁條數(shù)",defaultValue="5") @RequestParam(required=false) Integer limit,
			@ApiParam(name="six", value="排序字段",defaultValue="createTime") @RequestParam(required=false) String six,
			@ApiParam(name="order", value="排序方向",defaultValue="desc:降序,asc:升序") @RequestParam(required=false) String order
			)
	{
		CommonResponse<Object> resp = new CommonResponse<Object>();
		 //分頁參數(shù)
		IPage<SupLogUserVO> resultPage = supLogService.getSupLogUser(name,six,order,curPage,limit);
		resp.addData("data", resultPage.getRecords());
		resp.addData("page", QueryPage.of(resultPage));
		return resp;
	}

9.swagger

入?yún)ⅲ?/p>

出參:

10.sql表

DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
  `login_name` varchar(50) NOT NULL COMMENT '登錄名',
  `password` varchar(100) NOT NULL COMMENT '登錄密碼 加密后的密碼',
  `salt` varchar(50) NOT NULL COMMENT '加密用的鹽',
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '賬戶類別 999999=超級(jí)用戶',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '賬戶狀態(tài) ≤0=禁用(0=凍結(jié)),>0=正常',
  `check_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '審核狀態(tài) ≤0=待審核,>0=審核通過',
  `delete_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '刪除標(biāo)志 0=未刪除,1=已刪除',
  `name` varchar(10) NOT NULL COMMENT '姓名',
  `sex` char(1) DEFAULT NULL COMMENT '性別 F=男,M=女',
  `birthday` datetime DEFAULT NULL COMMENT '生日',
  `id_card_num` varchar(50) DEFAULT NULL COMMENT '身份證號(hào)',
  `mobile_phone` varchar(50) DEFAULT NULL COMMENT '手機(jī)號(hào)',
  `email` varchar(50) DEFAULT NULL COMMENT '郵箱',
  `dept_id` int(11) NOT NULL DEFAULT '1' COMMENT '所屬部門',
  `position` varchar(10) DEFAULT NULL COMMENT '職務(wù)',
  `memo` varchar(50) DEFAULT NULL COMMENT '備注',
  `create_user` int(11) DEFAULT NULL COMMENT '創(chuàng)建者 此記錄的創(chuàng)建用戶',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `login_name_UNI` (`login_name`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='用戶';

DROP TABLE IF EXISTS `sup_log`;
CREATE TABLE `sup_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `user_id` bigint(20) NOT NULL COMMENT '用戶ID',
  `operation` varchar(50) NOT NULL COMMENT '操作',
  `method` varchar(100) NOT NULL COMMENT '調(diào)用的方法',
  `param` varchar(500) DEFAULT NULL COMMENT '參數(shù)',
  `client_type` varchar(10) DEFAULT NULL COMMENT '客戶端類型 見枚舉定義',
  `sys_id` varchar(50) DEFAULT NULL COMMENT '訪問的業(yè)務(wù)系統(tǒng) 見枚舉定義',
  `ip` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8 COMMENT='系統(tǒng)訪問日志 記錄訪問日志(只記錄管理相關(guān)日志,其它日志僅記錄到日志文件)';

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能

    SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能

    本文主要講解springboot?+mybatisplus?+?druid?實(shí)現(xiàn)多數(shù)據(jù)源配置功能以及一些必要的準(zhǔn)備及代碼說明,具有一定的參考價(jià)值,感興趣的小伙伴可以借鑒一下
    2023-06-06
  • Java中字符串去重的特性介紹

    Java中字符串去重的特性介紹

    這篇文章主要介紹了Java中字符串去重的特性,是Java8中引入的一個(gè)新特性,至于是否真的用起來順手就見仁見智了...需要的朋友可以參考下
    2015-07-07
  • java的Object里wait()實(shí)現(xiàn)原理講解

    java的Object里wait()實(shí)現(xiàn)原理講解

    這篇文章主要介紹了java的Object里wait()實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring中@Primary注解的作用詳解

    Spring中@Primary注解的作用詳解

    這篇文章主要介紹了Spring中@Primary注解的作用詳解,@Primary 注解是Spring框架中的一個(gè)注解,用于標(biāo)識(shí)一個(gè)Bean作為默認(rèn)的實(shí)現(xiàn)類,當(dāng)存在多個(gè)實(shí)現(xiàn)類時(shí),通過使用@Primary注解,可以指定其中一個(gè)作為默認(rèn)的實(shí)現(xiàn)類,以便在注入時(shí)自動(dòng)選擇該實(shí)現(xiàn)類,需要的朋友可以參考下
    2023-10-10
  • Java異常(Exception)處理以及常見異常總結(jié)

    Java異常(Exception)處理以及常見異??偨Y(jié)

    在《Java編程思想》中這樣定義異常,阻止當(dāng)前方法或作用域繼續(xù)執(zhí)行的問題,雖然java中有異常處理機(jī)制,但是要明確一點(diǎn),決不應(yīng)該用"正常"的態(tài)度來看待異常,這篇文章主要給大家介紹了關(guān)于Java異常(Exception)處理以及常見異常的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • SpringBoot同一個(gè)方法操作多個(gè)數(shù)據(jù)源保證事務(wù)一致性

    SpringBoot同一個(gè)方法操作多個(gè)數(shù)據(jù)源保證事務(wù)一致性

    本文探討了在Spring Boot應(yīng)用中,如何在同一個(gè)方法中操作多個(gè)數(shù)據(jù)源并保證事務(wù)的一致性,由于聲明式事務(wù)的限制,直接使用@Transactional注解無法滿足需求,文章介紹了解決方案:編程式事務(wù),它允許在代碼級(jí)別更靈活地管理事務(wù),確保多數(shù)據(jù)源操作的事務(wù)一致性
    2024-11-11
  • java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法

    java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法

    這篇文章主要介紹了java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法,較為詳細(xì)分析了java視頻格式轉(zhuǎn)換所需要的步驟及具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • springboot調(diào)用python腳本的實(shí)現(xiàn)示例

    springboot調(diào)用python腳本的實(shí)現(xiàn)示例

    本文介紹了在SpringBoot應(yīng)用中調(diào)用Python腳本,包括ProcessBuilder類和ApacheCommonsExec庫兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Java實(shí)現(xiàn)在線預(yù)覽的示例代碼(openOffice實(shí)現(xiàn))

    Java實(shí)現(xiàn)在線預(yù)覽的示例代碼(openOffice實(shí)現(xiàn))

    本篇文章主要介紹了Java實(shí)現(xiàn)在線預(yù)覽的示例代碼(openOffice實(shí)現(xiàn)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java中Array、List、ArrayList的區(qū)別及說明

    Java中Array、List、ArrayList的區(qū)別及說明

    這篇文章主要介紹了Java中Array、List、ArrayList的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

丰镇市| 东光县| 黎平县| 嘉义县| 阿荣旗| 保康县| 萝北县| 柳江县| 青州市| 尉犁县| 西乌珠穆沁旗| 高清| 曲阜市| 沽源县| 洪洞县| 武清区| 京山县| 广宁县| 康乐县| 南平市| 龙岩市| 鹤峰县| 南乐县| 岳池县| 德保县| 肇源县| 宁城县| 东乡| 大姚县| 塘沽区| 南华县| 上杭县| 探索| 保康县| 庄浪县| 宜宾市| 平谷区| 天门市| 从江县| 张掖市| 连城县|