SpringBoot整合Spring Data JPA
簡介
寫之前呢先說一些廢話吧,以前一直沒有接觸過這個Spring Data JPA(以下簡稱JPA)的東西,來到這家公司呢,這家公司以前開發專案用的技術就是SpringBoot + hibernate + JPA,經過了一段時間的學習之後,總結一下SpringBoot怎樣整合JPA,這段時間從網上搜了很多關於sb整合JPA的文章,發現都已經是幾年之前釋出的文章了,有的配置很多,有的配置很少,還有的要在啟動類上加註解之類的東西,我試驗了挺多,算是弄了一個很簡單的整合方式吧,廢話也就說到這,下面開做。
配置部分
pom檔案
<!-- 引入web啟動器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 引入Spring Data JPA啟動器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 引入lombok依賴 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
引入lombok依賴是因為一會可以自動生成get/set和toString方法
application.yml配置檔案
spring:
# 引入MySQL配置
datasource:
url: jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&tinyInt1isBit=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
# 引入JPA配置
jpa:
hibernate:
ddl-auto: update
# 是否列印SQL語句,false/true
show-sql: true
open-in-view: false
application.yml配置檔案這裡要注意 幾點
- ddl - auto屬性:第一次啟動程式時設定為create,JPA會自動幫你建立表,之後切記改為update,否則第二次啟動程式,JPA依舊是按照建立表的方法走,這樣資料庫表就不會有任何資料
- open-in-view屬性:我從網上找了很多資料,這個屬性設定的是一些比較底層的東西,就比較深了,也不是很懂,這個屬性預設為true,很多人建議都是改為false,避免不必要的錯誤,這個看個人需求
程式碼部分
Controller層
@RestController
@RequestMapping(value = "user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "getUser")
private User getUser(@RequestParam(value = "id") Long id){
return userService.findById(id);
}
}
Service層
介面
public interface UserService {
User findById(Long id);
}
實現類
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User findById(Long id) {
return userDao.findById(id);
}
}
Dao資料層
Dao層
@Component
public class UserDao {
@Autowired
private UserRepository userRepository;
public User findById(Long id) {
Optional<User> user = userRepository.findById(id);
return user.get();
}
}
我這裡直接呼叫JPA提供的查詢方法
Repository層
public interface UserRepository extends JpaRepository<User,Long> {
}
這個Repository的類放在資料層,因為這是和資料庫做互動的
實體類
實體類父類
@MappedSuperclass
public class ParentEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonIgnore
@CreationTimestamp
@Column(name = "create_time")
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT + 8")
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
user實體類
@Entity
@Getter
@Setter
@ToString
public class User extends ParentEntity {
@Column(name = "name",length = 20,nullable = false)
private String name;//名字
@Column(name = "age")
private Integer age;//年齡
@Column(name = "phone",length = 20)
private String phone;//手機號
@Column(name = "birthday")
private Date birthday;//生日
}
上面加依賴的時候已經說了,lombok可以幫我們自動建立get/set和toString方法,加上相應的註解即可
配置和程式碼都搞定了來看結果
第一次執行程式
日誌部分
資料庫表
手動給資料表加上一條資料
注:我是為了方便才直接運算元據庫的,大家可別學我啊!!!求勿噴
第二次執行程式
日誌部分
第二次啟動之前把application.yml配置檔案中JPA的配置的ddl-auto屬性改為update這裡就不會看到有任何JPA建立表的輸出,如果看到有建立表的SQL語句說明那個屬性還是create
檢視結果
到這裡SpringBoot整合JPA就結束了,資料已經成功查詢出來了,其它的CRUD小夥伴們可以自己嘗試
總結
SpringBoot整合JPA就加一個依賴,在配置檔案加一個JPA的配置即可,實體類要切記加上@Entity註解,要繼承的實體類父類切記要加上@MappedSuperclass註解,我寫的這篇文章僅僅僅限於整合JPA的入門,其它複雜的邏輯還是要靠各位小夥伴的努力了
相關文章
- Spring Data JPA(二):SpringBoot整合H2Spring Boot
- SpringBoot第九篇:整合Spring Data JPASpring Boot
- Spring Boot:整合Spring Data JPASpring Boot
- Spring Data JPA系列2:SpringBoot整合JPA詳細教程,快速在專案中熟練使用JPASpring Boot
- Spring Data JpaSpring
- Spring Data JPA之Spring Data JPA快速入門(三)Spring
- Spring Boot整合Spring Data JPA進行資料庫操作Spring Boot資料庫
- Spring Data Jpa APISpringAPI
- SpringBoot整合系列-整合JPASpring Boot
- SpringBoot2.0應用(四):SpringBoot2.0之spring-data-jpaSpring Boot
- Spring Data JPA 的使用Spring
- Spring Data JPA中TransactionInterceptorSpring
- Spring Data JPA中ConfigurableTransactionManagerSpring
- spring data jpa查詢Spring
- Spring Data JPA:解析SimpleJpaRepositorySpring
- Spring Data JPA:解析CriteriaQuerySpring
- Spring Data JPA:解析CriteriaBuilderSpringUI
- SpringBoot2.0原始碼分析(四):spring-data-jpa分析Spring Boot原始碼
- SpringBoot 整合 Spring Data Mongodb 操作 MongoDB 詳解Spring BootMongoDB
- 基於spring-boot&spring-data-jpa的web開發環境整合SpringbootWeb開發環境
- Spring Data JPA REST Query CriteriaSpringREST
- Spring Data JPA簡單使用Spring
- Spring Data JPA原始碼案例Spring原始碼
- Spring Data JPA中事務ReactiveTransactionManagerSpringReact
- 一文搞定 Spring Data JPASpring
- Spring Data JPA 參考文件三Spring
- Spring Boot (五)Spring Data JPA 操作 MySQL 8Spring BootMySql
- 【Spring技術棧】初識Spring Data JPASpring
- SpringBoot資料訪問(二) SpringBoot整合JPASpring Boot
- Spring Data JPA專案實戰(下)Spring
- @Query註解的用法(Spring Data JPA)Spring
- Spring Data JPA的簡單入門Spring
- Spring同時整合JPA與MybatisSpringMyBatis
- 提高Spring Data JPA應用程式的效能Spring
- Spring Data JPA中事務超時TransactionTimedOutExceptionSpringException
- Spring Data JPA 實現聯表查詢Spring
- 使用Spring Data Jpa遇到問題彙總Spring
- SpringBoot整合Spring SecuritySpring Boot