日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Springboot Mybatis-Plus數據庫單元測試實戰(三種方式)

瀏覽:31日期:2023-04-02 08:56:59

  單元測試長久以來是熱門話題,本文不會討論需不需要寫單測,可以看看參考資料1,我個人認為寫好單測應該是每個優秀開發者必備的技能,關于寫單測的好處在這里我就不展開討論了,快速進入本文著重討論的話題,如何寫好數據庫單測。

  為什么要寫數據庫單測? 相信大家是不是有這樣類似的經歷,在寫完復雜的sql語句后,自信滿滿的提測,發現很大一部分Bug都是因為sql語句出現問題了,要么少寫逗號,要么漏了字段,悔不當初哇,為啥寫完不多測測呢!

  沒關系!這就教你如何寫數據庫單測,讓你輕松告別數據庫相關bug。

1. 數據庫樣例和環境

  我們以用戶表為例開啟本次教程:

Springboot Mybatis-Plus數據庫單元測試實戰(三種方式)

圖1.1 用戶表ER圖

  引入mybatis-plus插件后,mapper類如下:

@Mapperpublic interface UserMapper extends BaseMapper<UserDO> {}

  整體環境:

spring boot: 1.5.18.RELEASE mybatis: 3.5.1 mybatis plus:3.4.0(此時最新版本,我們會用到最新版本的特性)

  在這里我們直接測試的是mybatis plus提供的一些CRUD,當然這些CRUD一般都不會錯,實際項目中我們只需對自定義的SQL進行單元測試即可。

2. 方式一:啟動整個環境

  這種方式應該是日常環境使用最多的,利用SpringBoot自1.4.0版本開始引入的@SpringBootTest注解可以啟動我們單元測試所需要的所有環境,當然,如果你項目中運用了其他分布式服務,他同樣也會啟動這些服務。單測代碼如下:

@RunWith(SpringRunner.class)@SpringBootTestpublic class UserMapperTest { @Autowired private UserMapper userMapper; @Test public void testCurd() { UserDO userDO = new UserDO(); userDO.setId(7777L); userDO.setGmtModified(new Date()); userDO.setGmtCreate(new Date()); userDO.setRealName('ke'); userDO.setUserName('ni'); userMapper.insert(userDO); UserDO select = userMapper.selectById(1); System.out.println(select); }}

@SpringBootTest注解可以設置需要啟動加載的類,按需加載

3. 方式二:只啟動數據庫環境+遠程數據庫

  在參考資料2中,最新的mybatis-plus發布版本(3.4.0)中引入了test starter,如圖:

Springboot Mybatis-Plus數據庫單元測試實戰(三種方式)

圖3.1 Mybatis-plus3.4.0引入test模塊

  模塊引入了新的注解@MybatisPlusTest,這個注解可以幫助我們只啟動特定特定的模塊,直接上單測代碼:

@RunWith(SpringRunner.class)@MybatisPlusTest@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)public class UserMapperTest { @Autowired private UserMapper userMapper; @Test public void testCurd() { UserDO userDO = new UserDO(); userDO.setId(7777L); userDO.setGmtModified(new Date()); userDO.setGmtCreate(new Date()); userDO.setRealName('ke'); userDO.setUserName('ni'); userMapper.insert(userDO); UserDO select = userMapper.selectById(1); System.out.println(select); }}

  是不是很輕松?不過我們要注意如下幾點關鍵點:

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)的作用是使用自定義的數據源,而非使用自動配置的嵌入式內存數據源 如果你在項目正在使用類似于druid的連接池,在test模塊的時候需要在application配置文件里面直接使用jdbc數據源即可,因為@MybatisPlusTest注解不會啟動連接池框架,典型的配置文件application.yml如下:

spring: datasource: url: jdbc:mysql://xxx.xxx.1.110:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8 username: root password: 1234564. 方式三:只啟動數據庫環境+本地數據庫

  在方式二的基礎上,進行如下步驟:

我們去掉@AutoConfigureTestDatabas注解,直接啟動測試嵌入式數據庫即可,在這里我們選用H2內存數據庫,首先在pom中引入H2 database maven依賴; 然后后在test環境下引入sechema.sql文件,這個文件是用來初始化數據庫的,核心是創建表格語句; 最后去掉這個頁面以后寫法和方式二一樣,在這里就不給出

