1. 程式人生 > >Spring同時整合JPA與Mybatis

Spring同時整合JPA與Mybatis

@[toc] #### ORM - ORM的出現,使得關係型資料庫對映成了物件;簡單來說,有了ORM之後,JAVA程式設計師從面向JDBC程式設計轉化成面向JAVA物件程式設計。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200811110057855.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) #### Spring ORM - Spring對ORM的解決方案主要體現在以下方面: 1. 統一的資源管理方式與異常管理:Spring使用各種ORM框架,資源管理及使用方式都是統一的;同時Spring會將各個ORM框架的異常轉譯到Spring異常體系下。 2. 統一的事務管理:Spring通過IoC和AOP技術,形成了事務管理抽象層,接管了各種ORM框架下的資料訪問的事務管理。 - 隨著版本的升級,Spring
核心包中對ORM的各種解決方案也越來越精煉。本文我們重點將介紹同時整合Spring Data JPAMybatis兩個ORM框架。 #### Spring ORM 同時整合JPA與Mybatis - 在同一個專案中一般只會單獨整合Spring Data JPA,或者單獨整合Mybatis。但兩者也可以混合使用(一般沒這個必要),本文為了更加深入探索Spring ,將通過一個DEMO應用兩者的並展示相似點與不同之處。 ##### 一、建立一個SpringBoot專案 1. 在IntelliJ IDEA中建立新專案 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200702113837177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) 2. 通過地址https://start.spring.io/
初始化專案; ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200702113947469.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) 3. 指定專案通用資訊: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020070211460312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) 4. 選擇專案依賴Starter
: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020070211525688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) 5. 生成的專案結構: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200702115951860.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pwZ3podQ==,size_16,color_FFFFFF,t_70) ##### 二、建立使用者資訊登記表 - 根據使用者資訊模型類,設計使用者資訊登入表 ```sql DROP DATABASE IF EXISTS user_info; CREATE DATABASE user_info DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; use user_info; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; ``` ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200704083637853.png) ##### 三、Web應用專案整合mysql - 增加依賴 ```yaml ``` - Spring資料來源配置 ```yaml ###資料來源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource username: root password: root driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy url: jdbc:log4jdbc:mysql://localhost:3306/user_info?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true ``` ##### 四、新增Spring Data JPA和Mybatis依賴 ```xml ``` ##### 五、新增資料表對映實體類 ```java /** * 使用者類--對映表user * * @author zhuhuix */ @Entity @Table(name="user_info") public class User implements Serializable { // 使用者id @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 使用者名稱 @NotBlank(message = "使用者名稱稱不能為空") @Column(name="name") private String name; // 郵箱 @Column(name="email") @Pattern(message ="郵箱格式不符", regexp = "^[A-Za-z0-9\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$") private String email; public User(Long id, String name, String email) { this.id = id; this.name = name; this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ``` ##### 六、建立資料介面層 ###### 6.1 宣告JPA介面 - 藉助Spring Data JPA,我們可以通過繼承CrudRepository介面,快速定義應用的資料層。CrudRepository定義並實現了很多用於crud(建立、讀取、更新、刪除)操作的方法,我們根本就不用編寫實現類!當應用啟動的時候,Spring Data JPA會在執行期自動生成實現類。 ```java /** * 基於SpringMVC框架開發web應用--資料操作層 */ public interface UserRepository extends CrudRepository