添加依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
實體類
package cn.clboy.springbootjpa.entity;import javax.persistence.*;@Entity //使用JPA注解配置映射關系,告訴JPA這是一個實體類(和數據表映射的類)
@Table(name = "tbl_user") //@Table來指定和哪個數據表對應;如果省略默認表名類名小寫;
public class User {@Id //這是一個主鍵@GeneratedValue(strategy = GenerationType.IDENTITY) //自增主鍵private Integer id;@Column(name = "last_name",length = 50) //這是和數據表對應的一個列private String lastName;@Column //省略默認列名就是屬性名private String email;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
DAO
package cn.clboy.springbootjpa.repository;import cn.clboy.springbootjpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;/*** 繼承JpaRepository來完成對數據庫的操作* 泛型是(實體類,主鍵)*/
public interface UserRepository extends JpaRepository<User, Integer> {}
配置文件
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.DriverinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻filters: stat,wallmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
添加用戶
- http://localhost:8080/user?lastName=zhangsan&email=123456@qq.com
- http://localhost:8080/user?lastName=lisi&email=78215646@qq.com
- http://localhost:8080/user/1,拋出500錯誤,原因是getOne方法使用的懶加載,獲取到的只是代理對象,轉換為json時會報錯
解決懶加載
- 關閉懶加載,在實體類上加上@Proxy(lazy = false)注解
@Entity @Table(name = "tbl_user") @Proxy(lazy = false) public class User
- 轉Json的時候忽略hibernateLazyInitializer和handler屬性
@Entity @Table(name = "tbl_user") @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"}) public class User
?