①创建SpringBoot工程

项目目录:

②导入jar包

<!--SpringBoot与mybatis的整合-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version>
</dependency>
<!--连接数据库的驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<!--SpringBoot依赖的测试jar包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

③配置mybatis,数据库连接信息

application.properties配置如下:

mybatis的全局配置如下,主要是声明拦截器

④测试dao层代码

1.编写dao接口

2.编写mapper文件

3.编写拦截器

package com.njupt.mybatisintercept.interceptor;import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;import java.util.Locale;
import java.util.Properties;/*** @author wall* @date 2019/6/20  21:26* @description*/
@Intercepts({@Signature(type = Executor.class,method = "update",args = {MappedStatement.class,Object.class}),@Signature(type = Executor.class,method = "query",args = {MappedStatement.class,Object.class, RowBounds.class, ResultHandler.class})})
public class MybatisInterceptor implements Interceptor {/**正则匹配 insert、delete、update操作*/private static final String REGEX = ".*insert\\\\u0020.*|.*delete\\\\u0020.*|.*update\\\\u0020.*";@Overridepublic Object intercept(Invocation invocation) throws Throwable {//获取执行参数Object[] objects = invocation.getArgs();MappedStatement ms = (MappedStatement) objects[0];BoundSql boundSql = ms.getSqlSource().getBoundSql(objects[1]);String sql = boundSql.getSql().toLowerCase(Locale.CHINA).replace("[\\t\\n\\r]", " ");System.out.println("打印SQL语句"+sql);//如果是insert、delete、update操作 使用主库if (sql.matches(REGEX)) {System.out.println("拦截执行数据库的请求:写请求");} else {//使用从库System.out.println("拦截执行数据库的请求:读请求");}//继续执行逻辑return invocation.proceed();}@Overridepublic Object plugin(Object o) {//获取代理权if (o instanceof Executor){//如果是Executor(执行增删改查操作),则拦截下来return Plugin.wrap(o,this);}else {return o;}}@Overridepublic void setProperties(Properties properties) {//读取mybatis配置文件中属性}
}

⑤测试效果

⑥应用场景:数据库的读写分离

⑦源码地址:https://github.com/FoolishWall/Code-Evolution

SpringBoot集成mybatis拦截器的实现相关推荐

  1. Springboot 自定义mybatis 拦截器,实现我们要的扩展

    前言 相信大家对拦截器并不陌生,对mybatis也不陌生. 有用过pagehelper的,那么对mybatis拦截器也不陌生了,按照使用的规则触发sql拦截,帮我们自动添加分页参数 . 那么今天,我们 ...

  2. SpringBoot教程(十一) | SpringBoot集成Mybatis

    上一篇文章我们介绍了SpringBoot集成JdbcTemplate.简单体验了一下JdbcTemplate框架的用法,今天的内容比较重要,我们来介绍一下SpringBoot集成Mybatis的步骤. ...

  3. SpringBoot----[16]—SpringBoot集成MyBatis

    SpringBoot----[16]-SpringBoot集成MyBatis 集成Mybatis 新建maven project 新建一个maven project,取名为:spring-boot-m ...

  4. SpringBoot集成Mybatis项目实操

    本文为<从零打造项目>系列第三篇文章,首发于个人网站. <从零打造项目>系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 ...

  5. 面试官:你能说说MyBatis拦截器原理吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Format cnblogs.com/fangjian042 ...

  6. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析...

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  7. insert into select 主键自增_springboot2结合mybatis拦截器实现主键自动生成

    点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...

  8. by mybatis 自定义order_springboot2结合mybatis拦截器实现主键自动生成

    点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...

  9. mybatis拦截器添加额外参数

    上一篇中讲了mybatis拦截器的实现 这一篇扩展mybatis在拦截器中添加额外参数 在mybatis的mapper.xml文件中,我们可以使用#{}或${}的方式获取到参数,这些参数都需要提前我们 ...

最新文章

  1. 自动化测试工具的选择
  2. python地图 两点距离_使用Python调用百度地图Api获取两地距离
  3. 用python倒序输出一个字符串_Python字符串逆序输出的实例讲解
  4. http介绍(3)http1.0 和http1.1 区别
  5. 太神奇了!使用C#实现自动核验健康码:(2)OCR识别
  6. C# 搭建自己的NuGet服务器,上传自定义NuGet包
  7. js中字符串和数组的使用
  8. Servlet 文件上传
  9. SAST算法的学习笔记
  10. SpringBoot用HttpClient调用快递物流查询API接口
  11. 语音html浏览器,兼容IE的语音播放
  12. 软件工程毕业设计课题(1)基于python的毕业设计python疫苗预约系统毕设作品
  13. Android基础入门教程——4.1.2 Activity初窥门径
  14. 如何系统地学习linux?
  15. YOLOv5改进之十三:主干网络C3替换为轻量化网络EfficientNetv2
  16. Misc训练笔记(一)
  17. html onload状态事件,HTML onload事件用法及代码示例
  18. WIN API编程的详细介绍
  19. 神经网络主要有三个基本要素:权重、偏置和激活函数
  20. Unity3D-游戏ARVR开发进阶课程 - 动画系统-宋晓波-专题视频课程

热门文章

  1. 甘肃平凉地理信息系统助推智慧城市建设
  2. dreamweaver图片热点工具
  3. 切图转换html,43个PSD转HTML CSS切图教程(英文)
  4. python 数组_python之多维数组(一)
  5. 流量回放工具:goreplay实战
  6. python iba pda_ibapda官方版下载|ibapda软件6.24 官方版_ - 极光下载站
  7. OTA系列小问答:什么是汽车OTA?
  8. Arduino--读取四块G-302(BH1750FVI)的光照强度
  9. midaspay能删除吗_(完整版)midas快捷键
  10. 如何成为一名合格的软件架构师-成长指南