[JAVA EE] JPA技术基础:完成数据列表显示
本章完成數據列表顯示功能
ORM 和 JPA
ORM (Object Relation Mapping) 是對象/關系映射,它將數據庫中的表
和內存中的對象建立映射關系。
對象和關系型數據是業務實體的兩種表現形式。
業務實體在內存中表現為對象,在數據庫中表現為關系型數據。
內存中的對象不會被永久保存,關系型數據庫中的對象會被永久保存。
JPA 概念
- JPA (Java Persistence API) 是一種 Java 持久化 API,用于對象的持久化,是一種非常強大的 ORM 解決方案。
- JPA 通過簡單約定好接口方法的規則自動生成相應的 JPQL 語句,然后映射成 POJO 對象。
JPA 基本用法
數據庫啟動有問題的見本人另一篇博客!
啟動MySQL:net start mysql出現問題+本地Mysql忘記密碼的修改方法
- 準備工作
- 新建 Spring Boot 項目:
jpademo - 添加相關依賴:
- pom.xml
<!-- Spring Data JPA 依賴(重要) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL 驅動(重要) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
-
添加完依賴,要重啟IDEA
-
數據庫連接配置(這個很重要!)
-
在 application.properties 添加數據庫連接配置:(username和password記得填自己的!推薦全寫root,好記!)
#自動生成數據庫表(關鍵)update表示更新或者創建數據表結構(首次)
spring.jpa.hibernate.ddl-auto=update
#mysql數據庫連接配置(非常重要)
#端口號,數據庫名,時區信息
spring.datasource.url = jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = root
#mysql數據庫驅動程序(重要)
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
#jpa配置:在控制臺顯示Hibernate的sql(可選)
spring.jpa.show-sql = true
#其他配置:關閉Thymeleaf 的緩存
spring.thymeleaf.cache = false
- 運行項目,自動生成表。
- 圖中是Navicat和MySQL Workbench兩個的界面,別看混了。
- (因為我的老師使用的是MySQL Workbench,但是我比較喜歡用Navicat,所以就都用了試下。)
- 怎么看?見本人另外一篇博客:MySQL新建數據庫+用Navcat查看MySQL的方法
- 創建實體類
在 entity 包中新建 User 類:用于映射數據庫表
- user.java
- 自己敲的時候的順序:
先寫以下內容:
import javax.persistence.*;
import java.util.Date;@Entity //聲明類為實體類,不能掉!
public class User implements Serializable {private Long id; // Long 對應MySQL數據庫 bigint 類型private String username;private String password;private Date regdate; // Date 對應MySQL數據庫 datetime 類型private int status;
// getter/setter
}
- 再加上注解(就是@的內容)
- 再加上getter和setter
- (不會還有人手動敲吧?不會還不會generate吧?)
- 這里要按住shift全選
- 點擊ok,自動生成getter
- setter同理~
- 完成后的代碼:
package com.example.demo.entity;import org.springframework.format.annotation.DateTimeFormat;import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;@Entity
public class User implements Serializable {@Id //表示該屬性作為表的主鍵@GeneratedValue(strategy = GenerationType.IDENTITY)//設定主鍵生成策略:IDENTITY表示由數據庫自動生成private Long id;// Long 對應MySQL數據庫 bigint 類型@Column(nullable = false,unique = true,length = 20)//列字段,非空且唯一,字符最大長度20private String username;@Column(nullable = false,length = 20)//列字段,非空,字符最大長度20private String password;@Column(nullable = false)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")//聲明日期格式private Date regdate;// Date 對應MySQL數據庫 datetime 類型@Column(nullable = false)private int status;//狀態:0是離線,1是在線,等。public Long getId() {return id;}public String getUsername() {return username;}public String getPassword() {return password;}public Date getRegdate() {return regdate;}public int getStatus() {return status;}public void setId(Long id) {this.id = id;}public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}public void setRegdate(Date regdate) {this.regdate = regdate;}public void setStatus(int status) {this.status = status;}
}
- 添加記錄:
如果用的是MySQL Workbench:
- 創建數據接口訪問層(repository倉庫)
- JPA 提供了操作數據庫的接口。在開發過程中繼承和使用這些接口,可
簡化持久化開發工作。 - Spring能夠找到自定義接口,并生成代理類,在開發過程中可以不寫相
關SQL操作,由代理類自動生成。 - JPA接口:JpaRepository
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
其中:T表示實體類,ID表示主鍵類型,ID必須實現序列化
創建過程:repository倉庫
- 新建
repository包,并新建接口:UserRepository(倉庫接口) - 該接口要
extends JpaRepository<User, Long>接口(User:實體模型類,Long:主鍵類型)
UserRepository.java
package com.example.demo.repository;import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<User, Long> {
// JpaRepository 自動實現了很多內置的CURD方法 (厲害啊!)
// 這些方法以后可直接調用,例如:
// List<T> findAll();
// Optional<T> findById(id);
// User save(user);
// void delete(user);
// void deleteById(id);
// long count();
// boolean existsById(id);
}
- 調用Repository完成業務控制
-
在 controller 包中新建 UserController 控制器。
-
代碼順序還是和上文介紹的一樣,不復制粘貼總是有好處的~
package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {//@Autowired:自動注入,即對象只需聲明,不用new就能使用(Spring IoC技術體現,厲害呀!)@AutowiredUserRepository userRepository;@RequestMapping("/get/{id}")public User getUserById(@PathVariable Long id){//Repository內置的方法,可直接使用,根據 id 查找對象//注:findById(id)返回的是Optional類(一個可以為null的容器對象),如果對象存在則調用get()方法返回該對象User user =userRepository.findById(id).get();return user;}@RequestMapping("/list")public List<User> list(){//Repository內置的方法,可直接使用,查找所有對象List<User> users = userRepository.findAll();return users;}
}
- 請求試試
http://localhost:8080/get/1
在postman中測試:
http://localhost:8080/list
總結
以上是生活随笔為你收集整理的[JAVA EE] JPA技术基础:完成数据列表显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帝开头的成语有哪些啊?
- 下一篇: 关于体育的作文200字左右