Spring Data Jpa 学习
什么是Spring Data JPA
Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。
在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。必须编写太多样板代码来执行简单查询以及执行分页和审计。Spring Data JPA旨在减少实际需要的工作量来显著改善数据访问层的实现。
引入依赖和配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/chapter05?characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root #表示Jpa对应的数据库是mysql spring.jpa.show-sql=true #项目启动时根据实体类更新数据库中的表 spring.jpa.hibernate.ddl-auto=update
Spring Data JPA的使用
创建实体类
package com.example.lambdatest.entity;
import lombok.Data;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
@Data
@Entity(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Transient
private String ext;
public String getExt() {
return ext;
}
public void setExt(String ext) {
this.ext = ext;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
注意id不应get,set否组会报错
@Entity注解表示该类是一个实体类,在项目启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表名为类名
所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GneeratedValue注解表示主键自动生成,strategy则表示主键的生成策略
默认情况下,生成的表中字段的名称时实体类中属性的名称,通过@Column注解可以定制生成的字段的属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空
@Transient注解表示在生成数据库的表时,该属性被忽略,即不生成对应的字段
JPA自带的几种主键生成策略:
TABLE:使用一个特定的数据库表格来保存主键
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要于generator一起使用,generator指定生成主键的生成器
IDENTITY:主键由数据库自动生成(主要支持自动增长的数据库,如mysql)
AUTO:主键由程序控制,也是GenerationType的默认值
dao层
package com.example.lambdatest.dao; import com.example.lambdatest.entity.User; import org.springframework.data.jpa.repository.JpaRepository; public interface MyUserDao extends JpaRepository<User,Integer> { }
controller层
@RequestMapping(value = "/addUser", method= RequestMethod.GET) public void addUser(){ User my_user=new User(); my_user.setUsername("wc"); my_user.setPassword("test"); //my_user.setId(1); myUserService.addUser(my_user); }