JPA 介绍
JPA (Java Persistence API)
集成JPA
jap 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
当然,你需要添加spring-boot-starter-jdbc、mysql-connector-java数据库依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
核心概念
JPA 的核心接口是Repository,接口Repository有两个泛型参数<T, ID>,其中T是我们需要操作的实体类对象,ID是我们数据库实体类对象的唯一主键字段,在JPA中,接口CrudRepository 继承Repository接口为我们提供了复杂的CRUD功能。
下段代码为CrudRepository
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
}
在接口CrudRepository的基础上,JPA提供了PagingAndSortingRepository接口用于实现排序和分页操作。
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1);
}
查询page为1,pageSize为20的数据
repository.findAll(PageRequest.of(1, 20));
Jpa 为我们提供了JpaRepository,在使用Jpa进行数据库操作时,我们可以直接依赖这个接口。
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
实际操作
定义Entity
创建s_user表
CREATE TABLE `s_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(30) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '密码',
`real_name` varchar(30) NOT NULL COMMENT '用户真实姓名',
`mnemonic_code` varchar(30) DEFAULT NULL COMMENT '助记码',
`sex` varchar(30) DEFAULT NULL COMMENT '性别 0 男 1 女',
`created_by` int(11) DEFAULT NULL COMMENT '创建人',
`created_time` datetime(6) DEFAULT NULL COMMENT '创建时间',
`last_modified_by` int(11) DEFAULT NULL COMMENT '更新人',
`last_modified_time` datetime(6) DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Entity
@Data
@Entity
@Table(name = "s_user")
public class SUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "user_name")
private String userName;
@Column(name = "pass_word")
private String passWord;
@Column(name = "real_name")
private String realName;
@Column(name = "mnemonic_code")
private String mnemonicCode;
@Column(name = "sex")
private String sex;
@Column(name = "created_by")
private Integer createdBy;
@Column(name = "created_time",updatable = false)
private Date createdTime;
@Column(name = "last_modified_by")
private Integer lastModifiedBy;
@Column(name = "last_modified_time")
private Date lastModifiedTime;
}
Entity 中常用注解
@Id 表明该字段为数据库主键
@GeneratedValue 表明主键值生成策略
@Cloumn 字段注解
name字段名unique是否唯一nullable是否为空length长度columnDefinition列定义 例如TEXT
Repository
@Repository
public interface UserRepository extends JpaRepository<SUser,Integer> {
}