MyBatis和MyBatis Plus并存問題及解決
前言
Mybatis-plus:Mybatis增強工具,只做增強,不作改變,簡化開發(fā),大大提高了開發(fā)效率。
經(jīng)常會碰到項目原先是采用MyBatis開發(fā),每次增加一張表,要配置實體類、xml文件等,操作上略顯復雜。因此,引入MyBatis Plus,對于新增加的表可以用MyBatis Plus來操作,而原有的表則保持不變,這樣就出現(xiàn)了MyBatis和MyBatis Plus并存的情況。下面以具體的例子來描述再一個原有項目的基礎上如何添加MyBatis Plus。
一、pom.xml文件修改
加入依賴:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.4.1</version> </dependency>
二、application.yml文件修改
原有的MyBatis片段:
mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.qqh.demo.mybatis.bean
只需要將mybatis修改為:mybatis-plus
mybatis-plus: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.qqh.demo.mybatis.bean
三、新增實體類
@Builder @Data @TableName("`user`") public class User { private Long id; private String name; private Integer age; }
四、新增MyBatis Plus Mapper類
public interface UserMapper extends BaseMapper<User> { }
五、新增UserMapperTest類
做完上述幾步改造,已經(jīng)算改造完成,這時候可以添加UserMapperTest測試類進行測試。新增加的測試類代碼如下:
@RunWith(SpringRunner.class) @SpringBootTest public class UserMapperTest { @Autowired private UserMapper userMapper; /** * 查詢測試 */ @Test public void selectListTest() { List<User> userList = userMapper.selectList(null); Assert.assertEquals("user list size 不等于 5",5, userList.size()); } @Test public void insertTest() { userMapper.insert(User.builder().name("qqh1").age(21).build()); userMapper.insert(User.builder().name("qqh2").age(22).build()); userMapper.insert(User.builder().name("qqh3").age(23).build()); userMapper.insert(User.builder().name("qqh4").age(24).build()); userMapper.insert(User.builder().name("qqh5").age(25).build()); } @Test public void updateTest() { userMapper.updateById(User.builder().id(1751458136121847809L).name("xiaohong1-update").build()); } @Test public void deleteTest() { userMapper.deleteById(User.builder().id(1751458136121847809L).build()); } }
六、執(zhí)行測試方法,碰到問題
執(zhí)行測試方法:insertTest,啟動時出現(xiàn)如下問題:
*************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder$AnnotationWrapper.<init>(MybatisMapperAnnotationBuilder.java:686) The following method did not exist: org.apache.ibatis.annotations.Select.databaseId()Ljava/lang/String; The method's class, org.apache.ibatis.annotations.Select, is available from the following locations: jar:file:/D:/mavenRepository/org/mybatis/mybatis/3.5.3/mybatis-3.5.3.jar!/org/apache/ibatis/annotations/Select.class It was loaded from the following location: file:/D:/mavenRepository/org/mybatis/mybatis/3.5.3/mybatis-3.5.3.jar
問題排查:
1.錯誤分析
根據(jù)上述錯誤信息,發(fā)現(xiàn)集中在mybatis-3.5.3.jar,懷疑是jar包版本沖突引起的。
2.依賴分析
對pom.xml中的依賴進行分析,如下圖,發(fā)現(xiàn)mybatis-plus-boot-starter和mybatis-spring-boot-starter引用的mybatis包版本不一致。
3.解決
將mybatis-spring-boot-starter版本從2.1.1升級到2.3.1,使其使用的mybatis版本和mybatis-plus-boot-starter所使用的mybatis版本保持一致,再次運行測試方法insertTest,執(zhí)行成功。查看數(shù)據(jù)庫,如下圖,數(shù)據(jù)已正確插入。
總結
MyBatis Plus確實可以大幅提高開發(fā)效率,上例中的UserMapper不需要寫1行代碼,即可實現(xiàn)增刪改查。
到此這篇關于MyBatis和MyBatis Plus并存問題及解決的文章就介紹到這了,更多相關MyBatis和MyBatis Plus并存內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點
本文介紹了JSON Pointer是字符串表達式,可以非常方便解析復雜JSON節(jié)點值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Spring Cloud服務入口Gateway的介紹和使用問題小結
Spring Cloud Gateway是Spring Cloud的?個全新的API?關項?, 基于Spring + SpringBoot等技術開發(fā), ?的是為了替換掉Zuul,這篇文章主要介紹了Spring Cloud服務入口Gateway的介紹和使用問題小結,需要的朋友可以參考下2025-03-03Failed to execute goal org...的解決辦法
這篇文章主要介紹了Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1的解決辦法的相關資料,需要的朋友可以參考下2017-06-06Java 添加數(shù)字簽名到excel及檢測,刪除簽名
這篇文章主要介紹了Java 添加數(shù)字簽名到excel及檢測,刪除簽名的方法,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-04-04利用JDBC的PrepareStatement打印真實SQL的方法詳解
PreparedStatement是預編譯的,對于批量處理可以大大提高效率. 也叫JDBC存儲過程,下面這篇文章主要給大家介紹了關于利用JDBC的PrepareStatement打印真實SQL的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07