摘要:基于最新的,是你學習的最佳指南。驅動程序通過自動注冊,手動加載類通常是不必要。由于加上了注解,如果轉賬中途出了意外和的錢都不會改變。三的方式項目結構相比于注解的方式主要有以下幾點改變,非常容易實現。公眾號多篇文章被各大技術社區轉載。
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂并且能夠在看完之后獨立實踐。基于最新的 SpringBoot2.0+,是你學習SpringBoot 的最佳指南。) ,歡迎各位 Star。
SpringBoot 整合 Mybatis 有兩種常用的方式,一種就是我們常見的 xml 的方式 ,還有一種是全注解的方式。我覺得這兩者沒有誰比誰好,在 SQL 語句不太長的情況下,我覺得全注解的方式一定是比較清晰簡潔的。但是,復雜的 SQL 確實不太適合和代碼寫在一起。
下面就開始吧!
目錄:
一 開發前的準備
1.1 環境參數
1.2 創建工程
1.3 創建數據庫和 user 用戶表
1.4 配置 pom 文件中的相關依賴
1.5 配置 application.properties
1.6 創建用戶類 Bean
二 全注解的方式
2.1 Dao 層開發
2.2 service 層
2.3 Controller 層
2.4 啟動類
2.5 簡單測試
三 xml 的方式
3.1 Dao 層的改動
3.2 配置文件的改動
一 開發前的準備 1.1 環境參數開發工具:IDEA
基礎工具:Maven+JDK8
所用技術:SpringBoot+Mybatis
數據庫:MySQL
SpringBoot版本:2.1.0
1.2 創建工程創建一個基本的 SpringBoot 項目,我這里就不多說這方面問題了,具體可以參考下面這篇文章:
https://blog.csdn.net/qq_34337272/article/details/79563606
1.3 創建數據庫和 user 用戶表我們的數據庫很簡單,只有 4 個字段:用戶 id、姓名、年齡、余額,如下圖所示:
添加了“余額money”字段是為了給大家簡單的演示一下事務管理的方式。
建表語句:
CREATE TABLE `user` ( `id` int(13) NOT NULL AUTO_INCREMENT COMMENT "主鍵", `name` varchar(33) DEFAULT NULL COMMENT "姓名", `age` int(3) DEFAULT NULL COMMENT "年齡", `money` double DEFAULT NULL COMMENT "賬戶余額", PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf81.4 配置 pom 文件中的相關依賴
由于要整合 springboot 和 mybatis 所以加入了artifactId 為 mybatis-spring-boot-starter 的依賴,由于使用了Mysql 數據庫 所以加入了artifactId 為 mysql-connector-java 的依賴。
1.5 配置 application.propertiesorg.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test
由于我使用的是比較新的Mysql連接驅動,所以配置文件可能和之前有一點不同。
server.port=8333 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=153963 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
注意:我們使用的 mysql-connector-java 8+ ,JDBC 連接到mysql-connector-java 6+以上的需要指定時區 serverTimezone=GMT%2B8。另外我們之前使用配置 Mysql數據連接是一般是這樣指定driver-class-name=com.mysql.jdbc.Driver,但是現在不可以必須為 否則控制臺下面的異常:
Loading class `com.mysql.jdbc.Driver". This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver". The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
上面異常的意思是:com.mysql.jdbc.Driver 被棄用了。新的驅動類是 com.mysql.cj.jdbc.Driver。驅動程序通過SPI自動注冊,手動加載類通常是不必要。
如果你非要寫把com.mysql.jdbc.Driver 改為com.mysql.cj.jdbc.Driver 即可。
1.6 創建用戶類 Beanpublic class User { private int id; private String name; private int age; private double money; ... 此處省略getter、setter以及 toString方法 }二 全注解的方式
先來看一下 全注解的方式,這種方式和后面提到的 xml 的方式的區別僅僅在于 一個將 sql 語句寫在 java 代碼中,一個寫在 xml 配置文件中。全注方式解轉換成 xml 方式僅需做一點點改變即可,我在后面會提到。
項目結構:
2.1 Dao 層開發UserDao.java
@Mapper public interface UserDao { /** * 通過名字查詢用戶信息 */ @Select("SELECT * FROM user WHERE name = #{name}") User findUserByName(@Param("name") String name); /** * 查詢所有用戶信息 */ @Select("SELECT * FROM user") List2.2 service 層findAllUser(); /** * 插入用戶信息 */ @Insert("INSERT INTO user(name, age,money) VALUES(#{name}, #{age}, #{money})") void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money); /** * 根據 id 更新用戶信息 */ @Update("UPDATE user SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}") void updateUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money, @Param("id") int id); /** * 根據 id 刪除用戶信息 */ @Delete("DELETE from user WHERE id = #{id}") void deleteUser(@Param("id") int id); }
@Service public class UserService { @Autowired private UserDao userDao; /** * 根據名字查找用戶 */ public User selectUserByName(String name) { return userDao.findUserByName(name); } /** * 查找所有用戶 */ public List2.3 Controller 層selectAllUser() { return userDao.findAllUser(); } /** * 插入兩個用戶 */ public void insertService() { userDao.insertUser("SnailClimb", 22, 3000.0); userDao.insertUser("Daisy", 19, 3000.0); } /** * 根據id 刪除用戶 */ public void deleteService(int id) { userDao.deleteUser(id); } /** * 模擬事務。由于加上了 @Transactional注解,如果轉賬中途出了意外 SnailClimb 和 Daisy 的錢都不會改變。 */ @Transactional public void changemoney() { userDao.updateUser("SnailClimb", 22, 2000.0, 3); // 模擬轉賬過程中可能遇到的意外狀況 int temp = 1 / 0; userDao.updateUser("Daisy", 19, 4000.0, 4); } }
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/query") public User testQuery() { return userService.selectUserByName("Daisy"); } @RequestMapping("/insert") public List2.4 啟動類testInsert() { userService.insertService(); return userService.selectAllUser(); } @RequestMapping("/changemoney") public List testchangemoney() { userService.changemoney(); return userService.selectAllUser(); } @RequestMapping("/delete") public String testDelete() { userService.deleteService(3); return "OK"; } }
//此注解表示SpringBoot啟動類 @SpringBootApplication // 此注解表示動態掃描DAO接口所在包,實際上不加下面這條語句也可以找到 @MapperScan("top.snailclimb.dao") public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }2.5 簡單測試
上述代碼經過測試都沒問題,這里貼一下根據姓名查詢的測試的結果。
三 xml 的方式項目結構:
相比于注解的方式主要有以下幾點改變,非常容易實現。
3.1 Dao 層的改動我這里只演示一個根據姓名找人的方法。
UserDao.java
@Mapper public interface UserDao { /** * 通過名字查詢用戶信息 */ User findUserByName(String name); }
UserMapper.xml
3.2 配置文件的改動
配置文件中加入下面這句話:
mybatis.mapper-locations=classpath:mapper/*.xml
ThoughtWorks準入職Java工程師。專注Java知識分享!開源 Java 學習指南——JavaGuide(12k+ Star)的作者。公眾號多篇文章被各大技術社區轉載。公眾號后臺回復關鍵字“1”可以領取一份我精選的Java資源哦!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72494.html
摘要:當禁用時,所有關聯對象都會即時加載。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動。需要適合的驅動。系統默認值是設置字段和類是否支持駝峰命名的屬性。 ??上篇文章我們介紹了SpringBoot和MyBatis的整合,可以說非常簡單快捷的就搭建了一個web項目,但是在一個真正的企業級項目中,可能我們還需要更多的更加完善的框架才能開始真正的開發,比如連接池、分...
摘要:從最開始的到后來的,到目前的隨著框架的不斷更新換代,也為我們廣大的程序猿提供了更多的方便,一起搭建一個從控制層到持久層的項目可能需要一兩天的時間,但是采用的方式,我們可能只需要分鐘就能輕松完成一個項目的搭建,下面我們介紹一下整合的方法一新建 ??從最開始的SSH(Struts+Spring+Hibernate),到后來的SMM(SpringMVC+Spring+MyBatis),到目前...
摘要:下面基于,帶著大家看一下中如何配置多數據源。注意版本不一致導致的一些小問題。配置配置兩個數據源數據庫和數據庫注意事項在配置數據源的過程中主要是寫成和。五啟動類此注解表示啟動類這樣基于的多數據源配置就已經完成了,兩個數據庫都可以被訪問了。 在上一篇文章《優雅整合 SpringBoot+Mybatis ,可能是你見過最詳細的一篇》中,帶著大家整合了 SpringBoot 和 Mybatis...
摘要:的配置后在其他低版本的中也有使用這種配置的,具體根據版本而定。等注解是的相關知識,后面的文章將詳細講述。 ??在我們的實際開發的過程中,無論多復雜的業務邏輯到達持久層都回歸到了增刪改查的基本操作,可能會存在關聯多張表的復雜sql,但是對于單表的增刪改查也是不可避免的,大多數開發人員對于這個簡單而繁瑣的操作都比較煩惱。 ??為了解決這種大量枯燥的簡單數據庫操作,大致的解決該問題的有三種方...
閱讀 2096·2023-04-25 17:57
閱讀 1294·2021-11-24 09:39
閱讀 2492·2019-08-29 16:39
閱讀 3322·2019-08-29 13:44
閱讀 3138·2019-08-29 13:14
閱讀 2329·2019-08-26 11:36
閱讀 3823·2019-08-26 11:00
閱讀 955·2019-08-26 10:14