Spring同時整合JPA與Mybatis
阿新 • • 發佈:2020-08-11
@[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 JPA和Mybatis兩個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