SpringBoot整合Spring Data JPA

破碎的信仰發表於2020-09-25

簡介

寫之前呢先說一些廢話吧,以前一直沒有接觸過這個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的入門,其它複雜的邏輯還是要靠各位小夥伴的努力了

相關文章