Spring Data Jpa接口简介
Repository接口
public interface Repository<T, ID> {....}
提供了按方法名称的查询方式;

提供了@Query的查询方式


可能遇到的错误:
1)Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query(手动加@Transactional解决)
2)如果test方法里加事务注解数据不更新的话,还需要手动加@Rollback(false)解决,自己测试的时候,只加了一个@Transactional就更新成功了.
CrudRepository接口
public interface CrudRepository<T, ID> extends Repository<T, ID> {....}
    public void test1 () {
        JpaUser jpaUser = new JpaUser("名称1","地址1",,,);
        Optional<JpaUser> optionalT = userRespotory.findById() ;
        Iterable<JpaUser> list = userRespotory.findAll();
        userRespotory.delete(jpaUser);
        userRespotory.save(jpaUser);//保存or更新
PagingAndSortingRepository接口
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);
    Page<T> findAll(Pageable var1);
}
//测试sort   
 public void test1 () {
        JpaUser jpaUser = new JpaUser("名称1","地址1",,,);
        Sort sort = new Sort(Sort.Direction.DESC,"id");
        Iterable<JpaUser> list = userRespotory.findAll(sort);
//测试page
    public void test1 () {
        JpaUser jpaUser = new JpaUser("名称1","地址1",10,20,100);
        Pageable pageable = PageRequest.of(0, 2);
        Page<JpaUser> page = userRespotory.findAll(pageable);
        System.out.println(page.getTotalElements());//总条数
        System.out.println(page.getTotalPages());//总页数
        System.out.println(page.getContent());//当前页集合
//测试分页+排序
    public void test1 () {
        JpaUser jpaUser = new JpaUser("名称1","地址1",10,20,100);
        Pageable pageable = PageRequest.of(1, 2,Sort.Direction.DESC,"id","age1");
        Page<JpaUser> page = userRespotory.findAll(pageable);
        System.out.println(page.getTotalElements());//总条数
        System.out.println(page.getTotalPages());//总页数
        System.out.println(page.getContent());//当前页集合
JpaRepository接口
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {....}
JpaSpecificationExecutor接口
public interface JpaSpecificationExecutor<T> {
    Optional<T> findOne(@Nullable Specification<T> var1);
    List<T> findAll(@Nullable Specification<T> var1);
    Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
    List<T> findAll(@Nullable Specification<T> var1, Sort var2);
    long count(@Nullable Specification<T> var1);
}
可多条件查询,分页和排序,和以上接口联合使用。
public interface UserSpecificationExcutor extends JpaRepository<JpaUser,Integer> , JpaSpecificationExecutor<JpaUser> {....}
@Autowired
UserSpecificationExcutor userSpecificationExcutor;
@Test
public void test1 () {
Specification<JpaUser> specification = new Specification<JpaUser>() {
@Override
public Predicate toPredicate(Root<JpaUser> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.equal(root.get("name"), "名称1");
List<Predicate> list = new ArrayList<>();
list.add(predicate);
predicate = criteriaBuilder.equal(root.get("age1"), );
list.add(predicate); return criteriaBuilder.and(list.toArray(new Predicate[list.size()]));
}
};
List<JpaUser> list = userSpecificationExcutor.findAll(specification);
System.out.println(list);
一对对关联关系role-user
@Test
public void test1 () {
JpaUser jpaUser = new JpaUser("jpaName","diz地址" , , );
jpaUser.setId();
UserRole userRole = new UserRole();
userRole.setName("role名字");
userRole.setName1("role名字");
userRole.setName2("role名字");
userRole.getUserSet().add(jpaUser);
jpaUser.setUserRole(userRole);
userSpecificationExcutor.save(jpaUser);
package com.example.zs.springDataJpa; import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; @Entity
@Table(name="t_role")
public class UserRole {
@Id( )
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id ;
@Column(name="name")
private String name;
@Column(name="name1")
private String name1;
@Column(name="name2")
private String name2;
@OneToMany(mappedBy="userRole")
private Set<JpaUser> userSet = new HashSet<>(); public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Set<JpaUser> getUserSet() {
return userSet;
} public void setUserSet(Set<JpaUser> userSet) {
this.userSet = userSet;
} public String getName1() {
return name1;
} public void setName1(String name1) {
this.name1 = name1;
} public String getName2() {
return name2;
} public void setName2(String name2) {
this.name2 = name2;
}
}
package com.example.zs.springDataJpa; import javax.persistence.*; @Entity
@Table(name="t_user")
public class JpaUser {
@Column(name="name")
private String name ;
@Column(name="address")
private String address ;
@Column(name="id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id ;
@Column(name="age1")
private Integer age ;
@Column(name="age11")
private Integer age1 ;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="roleFK")
private UserRole userRole; public JpaUser(String name, String address, Integer age, Integer age1 ) {
this.name = name;
this.address = address;
this.age = age;
this.age1 = age1;
// this.id = id;
} public JpaUser() {
} @Override
public String toString() {
return "JpaUser{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", id=" + id +
", age=" + age +
", age1=" + age1 +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Integer getAge1() {
return age1;
} public void setAge1(Integer age1) {
this.age1 = age1;
} public UserRole getUserRole() {
return userRole;
} public void setUserRole(UserRole userRole) {
this.userRole = userRole;
}
}
public interface UserSpecificationExcutor extends JpaRepository<JpaUser,Integer> , JpaSpecificationExecutor<JpaUser> {
}
Spring Data Jpa接口简介的更多相关文章
- Spring Data JPA(一)简介
		Spring Data JPA介绍 可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL(Java Persistence Query Language) ... 
- Spring MVC和Spring Data JPA之获取数据表数据放在List集合,显示在JSP页面
		涉及到很多xml配置没写:只写具体实现的所有类 1.实体类 对应数据表SYS_SBGL, 主键是SBBM,主键是自动生成的uuid 数据表内容如下(有图有真相): package com.jinhet ... 
- Spring data jpa中Query和@Query分别返回map结果集
		引用: http://blog.csdn.net/yingxiake/article/details/51016234 http://blog.csdn.net/yingxiake/article/d ... 
- Spring Boot 之Spring data JPA简介
		文章目录 添加依赖 添加entity bean 创建 Dao Spring Data Configuration 测试 Spring Boot 之Spring data JPA简介 JPA的全称是Ja ... 
- Spring Data JPA 简单查询--接口方法
		一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ... 
- Spring Data - Spring Data JPA 提供的各种Repository接口
		Spring Data Jpa 最近博主越来越懒了,深知这样不行.还是决定努力奋斗,如此一来,就有了一下一波复习 演示代码都基于Spring Boot + Spring Data JPA 传送门: 博 ... 
- Spring Data JPA 提供的各种Repository接口作用
		各种Repository接口继承关系: Repository : public interface UserRepository extends Repository<User, Integer ... 
- Spring Data JPA简单查询接口方法速查
		下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.(1)先按照功能进行分类 ... 
- spring data jpa 之 通用接口
		园主这一阵子接到一个需求,就是将spring data jpa再进行封装,实现通过调用一个baseRepository,来实现每个类的增删改查操作,结合spring data jpa 原有的便捷操作, ... 
随机推荐
- Keep-Alive 是什么?
			Keep-Alive 是什么? 概观 默认情况下,HTTP链接通常在请求完成之后关闭.这意味着服务端在完成响应的交付之后便关闭了TCP链接.为了让链接保持打开,来满足多请求,可以使用keep-aliv ... 
- django信号
			什么是信号? 信号是在某个操作前或后自动触发一些操作. 信号是通知,是一种状态,相当于在某种状态下发特定的消息 --为了实现代码层解耦 村长博客:http://www.cnblogs.com/legu ... 
- How Classes are Found
			转载自: https://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html How Classes are Found ... 
- Codeforces 1155F Delivery Oligopoly  dp(看题解)
			看别人写的才学会的... 我们考虑刚开始的一个点, 然后我们枚举接上去的一条一条链, dp[mask]表示当前已经加进去点的状态是mask所需的最少边数. 反正就是很麻烦的一道题, 让我自己写我是写不 ... 
- Linux系统下一个冷门的RAID卡ioc0及其监控mpt-status
			新接手了一台Linux服务器,准备检查是否有配置RAID.参考(http://mip.0834jl.com) 先查看是否有RAID卡: 复制代码 代码如下: # dmesg|grep -i raid ... 
- WPF使用总结
			ListboxItemContainer样式 一般items控件的项模板 很容易 设置DataTemplate就可以了,比如listbox .但是在选中和失去焦点的时候 却是Windows自带的那种 ... 
- Centos7使用kubeadm部署kubernetes-1.11.2
			1.安装方式 1. 传统方式,以下组件全部运行在系统层面(yum或者rpm包),都为系统级守护进程 2. kubeadm方式,master和node上的组件全部运行为pod容器,k8s也为pod ... 
- Matlab调用遗传工具箱复现论文模型求解部分
			原文转载自:https://blog.csdn.net/robert_chen1988/article/details/52431594 论文来源: https://www.sciencedirect ... 
- angular.uppercase()
			<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- Android第一次作业
			Android第一次作业——天气预报界面 成果图: 思路: 运用RelativeLayout布局管理器来设计整体布局,在其中插入需要的图片和文本框,并设置其字体格式和背景.最后用HorizontalS ... 
