<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
①還是一樣,我們首先建立一個SpringBoot模組。
由於我們並不測試前端,而只是整合junit,所以不用選擇模板,選擇其中的web即可。
完成以後我們開啟Pom.xml,會發現報錯,這裡我的版本不能到2.7.5,降版本。
②匯入對應的starter
檢視Pom.xml檔案:我們發現已經有了一個Spring-Boot-stater-test,這其實就是SpringBoot已經自己整合了junit
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringBoot-juint</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBoot-juint</name> <description>SpringBoot-juint</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
問題隨之而來,既然SpringBoot已經整合了junit,那我們還整合啥?答案是不用整合!
因為SpringBoot專案在建立的時候已經預設整合了junit,至於為什麼是這樣,是因為SpringBoot是一個maven專案,而maven在執行它的生命週期的時候測試是跳不過去的,它必須執行測試。
③測試類新增@SpringBootTest註解修飾
package com.example; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringBootJuintApplicationTests { @Test void contextLoads() { } }
④ 使用自動裝配新增要測試的物件
這裡測試啥呢?測試一下dao層
一、編寫Dao層介面:
package com.example.Dao; public interface UserDao { public void selectAll(); }
二、編寫Dao層介面的實現類:值得說明的是,一般情況下,因為Dao層的mapper需要用到反射,一般是沒有實現類的,這裡只是為了測試方便!!!
package com.example.Dao.impl; import com.example.Dao.UserDao; import org.springframework.stereotype.Repository; @Repository//把這個類交給Spring容器管理 public class ImplUserDao implements UserDao { @Override public void selectAll() { System.out.println("selectAll......."); } }
三、在測試類中使用@Autowired進行注入
package com.example; import com.example.Dao.UserDao; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringBootJuintApplicationTests { @Autowired UserDao userDao; @Test void contextLoads() { userDao.selectAll(); } }
四、執行測試
在上面整合的junit並不完整,為什麼這樣說,請看:
現在SpringBoot的引導類和測試類的引導類都在同級目錄下,現在我要把測試類的引導類移動到com包下
執行測試,輸出:Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
:說的是它找不到SpringBoot的設定類,需要你使用@ContextConfiguration或者@SpringBootTest為你的測試類指定SpringBoot的設定類
為什麼出現以下情況,原來是@SpringBootTest會預設從當前包及其子包下尋找SpringBoot的設定類,當我們把測試類中的SpringBootJuintApplicationTests移動到com包下時,它就找不到對應的SpringBoot的設定類,因為它這時不在引導類包及其子包下,也就無法從spring容器中獲取對應bean,則無法進行注入。
解決方法:在@SpringBootTest註解中指定引導類或者使用@ContextConfiguration
@SpringBootTest(classes = SpringBootJuintApplication.class) @ContextConfiguration(classes = SpringBootJuintApplication.class)
值得說明的是,這裡整合Mybatis用的是註解的方式
一、建立資料庫資料
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_esperanto_ci NULL DEFAULT NULL, `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_esperanto_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_esperanto_ci ROW_FORMAT = Dynamic; INSERT INTO `user` VALUES ('zhangsan', '775033'); INSERT INTO `user` VALUES ('lisi', '330678'); SET FOREIGN_KEY_CHECKS = 1;
二、建立工程、新建對應實體類
SpringBoot方便的一部分原因就是,用什麼匯入就勾選什麼技術。
或者手動加入:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringBoot-Mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBoot-Mybatis</name> <description>SpringBoot-Mybatis</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
建立實體類物件:
package com.example.entity; public class User { private String username; private String password; @Override public String toString() { return "User{" + "username='" + username + ''' + ", password='" + password + ''' + '}'; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User() { } public User(String username, String password) { this.username = username; this.password = password; } }
一、上面已經匯入了對應技術用到的座標,現在要設定資料來源,在哪設定呢,在SpringBoot的組態檔:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot
username: root
password: ******
二、編寫dao層介面()
package com.example.dao; import com.example.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserDao { @Select("select username,password from user") public List<User> selectAll(); }
三、編寫測試
package com.example.springbootmybatis; import com.example.dao.UserDao; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringBootMybatisApplicationTests { @Autowired UserDao userDao; @Test void contextLoads() { System.out.println(userDao.selectAll()); } }
測試:
報了以上兩個錯誤,這是我們希望看到的,為什麼?
原因:在上面的驅動中我們使用的是MySQL 8.X版本的,在8及以上的MySQL驅動中,SpringBoot強制我們進行時區設定,並且要用:com.mysql.cj.jdbc.Driver
解決:這裡我們只需要在組態檔中新增失去設定和更改Driver即可
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: ******
測試:
值得注意的是:在MySQL8才需要設定時區和使用cj.jdbc.
因為druid是一個連線池,需要提供資料來源,測試也還是那一套,這裡直接複製上邊的模組進行重新開發。
首先,我們應該知道的是,SpringBoot之所以好用,就是因為它可以很好的整合其他的第三方資源和技術,核心就是:匯入對應的stater,根據設定格式,編寫非預設值對應的設定項
一、匯入對應druid的stater
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
二、在組態檔中設定資料來源
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: ******
三、測試
測試?設定完成了?完成了,SpringBoot就是這麼好用
到此這篇關於SpringBoot整合Mybatis與druid實現流程詳解的文章就介紹到這了,更多相關SpringBoot整合Mybatis與druid內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45