欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis-Plus Sql 注入器

程序员文章站 2022-10-04 08:21:07
Mybatis+Mybatis-PlusSpring+Mybatis+Mybatis-PlusSpring Boot+Mybatis+Mybatis-PlusMybatis-Plus通用CRUDMybatis-Plus配置Mybatis-Plus条件构造器Mybatis-Plus ActiveRecord模式CRUDMybatis-Plus Oracle 主键SequenceMybatis-Plus插件在Mybatis-Plus中,通过AbstractSqlInjector将Bas.....

在Mybatis-Plus中,通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行。

那么,如果我们需要扩充BaseMapper中的方法,又该如何实现呢?

编写MyBaseMapper

public interface MyBaseMapper<T> extends BaseMapper<T> {

	List<T> findAll();

	// 扩展其他的方法

}

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

如:

public interface UserMapper extends MyBaseMapper<User> {

	User findById(Long id);

}

编写MySqlInjector

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

public class MySqlInjector extends DefaultSqlInjector {

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

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

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

		return methodList;
	}
}

编写FindAll

public class FindAll extends AbstractMethod {

	@Override
	public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
		String sqlMethod = "findAll";
		String sql = "select * from " + tableInfo.getTableName();
		SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
		return this.addSelectMappedStatement(mapperClass, sqlMethod, sqlSource, modelClass, tableInfo);
	}

}

注册到Spring容器

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

测试

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

执行日志

[main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] ==>  Preparing: select * from tb_user 
[main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] ==> Parameters: 
[main] [cn.com.javakf.mapper.UserMapper.findAll]-[DEBUG] <==      Total: 7
 Time:15 ms - ID:cn.com.javakf.mapper.UserMapper.findAll
Execute SQL:
    select
        * 
    from
        tb_user

至此,我们实现了全局扩展SQL注入器。

本文地址:https://blog.csdn.net/weixin_45730091/article/details/107357517