MyBatis-Plus学习-part8 定义全局操作

AutoSqlInjector

BaseMapper提供了17个常用的方法,但是有些需求可能无法很好的实现,MP提供了自定义全局操作来解决这个问题。

mapper接口中定义方法

public interface EmployeeMapper extends BaseMapper<Employee> {
	// 1.在Mapper接口中定义相关的CRUD方法
	// 2.扩展AutoSqlInjector inject方法,实现Mapper接口中方法要注入的SQL
	// 3.在MP的全局策略中,配置自定义注入器
	
	//希望这个方法启动过的时候自动注入
	//之前需要在xml中进行配置的SQL语句,现在通过AutoSqlInjector在加载mybatis环境时就注入
	int deleteItemById(int id);
}

编写自定义的注入类

public class MyInjector extends AutoSqlInjector {
	/**
	 *  扩展inject方法
	 */
	@Override
	public void inject(Configuration configuration, MapperBuilderAssistant builderAssistant, Class<?> mapperClass,
			Class<?> modelClass, TableInfo table) {
		System.out.println("自定义injector执行,mapperClass = " + mapperClass.getName());
		//将EmployeeMapper中定义的deleteAll,处理成对应的MappedStatement对象,加入到configuration对象中。
		
		String sql="delete from " + table.getTableName() + " where id=#{id}";
		//要注入的方法名 一定要与EmployeeMapper接口中的方法名一致
		String method="deleteItemById";
		//构造sqlSource对象
		SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
		
		this.addDeleteMappedStatement(mapperClass, method, sqlSource);
	}
}

配置文件中进行配置

<!-- 定义自定义注入器 -->
	<bean id="myInjector" class="com.ezerbel.mp.injector.MyInjector"></bean>
<bean id="mpGlobalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
	<!-- 表名、字段名、是否使用下划线命名(默认 true: 数据库下划线命名) -->
	<property name="dbColumnUnderline" value="true"></property>
	<!-- 全局的主键策略 -->
	<property name="idType" value="0"></property>
	<!-- 全局的表前缀配置 -->
	<property name="tablePrefix" value="tb_"></property>
	<!-- 注入自定义的全局操作 -->
	<property name="sqlInjector" ref="myInjector" ></property>
</bean>

测试

public class TestInjector {
	ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	EmployeeMapper employeeMapper = ctx.getBean("employeeMapper", EmployeeMapper.class);
	UserMapper  userMapper = ctx.getBean("userMapper",UserMapper.class);
	@Test
	public void testMySqlInjector1() {
		employeeMapper.deleteItemById(1);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值