tk.mybatis的动态生成sql语句原理

例如tk.mybatis.mapper.common.base.select.SelectMapper接口的方法:

@SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")

List<T> select(T record);

原理:

这里使用BaseSelectProvider,指定的方法dynamicSQL只是为了初始时符合ProviderSqlSource的要求,但其实并不会真实调用。tk.mybatis会对所有的Mapper接口进行扫描封装,统一用MapperFactoryBean进行封装返回。而MapperFactoryBean类则又实现了InitializingBean接口,会在bean创建成功并且所有属性都注入后,将调用afterPropertiesSet()方法,在此方法里将对之前使用@SelectProvider注解并且方法提供者是MapperTemplate子类的方法,进行将ProviderSqlSource替换为DynamicSqlSource(或者是其他SqlSource实现类),从而在后续真正执行数据库操作方法时使用替换后的SqlSource。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值