Mybatis-Plus:Sql 注入器(扩展BaseMapper)
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-Plus:Sql 注入器(扩展BaseMapper)相关的知识,希望对你有一定的参考价值。
1. Sql 注入器
Mybatis-Plus:SQL注入的原理,在Mybatis-Plus
中,通过AbstractSqlInjector
将BaseMapper
中的方法注入到了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 注入器失效必杀技