1. SpringBoot整合Spring Data JPA步骤-(上)
(1)创建一个Maven的jar工程。
(2)修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。
<!-- 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>
<!-- springDataJPA的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
(3)修改POM文件添加MySQL数据库、数据库连接池坐标。
<!-- mysql 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
(4)修改全局配置文件,添加数据库配置、连接池配置、JPA正向工程配置,显示SQL语句配置。
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
2.SpringBoot整合Spring Data JPA步骤-(下)
(1)创建Users实体类,包含id、name、age、address属性,其中id为主键。
@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;
(2)创建Dao接口继承JpaRepository接口。
(3)在工程中添加测试启动器。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
(4)创建启动类。
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
(5)编写测试代码使用正向工程创建表,并在表中插入一条数据。
3.SpringBoot整合Spring Data JPA-Repository接口使用
(1)在Spring Data JPA中提供了几个核心接口?
1 Repository 接口
2 CrudRepository 接口
3 PagingAndSortingRepository 接口
4 JpaRepository 接口
5 JPASpecificationExecutor
(2)Repository接口的作用是什么?
提供了方法名称命名查询方式
提供了基于@Query 注解查询与更新
(3)方法名称命名查询方式的规则是什么?
方法的名称必须要遵循驼峰式命名规则。findBy(关键字)+属性名称(首字母要大写)+查询条件(首字母大写)
(4)@Query注解的作用是什么?
(5)@Modifying注解的作用是什么?
表示该语句需要执行一个更新操作
4.SpringBoot整合Spring Data JPA-CrudRepository接口使用
(1)CrudRepository接口的作用是什么?
完成一些增删改查操作
(2)CrudRepository接口的继承结构是什么样的?
(3)CrudRepository接口中有哪些常见方法?
5.SpringBoot整合Spring Data JPA-PagingAndSortingRepository接口使用
(1)PagingAndSortingRepository接口的作用是什么?
对数据进行分页或者排序操作
(2)PagingAndSortingRepository的继承结构是什么样的?
(3)PagingAndSortingRepository排序的步骤是什么?
//排序测试
@Test
public void testPagingAndSortingRepositorySort(){
Sort sort=Sort.by(Sort.Direction.DESC,"id");
List<Users> list = (List<Users>) usersRepositoryPagingAndSorting.findAll(sort);
for (Users users:list){
System.out.println(users);
}
}
(4)PagingAndSortingRepository分页的步骤是什么?
//分页测试
@Test
public void testPagingAndSortingRepositoryPage(){
Pageable pageable= PageRequest.of(0,2);
Page<Users> page = usersRepositoryPagingAndSorting.findAll(pageable);
System.out.println("总条数:"+page.getTotalElements());
System.out.println("总页数:"+page.getTotalPages());
List<Users> list = page.getContent();
for (Users users:list){
System.out.println(users);
}
}
6.SpringBoot整合Spring Data JPA-JpaRepository接口使用
(1)JpaRepository接口的作用是什么?
对继承的父接口中的方法的返回值做适配
(2)JpaRepository继承结构是什么样的?
7.Spring Data JPA-JPASpecificationExecutor接口使用
(1)JPASpecificationExecutor接口的作用是什么?
该接口主要是提供了多条件查询的支持,并且可以在查询中添加分页与排序 。 注意 :JPASpecificationExecutor 是单独存在,完全独立。
(2)JPASpecificationExecutor接口的继承结构是什么样的?
public interface UsersRepositorySpecification extends
JpaRepository<Users,Integer>, JpaSpecificationExecutor<Users> {
}
(3)Specification对象的作用是什么?
用于封装查询条件
8.SpringBoot整合Spring Data JPA-建立双向一对多关联映射
(1)@GeneratedValue注解的作用是什么?
设置主键的属性
(2)@ManyToOne注解的作用是什么?
级联关系,一对多
(3)@JoinColumn注解的作用是什么?
设置该属性在数据库中为外键
9.SpringBoot整合Spring Data JPA-建立双向多对多关联映射
(1)@ManyToMany注解的作用是什么?
级联关系,多对多
(2)@JoinTable注解的作用是什么?
设置多对多的中间表
(3)创建一个菜单实体,包含menusid、menusname、menusurl、fatherid属性,与Roles为多对多关联关系,一个角色可以拥有多个菜单,一个菜单可以分配个多个角色。
package com.bjsxt.pojo;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "t_menus")
public class Menus {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "menusId")
private Integer menusId;
@Column(name = "name")
private String name;
@Column(name = "url")
private String url;
@Column(name = "fatherId")
private Integer fatherId;
@ManyToMany(mappedBy = "menus")
private Set<Roles> roles=new HashSet<>();
public Integer getMenusId() {
return menusId;
}
public void setMenusId(Integer menusId) {
this.menusId = menusId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Integer getFatherId() {
return fatherId;
}
public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
}
public Set<Roles> getRoles() {
return roles;
}
public void setRoles(Set<Roles> roles) {
this.roles = roles;
}
}
package com.bjsxt.pojo;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "t_roles")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "roleId")
private Integer roleId;
@Column(name = "roleName")
private String roleName;
@ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
@JoinTable(name = "t_menus_roles",
joinColumns = @JoinColumn(name = "menus_id"),inverseJoinColumns = @JoinColumn(name ="roles_id" ))
private Set<Menus> menus=new HashSet<>();
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public Set<Menus> getMenus() {
return menus;
}
public void setMenus(Set<Menus> menus) {
this.menus = menus;
}
}
10.SpringBoot整合Spring Data JPA-操作双向多对多关联映射
(1)编写测试代码,创建角色一个对象,创建两个菜单对象,建立角色对象与菜单对象的关系,并插入到表中。
package com.bjsxt;
import com.bjsxt.dao.ManyToManyRepository;
import com.bjsxt.pojo.Menus;
import com.bjsxt.pojo.Roles;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringBootStart.class)
public class ManyToMany {
@Autowired
private ManyToManyRepository manyToManyRepository;
@Test
public void isnertRolesAndMenus(){
//创建菜单
Menus menus=new Menus();
menus.setName("小邪财阀集团管理界面");
menus.setUrl("www.xiaoxie.com");
menus.setFatherId(0);
Menus menus1=new Menus();
menus1.setName("小邪财阀集团后台");
menus1.setUrl("www.xiaoxieHou.com");
menus1.setFatherId(1);
//创建j角色
Roles roles=new Roles();
roles.setRoleName("经理");
//关联
roles.getMenus().add(menus);
roles.getMenus().add(menus1);
menus.getRoles().add(roles);
menus1.getRoles().add(roles);
this.manyToManyRepository.save(roles);
}
}
11.Spring Boot整合Ehcache步骤
(1)什么是Ehcache?
缓冲技术
(2)Spring整合Ehcache的步骤是什么?
1)导入坐标
2)编写ehcache.xml的配置文件
3)修改application.properties的配置文件
4)修改启动类
(3)Ehcache的配置文件应该放在项目的什么位置?
Src/main/resources下
(4)Spring整合Ehcache需要在全局配置文件中配置什么?
spring.cache.ehcache.config=classpath:ehcache.xml
(5)@EnableCaching注解的作用是什么?
Springboot启动的时候会去启动ehcache缓冲
12.Spring Boot整合@CacheEvict注解使用
(1)@Cacheable注解的作用是什么?
将处理的结果存放到缓冲中
(2)@Cacheable注解的value属性的作用是什么?
按照那个缓冲规则来缓冲
(3)@Cacheable注解的key属性的作用是什么?
标识谁可以访问缓存的数据
(4)@CacheEvict注解的作用是什么?
清除缓存的数据