浅谈MyBatis-Plus学习之自定义全局操作及逻辑删除

一、自定义全局操作介绍

MP中提供扩展AutoSqlInjector可以自定义各种想要的 sql ,注入到全局中,相当于自定义MP 自动注入的方法。
也就是说继承BaseMapper<T>接口时就带有的方法,在加载相应的配置环境时就会注入。

二、实现自定义全局操作如下

2.1、在实现的Mapper接口中定义方法

public interface EmployeeMapper extends BaseMapper<Employee> {

    /**
     * 自定义注入方法
     * @return
     */
    int deleteAll();
}

2.2、继承AutoSqlInjector,并重写内部的inject方法

public class DeleteAllInject extends AutoSqlInjector{
    @Override
    public void inject(Configuration configuration, MapperBuilderAssistant builderAssistant, Class<?> mapperClass,
            Class<?> modelClass, TableInfo table) {
        /**
         * 核心就是将sql语句和mapper接口中的方法进行映射
         * 封装成一个MapperStatement对象
         * 然后初始化时Configuration对象自动加载
         */
        String sql = "delete from " + table.getTableName();
        String method = "deleteAll";
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        this.addDeleteMappedStatement(mapperClass, method, sqlSource);
    }
}

2.3、最后在将该Bean注入到全局配置策略中

    <!-- mybatis-plus全局配置策略 ,这样避免重复在每一个实体中使用注解进行配置-->
    <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <property name="dbColumnUnderline" value="true"></property>  <!-- 2.3版本后默认配置数据库下划线-->
        <!-- 指定数据库ID生成策略   0:数据库自增-->
        <property name="idType" value="0"></property>
        <!-- 指定数据库表前缀 -->
        <property name="tablePrefix" value="tbl_"></property>
        <!-- 注入全局配置方法 -->
        <property name="sqlInjector" ref="deleteAllInject"></property>
    </bean>

     <bean id="deleteAllInject" class="cn.hjj.mp.inject.DeleteAllInject"></bean>

2.4、测试代码如下

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestAutoSqlInject {
    @Autowired
    private EmployeeMapper employeeMapper;

    @Test
    public void testDeleteAll() {
        employeeMapper.deleteAll();
    }
}

三、逻辑删除简介

逻辑删除:就是并不是真正的将数据从数据库中删除,因为数据是宝贵的。只是将数据库中的该删除的记录的逻辑删除字段设置为删除状态

四、实现逻辑删除操作如下

4.1、创建一个新的实体,并在对应的数据库中创建相应的表数据

注意标志字段要使用@TableLogic标识告诉MP知道哪个是标识字段

public class User {
     @TableId(type=IdType.AUTO)
     private Integer id;
     private String name;
     @TableLogic  //标志是一个逻辑标识符号
     private Integer deleteFlag;

         // get Methods
         // set Methods

}    

4.2、在配置文件中进行配置相应的Bean以及参数

applicationContext.xml

    <!-- mybatis-plus全局配置策略 ,这样避免重复在每一个实体中使用注解进行配置-->
    <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <property name="dbColumnUnderline" value="true"></property>  <!-- 2.3版本后默认配置数据库下划线-->
        <!-- 指定数据库ID生成策略   0:数据库自增-->
        <property name="idType" value="0"></property>
        <!-- 指定数据库表前缀 -->
        <property name="tablePrefix" value="tbl_"></property>
        <!-- 注入逻辑删除 -->
        <property name="sqlInjector" ref="logicSqlInjector"></property>
        <!-- 逻辑删除全局值 -->
        <property name="logicDeleteValue" value="-1"></property>
        <!-- 逻辑未删除全局值 -->
        <property name="logicNotDeleteValue" value="1"></property>
    </bean>
    <!-- 配置逻辑删除注入的Bean -->
    <bean id="logicSqlInjector" class="com.baomidou.mybatisplus.mapper.LogicSqlInjector"></bean>

4.3、测试代码如下

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestLogicDelete {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testDelete() {
        Integer res = userMapper.deleteById(1);
        System.out.println("res: " + res);
    }

    @Test
    public void testSelect() {
        User user = userMapper.selectById(1);
        System.out.println("res: " + user);
    }
}

本质:会在进行删除和查询的时候的时候附带逻辑删除字段,删除操作其实是一个更新语句,将当前要删除的记录的逻辑状态更新为配置的“逻辑删除全局值”

原文地址:https://www.cnblogs.com/jayhou/p/9825443.html

