在 SpringBoot 中使用 JPA 的 Mybatis
Mybatis with JPA in SpringBoot
我正在尝试使用 JPA (@CrudRepository),但我还想用 Mybatis 创建我的自定义控制器。
我有那个工作,但问题是,例如在程序中,它们不能一起工作。
是否可以实现JPA与Mybatis协同工作?
看了很多书,明白Mybatis不是ORM。一些博客表明这是可能的,但不是如何。
我认为这根本不是个好主意。使用其中之一。
我可以想象你可以让它工作,但你不能在相同的表之上使用它们或对两个持久性框架使用事务管理。
所以如果你有这样的用例(你没有解释任何),我认为你的应用程序应该分成两个单独的服务。 (可选)考虑将您的存储分成两个单独的数据库实例。
可以在Spring事务下同时管理JPA和mybatis。事实上,它们都可以在同一个事务中一起回滚。但是,请注意副作用,例如:
例如
在同一笔交易中:
// Perform insert and expect id to be returned
TableA tableA = new TableA();
jpaRepositoryForTableA.save( tableA );
// Use the tableA in the next mybatis mapper
TableB tableB = new TableB();
tableB.setTableAId( tableA.getId() );
this.mapper.saveTableB( tableB )
在上面的场景中,TableB 将无法获取 TableA 的 ID。
我正在尝试使用 JPA (@CrudRepository),但我还想用 Mybatis 创建我的自定义控制器。
我有那个工作,但问题是,例如在程序中,它们不能一起工作。
是否可以实现JPA与Mybatis协同工作?
看了很多书,明白Mybatis不是ORM。一些博客表明这是可能的,但不是如何。
我认为这根本不是个好主意。使用其中之一。
我可以想象你可以让它工作,但你不能在相同的表之上使用它们或对两个持久性框架使用事务管理。
所以如果你有这样的用例(你没有解释任何),我认为你的应用程序应该分成两个单独的服务。 (可选)考虑将您的存储分成两个单独的数据库实例。
可以在Spring事务下同时管理JPA和mybatis。事实上,它们都可以在同一个事务中一起回滚。但是,请注意副作用,例如:
例如
在同一笔交易中:
// Perform insert and expect id to be returned
TableA tableA = new TableA();
jpaRepositoryForTableA.save( tableA );
// Use the tableA in the next mybatis mapper
TableB tableB = new TableB();
tableB.setTableAId( tableA.getId() );
this.mapper.saveTableB( tableB )
在上面的场景中,TableB 将无法获取 TableA 的 ID。