Mybatis-Plus:Sql 注入器(扩展BaseMapper)

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-Plus:Sql 注入器(扩展BaseMapper)相关的知识,希望对你有一定的参考价值。

本节案例承上节案例

1. Sql 注入器

Mybatis-Plus:SQL注入的原理,在Mybatis-Plus中,通过AbstractSqlInjectorBaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行。

那么,如果我们需要扩充BaseMapper中的方法,又该如何实现呢?下面我们以扩展findAll方法为例进行学习。


1.1 编写MyBaseMapper


MyBaseMapper.java

package com.tian.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.List;

public interface MyBaseMapper<T> extends BaseMapper<T> 

    List<T> findAll();

    // 扩展其他的方法

其他的Mapper都可以继承该MyBaseMapper,这样实现了统一的扩展。

如:


1.2 编写mysqlInjector 和 FindAll

如果直接继承AbstractSqlInjector的话,原有的BaseMapper中的方法将失效,所以我们选择继承DefaultSqlInjector进行扩展。

MySqlInjector :

MySqlInjector.java

package com.tian.injectors;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;

import java.util.ArrayList;
import java.util.List;

public class MySqlInjector extends DefaultSqlInjector 

    @Override
    public List<AbstractMethod> getMethodList() 
        List<AbstractMethod> list = new ArrayList<>();

        // 获取父类中的集合
        list.addAll(super.getMethodList());

        // 再扩充自定义的方法
        list.add(new FindAll());

        return list;
    

FindAll:

FindAll.java

package com.tian.injectors;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;

public class FindAll extends AbstractMethod 

    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) 

        String sql = "select * from " + tableInfo.getTableName();
        
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);

        return this.addSelectMappedStatement(mapperClass, "findAll", sqlSource, modelClass, tableInfo);
    


1.3 注册到Spring容器


MybatisPlusConfig.java

    /*** 自定义SQL注入器 */
    @Bean
    public MySqlInjector mySqlInjector() 
        return new MySqlInjector();
    

1.4 测试


SpringbootMybatisplusApplicationTests.java

package com.tian.springbootmybatisplus;

import com.tian.mapper.UserMapper;
import com.tian.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SpringbootMybatisplusApplicationTests 

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testFindAll() 
        List<User> users = this.userMapper.findAll();
        for (User user : users) 
            System.out.println(user);
        
    

运行结果:

生成的sql为:select * from tb_user



以上是关于Mybatis-Plus:Sql 注入器(扩展BaseMapper)的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

Mybatis-plus 自定义SQL注入器查询@TableLogic 逻辑删除后的数据

Mybatis-plus 自定义SQL注入器查询@TableLogic 逻辑删除后的数据

MyBatis-Plus - 一篇带你解决自定义 SQL 注入器失效必杀技

Mybatis-Plus:Sql 注⼊器⾃动填充功能逻辑删除

Mybatis-Plus:Sql 注⼊器⾃动填充功能逻辑删除