时间: 2024-10-06 00:38:37

浅谈MyBatis-Plus学习之自定义全局操作及逻辑删除的相关文章

浅谈设计模式的学习(下)

时间过得真快啊,不知不觉又要周末了,借这个周末时间.把<浅谈设计模式的学习(下)>补上吧. 在<浅谈设计模式的学习(中)>中,说到了保持抽象的思维.接下来说一下第四点,做一个分享,也记录一下自己的学习历程. 4.学习设计模式,就不要把它看的太认真    设计模式是一个编程思想,它不是具体的代码套路.举个例子说明一下: 由于家传,接触到了一些中国的传统武术.当我与那些不懂传统武术的人交流的时候,他们总是认为中国的传统武术都是些套路.花架子,只是用来好看.在他们认为,两人打架,别人出拳

浅谈设计模式的学习(中)

在<浅谈设计模式的学习(上)>中我说到了设计模式的基石-----抽象思维.为什么需要抽象思维呢?因为越抽象就越不容易出错,就像有些领导人说话:坚持改革开放.但怎么算坚持改革开放呢,没有具体的标准,因事而异,所以就不容易违背这个坚持改革开放的原则了. 3.学习设计模式,要保持抽象的思维     什么是抽象思维呢?真的不好说,抽象的东西往往难以说明白,听了也难以搞明白,还是通过具体的例子来说吧 有这么一个学生请假的场景,如果请假时间一天以内则有班长批准就可以了,三天以内则需要老师批准,超过三天就得

浅谈设计模式的学习(上)

作为一个开发人员,能写出一个漂亮可扩展的代码,绝对是一件令人愉快的事情.那设计模式就是一门必修课! 本文就自己学习设计模式的一点经历做一个记录. 本人在读大学时,为了学习设计模式就买了一本<java与模式>的数据,书籍有一千多页很重.而且价格不菲.没办法,花那么多钱买的不看岂不浪费.于是每天早上读一章,坚持几个月我终于读完了.这几个月真是煎熬啊,几个月下来,回忆一下似乎自己真得也没收获到什么,很悍然啊.难道是书籍不好吗还是我读的不认真?其实在我现在看来都不是.而为什么读完了却什么也没收获到呢?

【数学教学论文】浅谈小学生数学学习兴趣的培养

浅谈小学生数学学习兴趣的培养 作者:刘亚儒 摘要:古代教育家朱熹曾说:"教人未见其兴趣,必不乐学."由此可见,兴趣的培养在教学过程中至关重要,有利于提高数学课堂的教学效率和学生的学习质量.因此,本文对如何培养学生数学学习兴趣进行了进一步探讨. 关键词:小学生:数学:兴趣培养 一.兴趣在小学生数学学习中的重要性 孔子说过:"知之者不如好之者,好之者不如乐之者."所谓"乐",其实就是我们所说的"喜欢",即兴趣.学习兴趣是学生学习的

浅谈mybatis如何半自动化解耦和ORM实现

在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大致架构总结为下图: 1.根据Mybatis源码,将其抽象为三层:基础支持层,核心处理层和接口层 2.基础支持层包括:数据源.事务管理.日志.类型转换.缓存.Bind.解析器等 3.核心处理层包括:配置解析.配置映射.SQL解析.SQL执行.结果集映射.插件等 4.接口层主要提供JAVA API 在本

浅谈Mybatis(三)

一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,birthday </sql> <select id="queryUserById" resultType="User"> <include refid="SELECT_T_USER"/> from t_user whe

浅谈MyBatis缓存

在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载. lazyLoadingEnabled.aggressiveLazyLoading 什么是查询缓存 Mybatis的一级缓存是指SqlS

浅谈身为小白学习Linux系统的四点实用建议

游戏.办公.安全,可以总结为是方便当代人们在生活中的刚需,我们大都是这些服务的使用者,而把单个功能整合起来那就必须谈到互联网,自然而然通过互联网要将Service发送给Service management,经过Service management的处理将结果反馈给使用者,整个过程下来总结为:发送请求.处理请求.反馈请求,这就是一切方便用户,用户只需要发送和接收反馈,而中间的网络传输和服务的处理就交给网络运营商和服务运营商,根据我们的标题,我们这次来简谈下服务运营商端是怎么处理相对复杂的服务请求.

浅谈Mybatis通用Mapper使用方法_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在对应工程的pom.xml文件中添加 <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1