MybatisPus核心知识学习总结(九)自定义全局操作

八、自定义全局操作

8.1.自定义全局实例

自定义全局操作,就是将我们需要的sql在项目启动的时候就注入到全局中,操作步骤如下:

  • 在Mapper接口中定义我们需要注入的方法;
  • 扩展AutoSqlInjector中的inject方法,实现Mapper中我们自定义方法要注入的sql;
  • 最后,在全局配置中,配置我们自定义的注入器即可;

第一步:mapper中定义方法

public interface UserMapper extends BaseMapper<User> {

    int deleteAll();
}

第二步:重写inject方法

public class MySqlInjector  extends AutoSqlInjector {

    @Override
    public void inject(Configuration configuration, MapperBuilderAssistant builderAssistant, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
        // 构造sql语句
        String sql = "delete from " + table.getTableName();
        // 构造方法名
        String method = "deleteAll";
        // 构造SqlSource对象
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        // 构造一个删除的MapperStatement
        this.addDeleteMappedStatement(mapperClass,method,sqlSource);
    }
}ß

第三步:注入自定义配置

<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
     <!--映射数据库下划线字段名到数据库实体类的驼峰命名的映射-->
     <property name="dbColumnUnderline" value="true"></property>
     <!-- 全局的主键策略 -->
     <property name="idType" value="0"></property>
     <!-- 全局的表前缀策略配置 -->
     <property name="tablePrefix" value="tbl_"></property>
     <!--注入自定义全局操作-->
     <property name="sqlInjector" ref="mySqlInjector"></property>
</bean>
<bean class="com.luo.injector.MySqlInjector" id="mySqlInjector"></bean>

测试

ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");

private UserMapper userMapper = ioc.getBean("userMapper",UserMapper.class);

@Test
public void testInject(){
    int rs = userMapper.deleteAll();
}

8.2.逻辑删除

所谓逻辑删除,就是不真正的删除数据的记录,而是变为无效状态,在MybatisPlus中,给我们提供logicSqlInjector

第一步:数据库添加逻辑字段

第二步:实体类添加对应属性和注解

@TableLogic
private Integer logicFlag;

第三步:MybatisPlus全局配置中加入logicSqlInjector

<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
    <!--映射数据库下划线字段名到数据库实体类的驼峰命名的映射-->
    <property name="dbColumnUnderline" value="true"></property>
    <!-- 全局的主键策略 -->
    <property name="idType" value="0"></property>
    <!-- 全局的表前缀策略配置 -->
    <property name="tablePrefix" value="tbl_"></property>
    <!--注入自定义全局操作-->
    <property ref="logicSqlInjector" name="sqlInjector"></property>
    <!--注入逻辑删除全局值-->
    <property name="logicDeleteValue" value="-1"></property>
    <property name="logicNotDeleteValue" value="1"></property>
</bean>
<!--逻辑删除-->
<bean class="com.baomidou.mybatisplus.mapper.LogicSqlInjector" id="logicSqlInjector"></bean>

测试

@Test
public void testLogin(){
    Integer integer = userMapper.deleteById(1);
}

说明:我们做的是删除操作,但是,执行的却是update操作,同时,查询的时候自动添加了有效判断

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值