0
点赞
收藏
分享

微信扫一扫

mybatis-plus关于乐观锁、SQL分析插件的应用

灯火南山 2022-03-30 阅读 63
java

1、乐观锁:OptimisticLockerInterceptor,就是在更新数据的时候,根据版本号,来判断是否为更新的版本,若为更新指定的版本一致,则更新,否则则否。
在实体类添加版本号属性,属性上添加注解@Version
数据库字段的版本号必须为int类型,否则更新后不会自增版本
2、SQL分析插件:SqlExplainInterceptor分析是否有垃圾sql执行,有的话会报错拦截


代码
1)添加配置文件
MybatissqlSessionFactory配置下 添加

<property name="plugins">
            <array>
                <!--分页查询-->
                <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></bean>
                <!--乐观锁:用于在更新数据库时会查询数据版本号,若版本号一致,才会更新-->
                <bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"></bean>
                <!--sql执行分析:分析是否有垃圾sql执行,有的话会报错拦截-->
                <bean class="com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor">
                    <property name="sqlParserList">
                        <list>
                            <bean class="com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlParser"></bean>
                        </list>
                    </property>
                </bean>
            </array>
        </property>

2)实体类Admin.java

@TableName("admin")
public class Admin {
    @TableId(value = "admin_account",type = IdType.NONE)
    private String adminAccount;
    private String adminPwd;
    @Version
    private Integer version;
    public Admin() {
    }

    public Admin(String adminAccount, String adminPwd) {
        this.adminAccount = adminAccount;
        this.adminPwd = adminPwd;
    }

    public String getAdminAccount() {
        return adminAccount;
    }

    public void setAdminAccount(String adminAccount) {
        this.adminAccount = adminAccount;
    }

    public String getAdminPwd() {
        return adminPwd;
    }

    public void setAdminPwd(String adminPwd) {
        this.adminPwd = adminPwd;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    public Admin(String adminAccount, String adminPwd, Integer version) {
        this.adminAccount = adminAccount;
        this.adminPwd = adminPwd;
        this.version = version;
    }
}

(3)测试类

public class MyTest {
	/**
     *  乐观锁插件,
     *  1、使用的时候必须要在配置文件中添加
     *  <bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"></bean>
     *  2、在实体类添加版本号属性,属性上添加注解@Version
     *  3、数据库字段的版本号必须为int类型,否则更新后不会自增版本
     */
    @Test
    public void test05(){
        AdminDao bean = applicationContext.getBean(AdminDao.class);
        Admin admin = new Admin();
        admin.setAdminAccount("2333");
        admin.setAdminPwd("5442");
        admin.setVersion(1);
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("admin_account",admin.getAdminAccount());
        int update = bean.update(admin, queryWrapper);
        System.out.println(update);
    }

    /**
     * sql执行分析:分析是否有垃圾sql执行,有的话会报错拦截
     *                 <bean class="com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor">
     *                     <property name="sqlParserList">
     *                         <list>
     *                             <bean class="com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlParser"></bean>
     *                         </list>
     *                     </property>
     *                 </bean>
     */
    @Test
    public void test06(){
        AdminDao bean = applicationContext.getBean(AdminDao.class);
        Admin admin = new Admin();
        admin.setAdminAccount("2333");
        admin.setAdminPwd("5442");
        admin.setVersion(2);
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.or();
        int update = bean.update(admin, queryWrapper);
        System.out.println(update);
    }
}
举报

相关推荐

0 条评论