注意: sechema.sql文件要符合嵌入式數據庫的語法,在本例中為h2數據庫,如果你正在使用mysql數據庫,則需要把mysql的數據庫語法轉換為h2的數據庫語法。

5. @MybatisPlusTest注解原理

  如果你之前使用過MyBatis-Spring-Boot-Starter-Test中的@MybatisTest(參考資料3)的話,你會發現@MybatisPlusTest注解原理與之類似,都是限制spring boot的自動配置(參考資料4),只需要加載特定的配置即可。我們來看一下注解源碼:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@BootstrapWith(MybatisPlusTestContextBootstrapper.class)@ExtendWith({SpringExtension.class})@OverrideAutoConfiguration( enabled = false)@TypeExcludeFilters({MybatisPlusTypeExcludeFilter.class})@Transactional@AutoConfigureCache@AutoConfigureMybatisPlus@AutoConfigureTestDatabase@ImportAutoConfigurationpublic @interface MybatisPlusTest { String[] properties() default {}; boolean useDefaultFilters() default true; Filter[] includeFilters() default {}; Filter[] excludeFilters() default {}; @AliasFor( annotation = ImportAutoConfiguration.class, attribute = 'exclude' ) Class<?>[] excludeAutoConfiguration() default {};}

@OverrideAutoConfiguration(enabled = false)是關鍵,它關閉了自動配置,而一般在spring boot項目中enable是開啟的;

@AutoConfigureMybatisPlus注解是自定義注解,這個注解定義了加載所有所需的加載類,在spring.factories里面聲明了要自動配置的類:

# AutoConfigureMybatis auto-configuration importscom.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus=org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

@AutoConfigureTestDatabase注解表明使用的是內存數據庫而不是真實數據庫

  有了這些限制和規定以后,mybatis-plus在測試環境內就可以自動加載所需要的的配置了,這樣就去除了非必要資源的加載。

6. 總結

Springboot Mybatis-Plus數據庫單元測試實戰(三種方式)

圖6.1 三種數據庫單測總結

  如果你正在使用mysql數據庫,我推薦使用方式二。如果你能解決mysq語法轉h2的問題,推薦使用方式三,這樣在離線的情況也可以進行單測,不需要連接遠程數據庫。

PS:如果你有好的工具來完成mysql轉換h2的話可以在評論區里面推薦一下,我這邊找了好久,包括自定義寫轉換、一些專業工具等,感覺對navicat導出的語句作轉換不是很好好用。

7.參考資料

[1] 你真的需要單元測試嗎?[2] Mybatis-Plus發布版本[3] MyBatis-Spring-Boot-Starter-Test[4] SpringBoot四大神器之auto-configuration

