spring data(暫時寫下jpa的部分,後續繼續更新,jpa的多對多之類的就不再玩了,可以回看之前的jpa部分)
技術標籤:spring data
文章目錄
springdata
springdata(這玩意是spring家族成員)簡介
現代的開發技術中,redis用於快取熱點資料,mongodb用於儲存文件資料,elasticsearch用於支援強大的搜尋功能。
在Java的訪問技術中有針對關係型資料庫的mybatis、jpa、針對redis的jedis等等。每個技術的api都不一樣,springdata將這些不同的api統一起來,也就是說springdata支援關係型和非關係型資料庫。
因此,spring data jpa(把jpa封裝了一次)只是springdata中的一個模組。
springdata的主要模組
-
spring data jpa
對jpa的spring data儲存庫支援
-
spring data mongodb
對mongodb的基於spring物件文件的儲存庫支援
-
spring data common
spring data的核心模組,定義了spring data的核心功能
-
spring data jdbc
對jdbc的spring data儲存庫支援
-
spring data redis
封裝jedis技術,訪問redis
-
spring data elasticsearch
訪問elasticsearch
spring data jpa
搭建環境
-
建立maven工程
-
新增springboot、spring data jpa、mysql的依賴
從
maven
開始<!--springboot--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</
ps:springboot2.1.6.RELEASE中
@SpringBootTest
註解不起作用,原因未知,改成springboot2.2.2.RELEASE,就ok了熱部署:https://www.cnblogs.com/zhukf/p/12672180.html
熱部署小問題:熱部署之後,原先能訪問的連結,都
Whitelabel Error Page
,暫時沒找到解決辦法 -
編寫實體類
package com.yyh.domain; import lombok.Getter; import lombok.Setter; import lombok.ToString; import javax.persistence.*; import java.util.Date; @Entity//掃描該實體類 @Getter//Lombok的註解 @Setter//Lombok的註解 @ToString//Lombok的註解 public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private Integer age; @Column(name = "hiredate") @Temporal(TemporalType.DATE) private Date hireDate; }
-
編寫啟動類
package com.yyh; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringbootUserCRUDApplication { public static void main(String[] args) { SpringApplication.run(SpringbootUserCRUDApplication.class,args); } }
-
編寫dao類
package com.yyh.dao; import com.yyh.domain.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User,Long> {//JpaRepository:jpa提供的介面,介面當中定義了實體的基本操作 //只是單表簡單的增刪改查的話,我啥都不用寫,而且不用寫實現類,因為動態代理已經生成了一個實現類。 }
-
編寫controller類
package com.yyh.controller; import com.yyh.dao.UserRepository; import com.yyh.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired UserRepository userRepository; @GetMapping("/user/{id}") public User findById(@PathVariable("id") Long id){ //userRepository.findById(id)會返回一個Optional物件是java8的新特性,主要是為了避免空值 //也可以userRepository.findById(id).get() User user = userRepository.findById(id).orElse(null); return user; } @GetMapping("/user")//應該用post方式的,但為了測試方便,使用get public User saveUser(User user){ User saveUser = userRepository.save(user); //對於spring data jpa的save方法 //如果沒有指定id欄位,就是新增操作 //如果指定了id欄位,就是修改操作(先查詢記錄是否存在,若存在,則更新,不存在就是新增操作) return saveUser; } @GetMapping("/user/delete/{id}") public void deleteById(@PathVariable("id") Long id){ userRepository.deleteById(id); } }
-
編寫啟動類
途中遇到個小問題,建立的表不是InnoDB引擎,解決辦法:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #指定mysql資料庫版本5,且引擎是innodb
注意InnoDB字樣
-
測試
-
增
http://localhost:8080/user?name=sansan&age=3&hireDate=2021/02/07
ps:日期一定要斜線分割,不然無法轉換,報錯
-
查
http://localhost:8080/user/1
-
改
http://localhost:8080/user?id=1&name=pangpang&age=6&hireDate=2021/02/08
ps:有帥得發光的同學要問了,日期沒改掉啊,事實上日期改掉了,圖中是標準時間,而我們是東八區,16+8=24,是不是對上了?有資料庫圖為證:
-
刪
http://localhost:8080/user/delete/1
原來只有一個,刪除了一個還剩一個,因為我在中途又加了一個,發現沒,圖中的id是2.
-