Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件
一、Springboot简介
springboot 是当下最流行的web 框架,Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,让这些框架集成在一起变得更加简单,简化了我们在集成过程中繁琐的模板化配置,springboot的核心特点如下:
1. 独立运行:SpringBoot开发的应用可以以JRA包的形式独立运行,运行一个SpringBoot应用只需通过 java –jar xxxx.jar 来运行;
2. 内嵌容器:SpringBoot内嵌了多个WEB容器,如:Tomcat、Jetty、Undertow,所以可以使用非WAR包形式进行项目部署;
3. 自动starter依赖:SpringBoot提供了一系列的starter来简化Maven的依赖加载。starter是一组方便的依赖关系描述符,它将常用的依赖分组并将其合并到一个依赖中,这样就可以一次性将相关依赖添加到Maven或Gradle中;
4. 自动配置:SpringBoot会根据在类路径中的JAR包和类,自动将类注入到SpringBoot的上下文中,极大地减少配置的使用;
5. 应用监控:SpringBoot提供基于http、ssh、telnet的监控方式,对运行时的项目提供生产级别的服务监控和健康检测;
6. 无代码生成/无需编写XML配置:SpringBoot不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring4.x提倡使用Java配置和注解组合,无需编写任何xml配置即可实现Spring的所有配置功能;
二、Mybatis和Mybatisplus 简介
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis中文网站:https://mybatis.net.cn/
MyBatis blog:https://blog.mybatis.org/
MyBatis 官方网站:https://mybatis.org/mybatis-3/
MyBatis github:https://github.com/mybatis/mybatis-3
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而出现的框架,它对 Mybatis 的基础功能进行了增强,但未做任何改变。
MyBatis-Plus官网:https://baomidou.com/
MyBatis-Plus github:https://github.com/baomidou/mybatis-plus
三、Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件
1、如何自定义分页插件
1)、在MyBatis-Plus 提供了com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect的接口抽象,如果需要自定义一个分页插件,需要先实现该接口,
public class MyDialect implements IDialect {
@Override
public MyDialect buildPaginationSql(String originalSql, long offset, long limit) {
//示例
limit = (offset >= 1) ? (offset + limit) : limit;
String sql = "SELECT * FROM ( SELECT TMP.*, ROW_NUMBER() OVER (ORDER BY 0) ROW_ID FROM ( " +
originalSql + " ) TMP LIMIT " + FIRST_MARK + ") WHERE ROW_ID > " + SECOND_MARK;
return new MyDialect(sql, limit, offset).setConsumerChain();
}
}
2)、实现由MyBatis-Plus 提供的com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor 接口
public class CustomerPaginationInnerInterceptor extends PaginationInnerInterceptor {
@Override
protected IDialect findIDialect(Executor executor) {
return new MyDialect(); //这里也可以自己增加判断,根据不同的数据库类型,使用不同的IDialect 实现
}
}
2、如何自定义sql 占位符修改插件
需要实现MyBatis-Plus 提供的com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor提供的接口,在mybatis-plus中,提供了innerinterceptor拦截器,可以方便地实现拼接查询条件。 innerinterceptor拦截器可以拦截所有的select语句,然后可以对拦截到的sql语句做修改。
public class MyReplacePlaceholderInnerInterceptor implements InnerInterceptor {
public MyReplacePlaceholderInnerInterceptor() {
}
@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
String sql = boundSql.getSql();
//TODO 对SQL 语句做占位符的替换
PluginUtils.mpBoundSql(boundSql).sql(sql);
}
}
3、定义自定义的mybatis的Configuration配置
@Configuration
public class MybatisPlusConfiguration implements InitializingBean { @Autowired
private MybatisPlusInterceptor mybatisPlusInterceptor; @Override
public void afterPropertiesSet() throws Exception { List<InnerInterceptor> targetInterceptors = new ArrayList<>();
MyReplacePlaceholderInnerInterceptor myPlaceholderInnerInterceptor = new MyReplacePlaceholderInnerInterceptor ();
targetInterceptors.add(myPlaceholderInnerInterceptor);
// 先执行MybatisCustomerInterceptor
List<InnerInterceptor> interceptors = mybatisPlusInterceptor.getInterceptors();
interceptors.forEach(innerInterceptor -> {
if (innerInterceptor instanceof PaginationInnerInterceptor) {
// 自定义分页插件
CustomerPaginationInnerInterceptor customerPaginationInnerInterceptor = new CustomerPaginationInnerInterceptor();
customerPaginationInnerInterceptor.setMaxLimit(1000L);
targetInterceptors.add(customerPaginationInnerInterceptor);
}
else {
targetInterceptors.add(innerInterceptor);
}
});
mybatisPlusInterceptor.setInterceptors(targetInterceptors);
}
}
Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件的更多相关文章
- SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作
SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作 1> 数据准备 -- 创建测试表 CREATE TABLE `tb_user` ( `id` ) NOT ...
- SpringBoot集成MyBatis-Plus框架
1.说明 本文介绍Spring Boot集成MyBatis-Plus框架, 重点介绍需要注意的地方, 是SpringBoot集成MyBatis-Plus框架详细方法 这篇文章的脱水版, 主要是三个步骤 ...
- [转]通过继承ConfigurationSection,在web.config中增加自定义配置
本文转自:http://www.blue1000.com/bkhtml/2008-02/55810.htm 前几天写了一篇使用IConfigurationSectionHandler在web.conf ...
- 在WPS绿色版中增加自定义皮肤
在WPS绿色版中增加自定义皮肤小俊的博客:http://xiaojun911.com/WPS绿色版:http://xiaojun911.com/xiazai/469.html小俊精简的WPS2016 ...
- 详解如何在Laravel中增加自定义全局函数
http://www.php.cn/php-weizijiaocheng-383928.html 如何在Laravel中增加自定义全局函数?在我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么 ...
- 教你一招:在PowerPoint中自定义可输入文本的占位符
日常生活中,当我们设计多媒体课件时,默认的版式其实已经够用了.但是,很多时候,我们需要更加个性一点,所以,我们需要自定义很多东西.本文介绍在PowerPoint中自定义可输入文本的占位符. 一.占位符 ...
- SpringBoot集成MyBatis-Plus框架详细方法
1.说明 本文详细介绍Spring Boot集成MyBatis-Plus框架的方法, 使用MySQL数据库进行测试, 包括完整的开发到测试步骤, 从一开始的Spring Boot工程创建, 到MySQ ...
- 在项目中增加自定义icon图标
以MUI框架为例,内容来自于MUI官网. mui如何增加自定义icon图标 mui框架遵循极简原则,在icon图标集上也是如此,mui仅集成了原生系统中最常用的图标:其次,mui中的图标并不是图片,而 ...
- CI 框架中的自定义路由规则
在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...
- XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目
XAF 框架中,如何生成一个自定义参数动作(Action),输入参数的控件可定义? 参考文档:https://documentation.devexpress.com/eXpressAppFramew ...
随机推荐
- 相较于Scrum, 我更推崇精益Kanban,帮助团队建立价值交付流,识别瓶颈问题
最近在学习实践精益Kanban方法,结合自己团队实践Srum的经历,整理些资料二者的差异.相较于Scrum, 我更推崇精益Kaban. Agile是一套理论和原则,就像天边的北极星.Devops是一种 ...
- (占坑编辑中)hexo个人博客主页添加百度搜索资源平台
hexo个人博客主页添加百度搜索资源平台 目的是在百度搜你的网站,可以搜到 配置过程 添加效果: 我的个人博客主页,欢迎访问 我的CSDN主页,欢迎访问 我的简书主页,欢迎访问 我的GitHub主页, ...
- 使用react-test-renderer/shallow写测试
我的项目是采用react + ts来写的,项目中要写单元测试,于是采用了Jest库, 主要用的package有 react-test-renderer react-test-renderer/sha ...
- SpringBoot整合WebService(实用版)
SpringBoot整合WebService 简介 WebService就是一种跨编程语言和跨操作系统平台的远程调用技术 此处就不赘述WebService相关概念和原理了,可以参考:https://b ...
- Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location
错误原因,我猜测多半是版本问题 在router/index.js中添加如下代码 const originalPush = VueRouter.prototype.push VueRouter.prot ...
- 王道oj/problem17
网址:http:oj.lgwenda.com/problem17 思路:指针其实就是存储地址的一个空间,LinkList=LNode* 代码: #define _CRT_SECURE_NO_WARNI ...
- 银河麒麟v10安装达梦数据库
简介 达梦数据库是商业化的国产关系型数据库,体系架构比较像Oracle. 官方在线手册 原生安装 系统版本:银河麒麟V10服务器版 数据库版本:DM8 下载官方安装包,解压后有个ISO文件和包含sha ...
- golang trace view 视图详解
大家好,我是蓝胖子,在golang中可以使用go pprof的工具对golang程序进行性能分析,其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助,鉴于当前对 ...
- 《深入理解Java虚拟机》读书笔记:字节码指令简介
字节码指令简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成.由于Jav ...
- 【JMeter】使用BeanShell写入内容到文件
使用BeanShell写入内容到文件 目录 使用BeanShell写入内容到文件 一.前言 二.提取 三.写入 一.前言 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中.在我们使用J ...