tnblog
首页
视频
资源
登录

spring boot关于mybatis的模糊分页排序查询

3764人阅读 2021/12/21 17:24 总访问:1595779 评论:0 收藏:0 手机
分类: 项目1

本次的基本依赖 jdbc、web、swagger、Lombok、mybatis


pojo、实体


代码

  1. @Data  //Lombok
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class OutPageAndDescMenuDto {
  5.     @ApiModelProperty(value = "菜单id")
  6.     private Integer id;
  7.     @ApiModelProperty(value = "父级Id")
  8.     private Integer parentId;
  9.     @ApiModelProperty(value = "菜单名称")
  10.     private String name;
  11.     @ApiModelProperty(value = "显示名称")
  12.     private String displayName;
  13.     @ApiModelProperty(value = "菜单的链接地址数组")
  14.     private String url;
  15.     @ApiModelProperty(value = "按钮权限id数值字符串")
  16.     private String menuButtonPer_id;
  17.     @ApiModelProperty(value = "排序字段")
  18.     private Integer sortNo;
  19.     //=====================OutPageAndDesc分页排序专用
  20.     @ApiModelProperty(value = "每页的行数")
  21.     private Integer rows;
  22.     @ApiModelProperty(value = "第几页的页数")
  23.     private Integer pages;
  24.     //    排序 SQl
  25.     @ApiModelProperty(hidden = true)
  26.     private String sqlOrder;
  27.     @ApiModelProperty(value = "排序字段元素")
  28.     private List<String> listS;
  29.     @ApiModelProperty(value = "排序字段的升降序元素。0:升、1:降")
  30.     private List<Integer> listI;
  31. }

mapper、接口

  1. @Mapper
  2. @Repository
  3. public interface IMenuMapper {
  4.     Integer addMenu(InputMenuDto inDto);
  5.     Integer delMenu(@Param("Ids") List<Integer> ids);
  6.     @Select("select* from Menu where Id=#{Id}")
  7.     Menu queryMenuById(@Param("Id") Integer id);
  8.     @Select("select* from Menu where parentId=#{parentId}")
  9.     List<Menu> queryMenuByParentId(@Param("parentId") Integer parentId);
  10.     Integer updateMenu(UpdateMenuDto upDto);
  11.     /**
  12.      * 模糊分页排序的接口
  13.      * @param outDto
  14.      * @return
  15.      */
  16.     List<Menu> queryMenuByAll(OutPageAndDescMenuDto outDto);
  17. }

mybatis、与mybatis相关的查询条件映射xml

