美文网首页Spring BootJava
MyBatisPlus 3.x 插件

MyBatisPlus 3.x 插件

作者: BzCoder | 来源:发表于2018-10-09 00:29 被阅读560次

    相关资料以及注意事项:

    简介

    插件顾名思义就是为了方便用户使用功能上的一些拓展。
    配置方法可以参考Sample工程的applicationContext.xml

     <property name="plugins">
                <list>
                    <!--注册分页插件-->
                    <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
                    <!--SQL执行分析插件-->
                    <bean class="com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor"/>
                    <!--SQL性能分析-->
                    <bean class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor">
                        <property name="maxTime" value="100"/>
                        <!--SQL是否格式化 默认false-->
                        <property name="format" value="true"/>
                    </bean>
                    <!--乐观锁插件-->
                    <bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"/>
                    <!--逻辑删除插件-->
    
                </list>
            </property>
    

    非法SQL语句拦截器 IllegalSQLInterceptor

    拦截SQL类型的场景
     * 1.必须使用到索引,包含left jion连接字段,符合索引最左原则
     * 必须使用索引好处,
     * 1.1 如果因为动态SQL,bug导致update的where条件没有带上,全表更新上万条数据
     * 1.2 如果检查到使用了索引,SQL性能基本不会太差
     * <p>
     * 2.SQL尽量单表执行,有查询left jion的语句,必须在注释里面允许该SQL运行,否则会被拦截,有left jion的语句,如果不能拆成单表执行的SQL,请leader商量在做
     * http://gaoxianglong.github.io/shark/
     * SQL尽量单表执行的好处
     * 2.1 查询条件简单、易于开理解和维护;
     * 2.2 扩展性极强;(可为分库分表做准备)
     * 2.3 缓存利用率高;
     * <p>
     * 2.在字段上使用函数
     * 3.where条件为空
     * 4.where条件使用了 !=
     * 5.where条件使用了 not 关键字
     * 6.where条件使用了 or 关键字
     * 7.where条件使用了 使用子查询
    

    乐观锁插件 OptimisticLockerInterceptor

    启用乐观锁功能。需要在数据表中添加一行version,并且添加@Version注解。
    实体类:

      @Version
      private Integer version;
    

    逻辑删除 LogicSqlInjector

    在数据表中加入deleted,默认1为已删除,0为未删除。在配置文件中加入logicalDelInjector

     <property name="globalConfig">
                <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
                    <property name="dbConfig">
                        <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
                            <!--主键规则-->
                            <property name="idType" value="AUTO"/>
                            <!--表前缀-->
                            <property name="tablePrefix" value="tbl_"/>
                        </bean>
                    </property>
                    <property name="sqlInjector" ref="logicalDelInjector"/>
                </bean>
            </property>
     <bean id="logicalDelInjector" class="com.baomidou.mybatisplus.extension.injector.LogicSqlInjector"/>
    

    在实体类中加入deleted字段并添加 @TableLogic注解

      @TableLogic
        private Integer deleted;
    

    分页插件 PaginationInterceptor:

    启用后会启用真实分页,即加上了Limit语句,否则是内存分页。

    性能分析插件 PerformanceInterceptor:

    启用后会加上SQL语句效率分析。会在控制台打印出运行时间。


    打印参数

    执行分析插件 SqlExplainInterceptor:

    拦截一些整表操作,在生产环境需要关闭。

    自动填充

    可以在插入表和更新表的时候自动填充设定的数值
    配置类实现MetaObjectHandler

    package com.bzcoder.test;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    /**
     * 自定义公共字段处理器
     * @author: BaoZhou
     * @date : 2018/10/8 22:41
     */
    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
    
        /**
         * 插入操作自动填充
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            LOGGER.info("start insert fill ....");
            this.setFieldValByName("age", 99, metaObject);
        }
    
        /**
         * 更新操作自动填充
         */
        @Override
        public void updateFill(MetaObject metaObject) {
            LOGGER.info("start update fill ....");
            this.setFieldValByName("age", 98, metaObject);
        }
    }
    

    配置文件加入MyMetaObjectHandler

     <property name="globalConfig">
                <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
                    <property name="dbConfig">
                        <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
                            <!--主键规则-->
                            <property name="idType" value="AUTO"/>
                            <!--表前缀-->
                            <property name="tablePrefix" value="tbl_"/>
                        </bean>
                    </property>
                    <!--逻辑删除-->
                    <property name="sqlInjector" ref="logicalDelInjector"/>
                    <!--公共字段填充处理器-->
                    <property name="metaObjectHandler" ref="myMetaObjectHandler"/>
                </bean>
            </property>
    
      <bean id="myMetaObjectHandler" class="com.bzcoder.test.MyMetaObjectHandler"/>
    

    相关文章

      网友评论

        本文标题:MyBatisPlus 3.x 插件

        本文链接:https://www.haomeiwen.com/subject/xxidaftx.html