本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问.
正文
前一段时间有一些批量操作数据库的复杂业务需要处理, 单靠 SQL 脚本来执行已经十分困难,于是考虑使用 JavaMigration
来操作数据库,以便实现复杂的业务需求,但直接操作 PreparedStatement
又十分繁琐,所以想用 MyBatis 的 Mapper
来操作数据库。
实践时发现没法直接向 JavaMigration
类中注入 MyBatis 的 Mapper
对象。为了避免直接注入 Mapper
对象导致循环依赖的问题,我们需要向 JavaMigration
中注入 SqlSessionFactory
工厂类对象,并开启一段新的 SQL 会话,从中获取需要的 Mapper
类:
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ExampleMigration extends BaseJavaMigration {
@Autowired
private SqlSessionFactory sessionFactory;
@Override
public void migrate(Context context) throws Exception {
try (SqlSession session = sessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
//...
}
}
}
更多内容
- Gradle 即将支持依赖文件分段下载
- AppSmith v1.16 使用体验 | 踩坑记录
- 电脑微信多开小工具正式发布
- Strapi v4 使用体验: 到处是坑 | 踩坑记录
- Nuxt 3 使用体验: 一个优秀的 Web 框架