到此這篇關于Springboot Mybatis-Plus數據庫單元測試實戰(三種方式)的文章就介紹到這了,更多相關Springboot Mybatis-Plus單元測試內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品在线观看国产| 亚洲va中文在线播放免费| 在线 亚洲欧美在线综合一区| 欧美日韩水蜜桃| 日韩高清欧美| 久久久精品日韩| 亚洲先锋成人| 99热精品在线| 综合激情在线| 97久久中文字幕| 欧美韩一区二区| 91日韩免费| 久久中文字幕二区| 美女国产精品| 欧美日韩一区二区国产| 久久精品国产亚洲aⅴ| 日韩精品dvd| 亚洲深夜福利| 日韩福利在线观看| 久久久久观看| 日韩欧美精品一区| 久久大逼视频| 欧美日韩一区自拍| 国产一区二区久久久久| 欧洲在线一区| 蜜臀久久99精品久久久画质超高清| 婷婷久久免费视频| 欧美国产极品| 欧美日韩在线二区| 日韩一区二区三区在线看| 乱一区二区av| 激情综合激情| 日韩精品视频一区二区三区| 欧美成人精品午夜一区二区| 国产一区二区三区国产精品| 99成人在线视频| 四虎成人精品一区二区免费网站 | 日韩精品成人| 欧美激情网址| 午夜精品一区二区三区国产| 日韩不卡一二三区| 国产91欧美| 宅男噜噜噜66国产日韩在线观看| 97精品资源在线观看| 成人va天堂| 亚洲aa在线| 欧美日韩免费看片| 亚洲综合不卡| 精品三级国产| 日韩在线观看一区二区| 精品视频亚洲| 免费看黄色91| 精品视频一区二区三区在线观看| 一本一道久久a久久精品蜜桃| 国产欧美精品| 亚洲精品国产偷自在线观看| 国产精品一区二区三区www| 欧美日韩精品一区二区视频| 国产视频一区二区在线播放| 国产一区日韩一区| 国产精品15p| 奶水喷射视频一区| 精品一区二区三区免费看| 99国产精品| 国产成人精品一区二区三区视频| 中文字幕一区二区av| 伊人久久av| 日韩一区二区三区在线看| 欧美丝袜一区| 精品国产亚洲一区二区在线观看| 男人操女人的视频在线观看欧美| 国产一区2区在线观看| 蜜臀a∨国产成人精品| 日韩中文在线电影| 久久的色偷偷| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩国产欧美| 欧美一级二区| 美女精品一区| 久久精品高清| 粉嫩av一区二区三区四区五区 | 日韩在线一二三区| 蜜桃精品在线| 午夜一级在线看亚洲| 午夜欧美视频| 国产精品久一| 日韩三级一区| 91精品韩国| 你懂的网址国产 欧美| 在线看片日韩| 亚洲黄色在线| 91精品一区国产高清在线gif| 国产精品hd| 日本久久一区| 免费在线观看视频一区| 亚洲欧美一区在线| 成人三级高清视频在线看| 国产精品视频一区二区三区综合| 在线视频亚洲欧美中文| 欧美精品激情| 今天的高清视频免费播放成人| 久久精品三级| 国产乱码精品一区二区三区四区| 日韩精品电影一区亚洲| 伊人国产精品| 亚洲尤物av| 最新国产精品视频| 综合一区av| 蜜臀久久久99精品久久久久久| 婷婷精品进入| 免费av一区二区三区四区| 亚洲成人不卡| 欧美成人基地| 精品日韩视频| 成人自拍av| 91精品蜜臀一区二区三区在线 | 亚洲免费专区| 中文字幕免费一区二区| 香蕉久久夜色精品国产| 一区在线免费观看| 午夜欧美精品| 香蕉精品999视频一区二区| 日韩午夜黄色| 亚洲一区二区成人| 欧美日韩国产在线一区| 亚洲免费精品| 免费观看在线综合色| 蜜臀91精品一区二区三区| 手机精品视频在线观看| 国产精品女主播一区二区三区| 91久久在线| 老牛影视一区二区三区| 亚洲精品国产精品粉嫩| 日韩精品亚洲一区二区三区免费| 日本综合精品一区| 国产午夜精品一区在线观看| 国产调教一区二区三区| 老司机免费视频一区二区| 老鸭窝一区二区久久精品| 国产aⅴ精品一区二区四区| 亚洲成人av观看| 婷婷亚洲五月| 亚洲人成网77777色在线播放 | 国产精品a级| 97在线精品| 在线日韩欧美| 天堂成人免费av电影一区| 日本不卡视频在线观看| 国产极品久久久久久久久波多结野| 久久精品国产99国产| 日韩在线精品| 中文精品视频| 国产探花一区| 成人精品动漫一区二区三区| 国产综合色区在线观看| 亚洲国产日韩欧美在线| 在线视频亚洲| 日韩区欧美区| 精品无人区麻豆乱码久久久| 亚洲综合在线电影| 蜜臀久久99精品久久久久久9| 69堂免费精品视频在线播放| 精品视频久久| 国产亚洲网站| 国产欧美三级| 久久久久久美女精品| 免费美女久久99| 美女久久久久久 | 四虎在线精品| 精品日韩在线| 黑丝一区二区三区| 清纯唯美亚洲综合一区| 国产精品久久久久av电视剧| 亚洲精品无播放器在线播放| 麻豆国产精品| 日韩午夜电影| 麻豆精品久久| 最新日韩欧美| 国产精品porn| 黄页网站一区| 国产一区二区视频在线看| 免费av一区| 国产精品嫩草影院在线看| 国产一区观看| 国产福利一区二区精品秒拍| 午夜国产一区二区| 欧美激情福利| 免费精品视频| 成人福利av| 欧美一区成人| 欧美日韩国产在线观看网站| 国产欧美日韩精品一区二区三区| 久久高清免费| 久久国产日韩欧美精品| 欧美日韩国产在线观看网站| 国产精品久久| 中文欧美日韩| 国产一区二区三区四区二区| 亚洲美女91| 激情综合网五月|