一、Mybatis-Plus。
(1)ActiveRecord。
简介:ActiveRecord 是一种常见的设计模式之一。ActiveRecord 是一种面向对象的数据库操作模式,它将数据库表映射为类,将表中的行映射为对象。在 ActiveRecord 模式中,每个类都对应了数据库中的一张表,而每个实例则代表了该表中的一行数据。通过这种方式,可以直接在实例上调用增删改查方法,来完成与数据库的交互。
注意:虽然在使用 Model 类中的方法时不需要显式地调用 UserMapper 接口或其他 Mapper 接口的方法,但是这些接口仍然是 Model 类方法底层实现所必需的,不能删除。
@Testpublic void testSelectById() {User user = new User();user.setId(2L);User user1 = user.selectById();System.out.println(user1);}@Testpublic void testInsert() {User user = new User();user.setUserName("liubei");user.setPassword("123456");user.setAge(30);user.setName("刘备");user.setMail("liubei@itcast.cn");//调用AR的insert方法进行插入数据boolean insert = user.insert();System.out.println("result => "+insert);}@Testpublic void testUpdateById() {User user = new User();user.setId(13L);//查询条件user.setAge(31);//更新数据boolean result = user.updateById();System.out.println("result => "+result);}@Testpublic void testDelete() {User user = new User();user.setId(13L);boolean delete = user.deleteById();System.out.println("result => "+delete);}@Testpublic void testSelect() {User user = new User();QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.ge("age",30);//大于等于30岁的用户查询出来List<User> userList = user.selectList(wrapper);for (User user1 : userList) {System.out.println(user1);}}
(2)Oracle 主键Sequence。( 没学过oracle,了解即可)
(3)插件。
(3.1) MybatisPlusInterceptor插件主体。
(3.2)mybatis的插件机制。
如果默认支持的拦截器无法满足特定的需求时,也可以在 Executor、ParameterHandler、ResultSetHandler 和 StatementHandler 接口的实现类中编写自定义的方法,并通过拦截器进行拦截和增强。但是这样做需要开发者具备较高的 MyBatis 以及 Java 技术水平以及对 SQL 执行细节的理解。
package mp.plugins;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import java.util.Properties;
@Intercepts({@Signature(type= Executor.class,method = "update",args = {MappedStatement.class,Object.class})})
public class MyInterceptor implements Interceptor {@Override//执行1次public Object intercept(Invocation invocation) throws Throwable {//拦截方法,具体业务逻辑编写的位置return invocation.proceed();}@Override//执行了四次,分别拦截了:Executor、ParameterHandler、ResultSetHandler、StatementHandler这四个对象public Object plugin(Object target) {//创建target对象的代理对象,目的是将当前拦截器加入到该对象中return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {//属性设置}
}
(3.3)防全表更新与删除插件。
注意:该插件仅适用于开发环境,不 适用于生产环境。
注意!
- 多个插件使用的情况,请将分页插件放到
插件执行链
最后面。如在租户插件前面,会出现COUNT
执行SQL
不准确问题。
@Configuration
@MapperScan("mp.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//这里是添加分页查询的拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//这里是添加阻止恶意的全表更新删除的拦截器interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());return interceptor;}//注入自定义的拦截器(插件)@Beanpublic MyInterceptor myInterceptor(){return new MyInterceptor();}
}
(3.4)性能插件(在 Mybatis-Plus 3.4.0 版本中被官方废弃)。
注意:该插件只用于开发环境,不建议生产环境使用。
1、PerformanceInterceptor
类在 Mybatis-Plus 3.4.0 版本中被官方废弃。原因是该拦截器会在每次 SQL 执行时都输出一些日志信息,对性能会有一定的消耗。
2、官方建议使用 p6spy
或者其他 SQL 监控工具来监控 SQL 执行效率,以替代 PerformanceInterceptor
。
3、如果您仍然希望在项目中使用 PerformanceInterceptor
,可以将其版本锁定在 Mybatis-Plus 3.3.2 及以下版本。
(3.5)乐观锁插件。
mybatis的核心xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="@page" value="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor"/></plugin></plugins>
</configuration>
springboot:
@Configuration
@MapperScan("mp.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//这里是添加分页查询的拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//这里是添加阻止恶意的全表更新删除的拦截器interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());//配置乐观锁interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;}//注入自定义的拦截器(插件)@Beanpublic MyInterceptor myInterceptor(){return new MyInterceptor();}
}
<bean class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor" id="optimisticLockerInnerInterceptor"/><bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor"><property name="interceptors"><list><ref bean="optimisticLockerInnerInterceptor"/></list></property>
</bean>