jpa:java persistence api java持久化规范
O/R:object-relational mapping
只需要定义一个继承JpaRepository的接口之后就有如下数据访问的操作方法
spring boot整合spring data jpa
导包:spring-boot-starter-data-jpa(当然mysql还是需要导入)
配置:
实体类注解:
1@Entity @Table(name="")标明是一个实体类,一般一起用。如果表名和实体类名相同@Table可以省略
2@Id该属性为主键:注意应该导import javax.persistence.Id;包
3@GeneratedValue:自定义主键生成策略
4@Column:表示列名
5@Transient:表示该属性不在表中,且必须要加
6@Temporal:格式化日期
7@OneToOne
8@OneToMany
9@JoinColumn
10@JoinTable
如果有中间表:则应添加中间表作为实体类,并两个表关联的id都应加@Id注解,多个主键
使用:
1.声明一个接口继承自Reposity或它的一个子接口
2.在接口中定义方法
3.分页使用
Pageable pageRequest = PageRequest.of(page, size);
return problemDao.findWaitListByLabelId(label, pageRequest);
按照条件查询:Criteris查询
Specification是一个接口,要创建匿名内部类
注:root代表根标签,如图片中的,root就代表传进来的label
cb:查询条件标准类,将查询条件放入到cb中,注意接收的是数组,但是外边传来的一般是列表,
查询方法定义:
查询限制结果:使用top,first如
User findFirstByUsernameOrderByUsernameAsc(String username);
List<User> findTop10ByUsername(String username, Sort sort);
List<User> findTop10ByUsername(String username, Pageable pageable);
分页与排序:
public Page<Enterprise> findSearch(Map whereMap, int page, int size) {
Specification<Enterprise> specification = createSpecification(whereMap);
Pageable pageable= PageRequest.of(page - 1, size);
Sort(Direction.ASC,"age")
return enterpriseDao.findAll(specification, pageRequest);
}
自定义查询:@Query JPQL查询语句
@Query("select u from User u where u.email = ?1")
User getByEmail(String eamil);
@Query("select u from User u where u.username = ?1 and u.password = ?2")
User getByUsernameAndPassword(String username, String password);
@Query("select u from User u where u.username like %?1%")
List<User> getByUsernameLike(String username);
多表查询:加nativeQuery=true表示使用原生的sql
自定义接口查询
@NoRepositoryBean
public interface CustomRepository<T,ID> extends Serializable extends PagingAndSortingRepository<T,ID>{}
注:拓展后一个接口是为了能够分页
具体见https://www.jianshu.com/p/c23c82a8fcfc
来源:CSDN
作者:李彦林
链接:https://blog.csdn.net/weixin_43516093/article/details/103837767