代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <!--这个是接口路径集dao层-->
  5. <mapper namespace="com.example.demo.mapper.IMenuMapper">
  6.     <!--模糊分页排序查询-->
  7.     <select id="queryMenuByAll" resultType="Menu">
  8.         select <if test="rows!=null">top ${rows}</if> * from Menu
  9.         <where>
  10.             <if test="id!=null">and Id=#{id}</if>
  11.             <if test="parentId!=null">and parentId=#{parentId}</if>
  12.             <if test="name!=null">and name LIKE CONCAT('%',#{name},'%')</if>
  13.             <if test="displayName!=null">and displayName LIKE CONCAT('%',#{displayName},'%')</if>
  14.             <if test="url!=null">and url LIKE CONCAT('%',#{url},'%')</if>
  15.             <if test="menuButtonPer_id!=null">and menuButtonPer_id LIKE CONCAT('%',#{menuButtonPer_id},'%')</if>
  16.             <if test="sortNo!=null">and sortNo LIKE CONCAT('%',#{sortNo},'%')</if>
  17.             <if test="rows!=null and pages!=null">
  18.                 and Id not in(select top(#{rows}*(#{pages}-1))Id from Menu
  19.                 <where>
  20. <!--                    这里的where筛选字段都是上面来的-->
  21.                     <if test="id!=null">and Id=#{id}</if>
  22.                     <if test="parentId!=null">and parentId=#{parentId}</if>
  23.                     <if test="name!=null">and name LIKE CONCAT('%',#{name},'%')</if><!-- 字段 LIKE CONCAT('%',#{字段},'%') 模糊查询的关键-->
  24.                     <if test="displayName!=null">and displayName LIKE CONCAT('%',#{displayName},'%')</if>
  25.                     <if test="url!=null">and url LIKE CONCAT('%',#{url},'%')</if>
  26.                     <if test="menuButtonPer_id!=null">and menuButtonPer_id LIKE CONCAT('%',#{menuButtonPer_id},'%')</if>
  27.                     <if test="sortNo!=null">and sortNo LIKE CONCAT('%',#{sortNo},'%')</if>
  28.                 </where>
  29. <!--                此处用了拼接语句-->
  30.                 <if test="sqlOrder!=null">
  31.                     order by ${sqlOrder})
  32.                 </if>
  33.                 <if test="sqlOrder==null">
  34.                     order by Id)
  35.                 </if>
  36.             </if>
  37.         </where>
  38.         <if test="sqlOrder!=null">
  39.             order by ${sqlOrder}
  40.         </if>
  41.     </select>
  42. </mapper>

此次我对排序字段进行了封装,如下

DescMessage:装返回信息用的模型

  1. /**
  2.  * sql排序方法执行信息
  3.  */
  4. @Data
  5. @NoArgsConstructor
  6. @AllArgsConstructor
  7. public class DescMessage {
  8.     @ApiModelProperty(value = "错误信息")
  9.     private String message = "成功";
  10.     @ApiModelProperty(value = "返回的信息")
  11.     private String data;
  12.     public DescMessage(String data) {
  13.         this.data = data;
  14.     }
  15. }

DescFunction():分解组装排序字段的方法

代码:

  1. @Component
  2. public class DescFunction {
  3.     /**
  4.      * 生成排序的字段方法
  5.      * @param listI 升(0)降序(1)
  6.      * @param listS 排序字段
  7.      * @return
  8.      */
  9.     public DescMessage descFunction(List<Integer> listI, List<String> listS) {
  10.         try {
  11.             if (listS != null) {
  12.                 if (listI == null) {
  13.                     return new DescMessage("失败""报错!没有给排序的字段添加排序的方式,即升降序");
  14.                 }
  15.                 if (listI.size() != listS.size()) {
  16.                     return new DescMessage("失败""报错!排序字段与其升降序字段元素个数要相等");
  17.                 }
  18.                 String sortSql = "";
  19.                 int IdNumber = 0;
  20.                 for (int i = 0; i < listS.size(); i++) {
  21.                     if (listS.get(i).equals("id") || listS.get(i).equals("Id")) {//这是检查是否存在id字段
  22.                         IdNumber++;
  23.                     }
  24.                     sortSql += listS.get(i);
  25.                     if (listI.get(i) == 0) { //0升序
  26.                     }
  27.                     if (listI.get(i) == 1) { //降序
  28.                         sortSql += " desc";
  29.                     }
  30.                     if (i < listS.size() - 1) {
  31.                         sortSql += ",";
  32.                     }
  33.                 }
  34.                 if (IdNumber == 0) {
  35.                     sortSql += ",Id";
  36.                 }
  37.                 return new DescMessage(sortSql);
  38.             }else {
  39.                 return new DescMessage(null);
  40.             }
  41.         } catch (Exception e) {
  42.             return new  DescMessage("失败","报错!"+e.getMessage());
  43.         }
  44.     }
  45. }

server:业务逻辑层

封装了排序字段的代码

  1. @Service
  2. public class MenuServer {
  3.     @Autowired
  4.     private IMenuMapper iMenuMapper;//菜单接口
  5.     @Autowired
  6.     private DescFunction descFunction;//生成排序的字段方法
  7.     /**
  8.      * 菜单单表模糊查
  9.      *
  10.      * @param outDescDto
  11.      * @return
  12.      */
  13.     public RestMessage queryMenuByAll(OutPageAndDescMenuDto outDescDto) {
  14.         try {
  15. //每次排序所需
  16.             DescMessage descMessage = descFunction.descFunction(outDescDto.getListI(), outDescDto.getListS());
  17.             if (descMessage.getMessage().equals("失败")) {
  18.                 return new RestMessage(2000, descMessage.getData());
  19.             } else {
  20.                 outDescDto.setSqlOrder(descMessage.getData());
  21.             }
  22.             List<Menu> menus = iMenuMapper.queryMenuByAll(outDescDto);
  23.             return new RestMessage(menus);
  24.         } catch (Exception e) {
  25.             return new RestMessage(2000"报错!" + e.getMessage());
  26.         }
  27.       }
  28.     }

没有封装排序字段的代码

  1. public RestMessage queryMenuButtonPerByAll(OutPageAndDescMenuButtonPerDto outDescDto) {
  2.     try {
  3.         if (outDescDto.getListS() != null) {
  4.             List<String> listS = outDescDto.getListS();
  5.             List<Integer> listI = outDescDto.getListI();
  6.             if (listI == null) {
  7.                 return new RestMessage(2000"报错!没有给排序的字段添加排序的方式,即升降序");
  8.             }
  9.             if (listI.size() != listS.size()) {
  10.                 return new RestMessage(2000"报错!排序字段与其升降序字段元素个数要相等");
  11.             }
  12.             String sortSql = "";
  13.             int IdNumber = 0;
  14.             for (int i = 0; i < listS.size(); i++) {
  15.                 if (listS.get(i).equals("id") || listS.get(i).equals("Id")) {
  16.                     IdNumber++;
  17.                 }
  18.                 sortSql += listS.get(i);
  19.                 if (listI.get(i) == 0) { //0升序
  20.                 }
  21.                 if (listI.get(i) == 1) { //降序
  22.                     sortSql += " desc";
  23.                 }
  24.                 if (i < listS.size() - 1) {
  25.                     sortSql += ",";
  26.                 }
  27.             }
  28.             if (IdNumber == 0) {
  29.                 sortSql += ",Id";
  30.             }
  31.             String s = sortSql;
  32.             outDescDto.setSqlOrder(sortSql);
  33.         }
  34.         
  35.         List<MenuButtonPer> menuButtonPers = iMenuButtonPerMapper.queryMenuButtonPerByAll(outDescDto);
  36.         return new RestMessage(menuButtonPers);
  37.     } catch (Exception e) {
  38.         return new RestMessage(2000"报错!" + e.getMessage());
  39.     }
  40. }

controller:控制层

  1. @RestController
  2. @Api(tags = "菜单管理")
  3. @RequestMapping("/api/practice/v1" + "/Menu")
  4. public class Menu {
  5.     @Autowired
  6.     private MenuButtonServer menuButtonServer;//按钮服务
  7.     @Autowired
  8.     private MenuButtonPerServer menuButtonPerServer;//按钮权限
  9.     @Autowired
  10.     private MenuServer menuServer;//菜单
  11.     
  12.     @ApiOperation("模糊排序查询菜单")
  13. @GetMapping("/queryMenuByAll")
  14. public RestMessage queryMenuByAll(OutPageAndDescMenuDto outDescDto){
  15.     return menuServer.queryMenuByAll(outDescDto);
  16. }
  17.     }

swagger样式

评价

在idea下搭建spring boot+Spring MVC+thymeleaf

今天大兄弟来讲一下在idea下,使用Spring Boot ,搭建Spring MVC+thymeleaf。在Java开发领域,Spring Boot算得上是一颗耀眼...

spring boot 简单实现jwt

JWT 的原理基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session。token应用流程为:1、初次登录:用...

mybatisspring boot的配置

一、去Maven官方找mybatis相关依赖,MyBatis Spring Boot Starter依赖(版本自己定义)&lt;!-- mybatis是映射ORM--&gt; &lt...

Swagger 在spring boot 的配置

一.创建一个项目,可以直接只添加web 的项目;二.添加swagger的swagger ui 和swagger2:如下1、 在Maven网站搜索springfo...

对于spring boot项目没发现报错,但无法启动的处理

只需要把main函数里面的类容try catch一般就可以发现问题了

spring boot +swagger+token

文章借鉴于://https://www.jianshu.com/p/6e5ee9dd5a61一、pom的相关依赖&lt;!--版本控制2.5.5--&gt; &lt;parent&gt; &l...

spring boot +swagger+mssql +lombok+mybatis的ListDto 参数

一、参数为list实体model时(注意list参数一定要用对应的类型接收传回的参数,不然会报错)接口效果注意list参数默认是必填,...

Mydatis注解增删改查+spring boot

注意本文有更改:在配置文件里只需配数据库即可pom.xml 里面的配置版本看情况,我是直接在io官网下的,这样可以避免很多版...

spring boot配置文件的应用

springboot实例注意参数引用是用$

spring boot 自定义测试类

第一种方式启动类字节码第二中方式

spring boot 自动配置Condition 1(控制@Bean的创建)

条件导入jedis后才创建该bean,如果没导入就不创建该bean1导依赖2创建Condition参数类3创建bean4测试当没有导入bean时,报的错

spring boot 自动配置Condition 2(自定义注解控制@Bean的创建)升级版

1、创建condition的参数类2、自定义注解3、替换判断的注解小结案例根据配置文件的设置来判断是否添加该bean配置文件系统自...

spring boot 自动配置之切换内置服务web

1、修改pom.xml的配置就是把tomcat服务器换成其他服务器,总共有四种服务器2、直接启动

spring boot 获得第三方bean的方法之@ComponentScan

一、创建一个主工程二、创建其他springboot的工程(model)三、在主工程方法上加@ComponentScan然后就能获取了

spring boot @Import注解

一、通过导入Bean的形式1、创建其他springboot的工程(model\第三方库)2、创建一个主工程并添加@Import注解二、通过导入配...

spring boot 获得第三方bean的方发之自定义@Enable

一、创建一个主工程二、创建其他springboot的工程(model)1、创建配置类2、创建自定义注解@EnabUser,此处用到了@Import注...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术