MyBatis和MyBatis Plus并存問(wèn)題及解決
前言
Mybatis-plus:Mybatis增強(qiáng)工具,只做增強(qiáng),不作改變,簡(jiǎn)化開發(fā),大大提高了開發(fā)效率。
經(jīng)常會(huì)碰到項(xiàng)目原先是采用MyBatis開發(fā),每次增加一張表,要配置實(shí)體類、xml文件等,操作上略顯復(fù)雜。因此,引入MyBatis Plus,對(duì)于新增加的表可以用MyBatis Plus來(lái)操作,而原有的表則保持不變,這樣就出現(xiàn)了MyBatis和MyBatis Plus并存的情況。下面以具體的例子來(lái)描述再一個(gè)原有項(xiàng)目的基礎(chǔ)上如何添加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
三、新增實(shí)體類
@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)算改造完成,這時(shí)候可以添加UserMapperTest測(cè)試類進(jìn)行測(cè)試。新增加的測(cè)試類代碼如下:
@RunWith(SpringRunner.class) @SpringBootTest public class UserMapperTest { @Autowired private UserMapper userMapper; /** * 查詢測(cè)試 */ @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í)行測(cè)試方法,碰到問(wèn)題
執(zhí)行測(cè)試方法:insertTest,啟動(dòng)時(shí)出現(xiàn)如下問(wè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
問(wèn)題排查:
1.錯(cuò)誤分析
根據(jù)上述錯(cuò)誤信息,發(fā)現(xiàn)集中在mybatis-3.5.3.jar,懷疑是jar包版本沖突引起的。
2.依賴分析
對(duì)pom.xml中的依賴進(jìn)行分析,如下圖,發(fā)現(xiàn)mybatis-plus-boot-starter和mybatis-spring-boot-starter引用的mybatis包版本不一致。
3.解決
將mybatis-spring-boot-starter版本從2.1.1升級(jí)到2.3.1,使其使用的mybatis版本和mybatis-plus-boot-starter所使用的mybatis版本保持一致,再次運(yùn)行測(cè)試方法insertTest,執(zhí)行成功。查看數(shù)據(jù)庫(kù),如下圖,數(shù)據(jù)已正確插入。
總結(jié)
MyBatis Plus確實(shí)可以大幅提高開發(fā)效率,上例中的UserMapper不需要寫1行代碼,即可實(shí)現(xiàn)增刪改查。
到此這篇關(guān)于MyBatis和MyBatis Plus并存問(wèn)題及解決的文章就介紹到這了,更多相關(guān)MyBatis和MyBatis Plus并存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis 一對(duì)一、一對(duì)多和多對(duì)多查詢實(shí)例代碼
這篇文章主要介紹了mybatis 一對(duì)一、一對(duì)多和多對(duì)多查詢的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點(diǎn)
本文介紹了JSON Pointer是字符串表達(dá)式,可以非常方便解析復(fù)雜JSON節(jié)點(diǎn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Spring Cloud服務(wù)入口Gateway的介紹和使用問(wèn)題小結(jié)
Spring Cloud Gateway是Spring Cloud的?個(gè)全新的API?關(guān)項(xiàng)?, 基于Spring + SpringBoot等技術(shù)開發(fā), ?的是為了替換掉Zuul,這篇文章主要介紹了Spring Cloud服務(wù)入口Gateway的介紹和使用問(wèn)題小結(jié),需要的朋友可以參考下2025-03-03JavaWeb禁止瀏覽器緩存當(dāng)前Web頁(yè)面的方法
所謂瀏覽器緩存,是指當(dāng)?shù)谝淮卧L問(wèn)網(wǎng)頁(yè)時(shí),瀏覽器會(huì)將這些網(wǎng)頁(yè)緩存到本地,當(dāng)下一次再訪問(wèn)這些被緩存的網(wǎng)頁(yè)時(shí),瀏覽器就會(huì)直接從本地讀取這些網(wǎng)頁(yè)的內(nèi)容,而無(wú)需再?gòu)木W(wǎng)絡(luò)上獲取2017-11-11Failed to execute goal org...的解決辦法
這篇文章主要介紹了Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1的解決辦法的相關(guān)資料,需要的朋友可以參考下2017-06-06使用SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問(wèn)題
這篇文章主要介紹了SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01Java 添加數(shù)字簽名到excel及檢測(cè),刪除簽名
這篇文章主要介紹了Java 添加數(shù)字簽名到excel及檢測(cè),刪除簽名的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-04-04利用JDBC的PrepareStatement打印真實(shí)SQL的方法詳解
PreparedStatement是預(yù)編譯的,對(duì)于批量處理可以大大提高效率. 也叫JDBC存儲(chǔ)過(guò)程,下面這篇文章主要給大家介紹了關(guān)于利用JDBC的PrepareStatement打印真實(shí)SQL的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07