mybatis-plus框架功能很强大,把很多功能都集成了,比如自动生成代码结构,mybatis crud封装,分页,动态数据源等等,附上官网链接https://mp.baomidou.com/, github上有代码例子,国内小伙伴推荐码云https://gitee.com/baomidou/mybatis-plus。
,但是,其中还是有些小坑,文档也没有涉及的很全面,碰到问题,百度或者发问题,能力强的还是直接看源码好,一切答案都在源码中。
版本推荐用3.1.0,3.1.1及以上版本有bug,访问mapper接口的时候,会把数据库日期类型转换为localDateTime,报错java.sql.SQLFeatureNotSupportedException
解决方案可以参考https://www.jb51.net/article/193995.htm
& lt; dependency> & lt;才能groupId> com.baomidou</groupId> & lt;才能artifactId> mybatis-plus-boot-starter</artifactId> & lt;才能version> 3.1.0</version> & lt;/dependency>
mybatis-plus里有个类QueryWrapper,封装sql对象,包括哪条件,订单排的序,选择哪些字段等等。该类的具体用法,网上教程很多。
这里有个需求,通过前端提交查询条件,后台动态拼接成那里的sql语句,用于查询。常规做法是前端提交一堆查询参数,控制器层用一个对象接收,然后在mybatis的xml里对该对象里的各种属性做判断
& lt; select id=皌est"比; ,select *,得到测试 ,& lt; where> ,& lt; if 测试=?name !=, null 以及name !=, & # 39; & # 39;,“比; 以及才能name=#{名称} ,& lt;/if> ,…… ,& lt;/where> & lt;/select>
这有个问题是具体字段连接类型就有很多,=,祝辞,& lt;等等。当然要实现功能有很多种方式,mybatis-plus的QueryWrapper很强大,可以通过对象的方式进行查询操作,但是不同的页面都自己管自己,效率低下,会存在大量重复代码,所以我就想自己封装一套,从前端的查询条件传固定格式的参数,到后台进行转换,自动拼接成对应的,sql语句,再传到mybatis xml里进行动态查询。这样所有页面就可以统一,便于操作。下面进入正题:
<强>前端强>
前端用的技术是html + jquery, jquery操作dom做各种操作. html就仅仅是样式展现,不涉及任何的逻辑代码,没有使用vue之类的mvvm框架,也没有使用thymeleaf之类的模板引擎,其实这些都会在html嵌入污染代码,导致美工修改页面样式的时候一脸蒙蔽. html就是纯的html + css,通过jquery来完成剩余的工作。
索引。html
& lt; form id=癿yform"比; ,& lt; input name=皀ame"/比; ,& lt; input name=癮ge"/比; ,& lt; input name=皊tartdate"/比; ,& lt; input name=癳nddate"/比; & lt;/form>
jquery发起帖子请求,拼接的参数如下:
var searchParam =, ( ,{列:“COLUMN_NAME",类型:,“like",,值:,“tim"}, ,{列:“COLUMN_AGE",类型:,“eq",,值:,“22”}, ,{列:“COLUMN_DATE",类型:,“ge",,值:,“2019 - 08 - 16,00:00:00"}, ,{列:“COLUMN_DATE",类型:,“le",,值:,“2019 - 08 - 16,23:59:59"} ];
其中列值为数据表的字段名;类型值为sql字段拼接的方式,规则可自己定制;价值就是字段值了;目标拼接成的sql语句如下:
COLUMN_NAME like & # 39; %蒂姆% & # 39;,以及COLUMN_AGE=22,以及COLUMN_DATE>=& # 39; 2019 - 08 - 16,就是# 39;,以及COLUMN_DATE<=& # 39; 2019 - 08 - 16, 23:59:59& # 39;
, jquery发起帖子请求:
. ajax({美元 ,url:“list", 类型:大敌;“post", ,数据:{pageNum: 1、页大小:20,条件:JSON.stringify (searchParam)……(根据需要自己加请求参数)} ,成功:函数(结果){…} });
说明:请求参数条件为什么要传json字符串后续有介绍。
<强>后端强>
<强>控制器强>
控制器接收前端发过来的参数,碰到一个问题,在有多个请求参数的情况下,如何接收集合对象请求参数?使用了很多方法都不行,后续有空再研究下,目前使用的方法简单粗暴,就上传json字符串,后端转换成对象。
控制器:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @RequestMapping (value =,“/list",, method =, RequestMethod.POST) public Object  getTestList (@RequestParam (=name “pageNum",, required =,假,,defaultValue =,“1“), int pageNum, ,,,,,,,,,,,,@RequestParam (=name “pageSize",, required =,假,,defaultValue =,“15”), int 页大小, ,,,,,,,,,,,,@RequestParam (=name “condition", required =, false), String conditionJson), { ,QueryWrapper QueryWrapper =, SearchUtil.parseWhereSql (conditionJson); ,,queryWrapper.orderByDesc (“CREATE_DATE"); ,,return service.getPageTestList (queryWrapper、pageNum pageSize); }mybatis-plus QueryWrapper自定义查询条件的实现