SpringBoot整合JPA
Spring Data:
Spring Data是Spring提供了一个操作数据的框架。而Spring Data Jpa只是Spring Data框架下的一个基于JPA标准操作数据的模块。
Spring Data JPA:
基于JPA的标准对数据进行操作。简化操作持久层的代码。只需要编写接口就可以了。
Spring Data JPA提供的核心接口:
1.Repository接口
提供方法名称命名查询方式
提供基于@Query注解查询与更新
2.CrudRepository接口
继承Repository接口,实现CRUD相关操作
3.PagingAndSortingRepository接口
继承CrudRepository接口,实现分页排序相关操作
4.JpaRepository接口
继承PagingAndSortingRepository接口,实现JPA规范相关操作
5.JPASpecificationExecutor接口
不属于Repository体系,单独存在,提供多条件的支持,并且可以在查询中添加分页和排序
直接写案例测试这五个接口
pom.xml中的依赖包
<dependencies>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- springboot整合jpa需要的依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- 测试工具的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
application.yml
spring:
#配置数据源
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_crud?characterEncoding=utf-8
username: root
password: 123456
#使用druid连接池
type: com.alibaba.druid.pool.DruidDataSource
jpa:
hibernate:
#正向工程,如果数据中没有表,则会创建一张表再更新数据,存在,则会直接更新数据
ddl-auto: update
#打印执行sql语句
show-sql: true
启动类
package com.kevin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* @author kevin
* @version 1.0
* @description SpringBoot整合JPA
* Spring Data:Spring Data是Spring提供了一个操作数据的框架。而Spring Data Jpa只是Spring Data框架下的一个基于JPA标准操作数据的模块。
* Spring Data JPA:基于JPA的标准对数据进行操作。简化操作持久层的代码。只需要编写接口就可以了。
*
* Spring Data JPA提供的核心接口:
* 1.Repository接口
* 提供方法名称命名查询方式
* 提供基于@Query注解查询与更新
* 2.CrudRepository接口
* 继承Repository接口,实现CRUD相关操作
* 3.PagingAndSortingRepository接口
* 继承CrudRepository接口,实现分页排序相关操作
* 4.JpaRepository接口
* 继承PagingAndSortingRepository接口,实现JPA规范相关操作
* 5.JPASpecificationExecutor接口
* 不属于Repository体系,单独存在,提供多条件的支持,并且可以在查询中添加分页和排序
*
* @createDate 2019/3/20
*/
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.kevin.dao")
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class,args);
}
}
Users用户实体类
package com.kevin.entity;
import javax.persistence.*;
/**
* @author kevin
* @version 1.0
* @description 用户实体类
* @createDate 2019/3/20
*/
@Entity // 表示该类为实体类
@Table(name="t_users") // 对应数据库中的表名
public class Users {
@Id // 表示为主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 该主键的策略
@Column(name = "id") // 列名
private Integer id;
@Column(name = "name") // 列名
private String name;
@Column(name = "age") // 列名
private Integer age;
@Column(name = "address") // 列名
private String address;
@ManyToOne(cascade = CascadeType.PERSIST) // ManyToOne表示多对一,cascade = CascadeType.PERSIST属性是级联操作
@JoinColumn(name = "roles_id") // 维护外键
private Roles roles; // 对应的角色
public Users() {
}
public Users(String name, Integer age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Users{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Roles getRoles() {
return roles;
}
public void setRoles(Roles roles) {
this.roles = roles;
}
}
Roles角色实体类
package com.kevin.entity;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* @author kevin
* @version 1.0
* @description 角色实体类
* 一对多
* 一个角色对应多个用户
* @createDate 2019/3/21
*/
@Entity
@Table(name = "t_roles")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="roleid")
private Integer rolei