1. SpringBoot整合Spring Data JPA步骤-(上)

(1) 创建一个Maven的jar工程。

(2)修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>22-spring-boot-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.ve
rsion>
</properties>
<dependencies>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>

(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.0.9</version>
</dependency>

(4) 修改全局配置文件,添加数据库配置、连接池配置、JPA正向工程配置,显示SQL语句配置。

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
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;
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;
}
@Override
public String toString() {return "Users [id=" + id + ", name=" + name + ", age=" + age +
", address=" + address + "]";
}
}

(2) 创建Dao接口继承JpaRepository接口。

/**
* 参数一 T :当前需要映射的实体
* 参数二 ID :当前映射的实体中的 OID 的类型
*
*/
public interface UsersRepository extends JpaRepository<Users,Integer>
{}

(3) 在工程中添加测试启动器。

<!-- 测试工具的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

(4) 创建启动类。

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);
}
}

(5) 编写测试代码使用正向工程创建表,并在表中插入一条数据。

/**
* 测试类
*
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
public class UsersRepositoryTest {@Autowired
private UsersRepository usersRepository;
@Test
public void testSave(){Users users = new Users();
users.setAddress("北京市海淀");
users.setAge(20);
users.setName("张三");
this.usersRepository.save(users);
}
}

3. SpringBoot整合Spring Data JPA-Repository接口使用

(1) 在Spring Data JPA中提供了几个核心接口?

1 Repository 接口

2 CrudRepository 接口

3 PagingAndSortingRepository 接口

4 JpaRepository 接口

5 JPASpecificationExecutor 接口

(2) Repository接口的作用是什么?

提供了方法名称命名查询方式

提供了基于@Query 注解查询与更新

(3) 方法名称命名查询方式的规则是什么?

/**
* Repository 接口的方法名称命名查询
*
*
*/
public interface UsersRepositoryByName extends Repository<Users,
Integer> {//方法的名称必须要遵循驼峰式命名规则。findBy(关键字)+属性名称(首字母要
大写)+查询条件(首字母大写)
List<Users> findByName(String name);
List<Users> findByNameAndAge(String name,Integer age);
List<Users> findByNameLike(String name);
}

(4) @Query注解的作用是什么?

指定方法要执行的具体SQL或者HQL语句

(5) @Modifying注解的作用是什么?

表示该方法可以执行更新操作,DML操作

4. SpringBoot整合Spring Data JPA-CrudRepository接口使用

(1) CrudRepository接口的作用是什么?

CrudRepository 接口,主要是完成一些增删改查的操作。

(2) CrudRepository接口的继承结构是什么样的?

CredRepository 接口继承 Repository 接口

(3) CrudRepository接口中有哪些常见方法?

5. SpringBoot整合Spring Data JPA-PagingAndSortingRepository接口使用

(1) PagingAndSortingRepository接口的作用是什么?

该接口提供了分页与排序的操作

(2) PagingAndSortingRepository的继承结构是什么样的?

该接口继承 了CrudRepository 接口

(3) PagingAndSortingRepository排序的步骤是什么?

编写接口

/**
*
*PagingAndSortingRepository 接口
*
*/
public interface UsersRepositoryPagingAndSorting extends
PagingAndSortingRepository<Users,Integer> {}

测试代码

/**
* PagingAndSortingRepository 排序测试
*/
@Test
public void testPagingAndSortingRepositorySort() {//Order 定义排序规则
Order order = new Order(Direction.DESC,"id");
//Sort 对象封装了排序规则
Sort sort = new Sort(order);
List<Users> list =
(List<Users>)this.usersRepositoryPagingAndSorting.findAll(sort);
for (Users users : list) {System.out.println(users);
}
}
/**
* PagingAndSortingRepository 分页测试
*/
@Test
public void testPagingAndSortingRepositoryPaging() {//Pageable:封装了分页的参数,当前页,每页显示的条数。注意:他的当前
页是从 0 开始。
//PageRequest(page,size) page:当前页。size:每页显示的条数
Pageable pageable = new PageRequest(1, 2);
Page<Users> page =
this.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);
}
}
}

(4) PagingAndSortingRepository分页的步骤是什么?

/**
* PagingAndSortingRepository 排序+分页
*/
@Test
public void testPagingAndSortingRepositorySortAndPaging() {Sort sort = new Sort(new Order(Direction.DESC, "id"));
Pageable pageable = new PageRequest(1, 2, sort);
Page<Users> page =
this.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继承结构是什么样的?

该接口继承了 PagingAndSortingRepository 接口。

7. Spring Data JPA-JPASpecificationExecutor接口使用

(1) JPASpecificationExecutor接口的作用是什么?

该接口主要是提供了多条件查询的支持,并且可以在查询中添加分页与排序。

(2) JPASpecificationExecutor接口的继承结构是什么样的?

注意 :JPASpecificationExecutor 是单独存在 。 完全独立。

(3) Specification对象的作用是什么?

/**
* Specification<Users>:用于封装查询条件
*/
Specification<Users> spec = new Specification<Users>() {//Predicate:封装了 单个的查询条件
/**
* Root<Users> root:查询对象的属性的封装。
* CriteriaQuery<?> query:封装了我们要执行的查询中的各个部分
的信息,select from order by
* CriteriaBuilder cb:查询条件的构造器。定义不同的查询条件
*/
@Override
public Predicate toPredicate(Root<Users> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {// where name = '张三三'
/**
* 参数一:查询的条件属性
* 参数二:条件的值
*/
Predicate pre = cb.equal(root.get("name"), "张三三");
return pre;
}
};

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 java.util.HashSet;
import java.util.Set;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;@Entity
@Table(name="t_menus")
public class Menus {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="menusid")private Integer menusid;@Column(name="menusname")private String menusname;@Column(name="menusurl")private String menusurl;@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 getMenusname() {return menusname;}public void setMenusname(String menusname) {this.menusname = menusname;}public String getMenusurl() {return menusurl;}public void setMenusurl(String menusurl) {this.menusurl = menusurl;}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;}@Overridepublic String toString() {return "Menus [menusid=" + menusid + ", menusname=" + menusname + ", fatherid=" + fatherid + "]";}
}

10. SpringBoot整合Spring Data JPA-操作双向多对多关联映射

(1) 编写测试代码,创建角色一个对象,创建两个菜单对象,建立角色对象与菜单对象的关系,并插入到表中。

package com.bjsxt.test;import java.util.Optional;
import java.util.Set;
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;
import com.bjsxt.App;
import com.bjsxt.dao.RolesRepository;
import com.bjsxt.pojo.Menus;
import com.bjsxt.pojo.Roles;@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=App.class)
public class ManyToManyTest {@Autowiredprivate RolesRepository rolesRepository;@Testpublic void testSave() {//创建角色对象Roles roles = new Roles();roles.setRolename("项目经理");//创建菜单对象Menus menus = new Menus();menus.setFatherid(-1);menus.setMenusname("拼饭管理平台");menus.setMenusurl(null);//添加关联关系roles.getMenus().add(menus);menus.getRoles().add(roles);//保存数据this.rolesRepository.save(roles);}@Testpublic void testFind() {Optional<Roles> findById = this.rolesRepository.findById(3);Roles roles = findById.get();System.out.println(roles.getRolename());Set<Menus> menus = roles.getMenus();for (Menus menus2 : menus) {System.out.println(menus2);}}
}

11. Spring Boot整合Ehcache步骤

(1) 什么是Ehcache?

ehcache是用来管理缓存的一个工具,其缓存的数据可以放在内存里面,也可以放在硬盘上。

ehcache的核心是cacheManager,一切的ehcache的应用都是从cacheManager开始的。

(2) Spring整合Ehcache的步骤是什么?

修改 pom 文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>23-spring-boot-ehcache</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.ve
rsion>
</properties>
<dependencies>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 测试工具的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- Spring Boot 缓存支持启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Ehcache 坐标 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
</dependencies>
</project>

创建 Ehcache 的配置文件

修改 application.properties 文件

(3) Ehcache的配置文件应该放在项目的什么位置?

(4) Spring整合Ehcache需要在全局配置文件中配置什么?

spring.cache.ehcache.cofnig=ehcache.xml

(5) @EnableCaching注解的作用是什么?

加在App启动类上表示该应用是支持缓存的。

12. Spring Boot整合@CacheEvict注解使用

(1) @Cacheable注解的作用是什么?

添加在service接口实现类的方法上。

@Cacheable 作用:把方法的返回值添加到 Ehcache 中做缓存

(2) @Cacheable注解的value属性的作用是什么?

Value 属性:指定一个 Ehcache 配置文件中的缓存策略,如果么有给定 value,name 则

表示使用默认的缓存策略。

(3) @Cacheable注解的key属性的作用是什么?

给存储的值起个名称,在查询时如果有名称相同的,则直接从缓存中将数据返回。如果没有再去数据库中检索数据。

业务层

@Override
@Cacheable(value="users",key="#pageable.pageSize")
public Page<Users> findUserByPage(Pageable pageable) {return this.usersRepository.findAll(pageable);
}

测试代码

@Test
public void testFindUserByPage(){Pageable pageable = new PageRequest(0, 2);
//第一次查询
System.out.println(this.usersService.findUserByPage(pageable).getTot
alElements());
//第二次查询
System.out.println(this.usersService.findUserByPage(pageable).getTot
alElements());
//第三次查询
pageable = new PageRequest(1, 2);
System.out.println(this.usersService.findUserByPage(pageable).getTot
alElements());
}
}

(4) @CacheEvict注解的作用是什么?

@CacheEvict 作用:清除缓存

业务层

/**
* UsersService 接口实现类
*
*
*/
@Service
public class UsersServiceImpl implements UsersService {@Autowired
private UsersRepository usersRepository;
@Override
@Cacheable(value="users")
public List<Users> findUserAll() {return this.usersRepository.findAll();
}
@Override
//@Cacheable:对当前查询的对象做缓存处理
@Cacheable(value="users")
public Users findUserById(Integer id) {return this.usersRepository.findOne(id);
}
@Override
@Cacheable(value="users",key="#pageable.pageSize")
public Page<Users> findUserByPage(Pageable pageable) {return this.usersRepository.findAll(pageable);
}
@Override
//@CacheEvict(value="users",allEntries=true) 清除缓存中以 users 缓
存策略缓存的对象
@CacheEvict(value="users",allEntries=true)
public void saveUsers(Users users) {this.usersRepository.save(users);
}
}

测试类

@Test
public void testFindAll(){//第一次查询
System.out.println(this.usersService.findUserAll().size());
Users users = new Users();
users.setAddress("南京");
users.setAge(43);
users.setName("朱七");
this.usersService.saveUsers(users);
//第二次查询
System.out.println(this.usersService.findUserAll().size());
}

springboot整合jpa_SpringBoot与SpringDataJPA整合 Ehcache相关推荐

  1. springBoot中shiro与Redis整合的配置文件

                                                                 springBoot中shiro与Redis整合的配置文件 整合依赖: < ...

  2. springboot 引入jdbc驱动_SpringBoot整合jdbc、durid、mybatis详解,数据库的连接就是这么简单...

    SpringBoot底层统一采用SpringData处理数据库,这一章主要来讲一下SpringBoot整合jdbc.durid.mybatis的方式. (一)整合jdbc 整合jdbc主要有三步: 1 ...

  3. springboot整合redis,推荐整合和使用案例(2021版)

    背景:手下新人在初次使用springboot整合redis,大部分人习惯从网上检索到一份配置,然后不知其所以然的复制粘贴到项目中,网上搜索到的配置良莠不齐但又万变不离其宗.由于springboot最大 ...

  4. springboot公共模块打包_SpringBoot 整合篇

    来自:SimpleWu 链接:https://www.cnblogs.com/SimpleWu/p/9798146.html SpringBoot简介 Spring Boot是由Pivotal团队提供 ...

  5. SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃

    SpringBoot一站式功能提供框架(一)整合MybatisPlus.整合Swagger Knif4j.整合Druid多数据源--柚子真好吃 一.前言 二.功能描述 三.具体实现 四.开源地址 一. ...

  6. springboot+feign+nacos+seata+docker整合踏坑实录

    springboot+feign+nacos+seata+docker整合踏坑实录 一.版本 springboot:2.7.2 feign:3.1.5 jdk:19 seata:1.5.2 nacos ...

  7. SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.21 SpringBoot 整合 ActiveMQ

    SpringBoot [黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)] SpringBoot 开发实用篇 文章目录 Spring ...

  8. 视频教程-Springboot+Vue前后的分离整合项目实战-Java

    Springboot+Vue前后的分离整合项目实战 10多年互联网一线实战经验,现就职于大型知名互联网企业,架构师, 有丰富实战经验和企业面试经验:曾就职于某上市培训机构数年,独特的培训思路,培训体系 ...

  9. (转)淘淘商城系列——SSM框架整合之Dao层整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72721093 一个项目中往往有三层即Dao层.Service层和Web层,看标题就知道了,本文 ...

最新文章

  1. Android OpenGL射线拾取手势旋转(二)
  2. 1-4:CSS3课程入门之文本新增属性
  3. 肝!一个非常好用的 Python 魔法库
  4. linux安装mysql不成功怎么处理_Linux上安装MySQL时出现不兼容的解决办法
  5. Python中使用xpath获取Scrtpt里面的内容
  6. 麻省理工线性代数第三讲
  7. 树莓派3B的默认用户名和密码
  8. 永恒之塔4.0单机MYSQL,永恒之塔数据库
  9. 跨界程序员の一 中文GB2312字库下载
  10. 《Option Volatility Pricing》阅读笔记之 Volatility(波动率)
  11. 交叉线 or 直通线 ?
  12. java 倒计时_Java倒计时实现的三种简单方式
  13. 掌门教育们的在线教育直播授课老师,“被一张布困住了”
  14. Ubuntu 安装企业版微信
  15. 湖大计算机人工智能专业导师,湖南大学考研研究生导师简介-贺旭
  16. 计算机老师任课教师寄语,一年级一句话任课老师寄语
  17. ☀️机器学习实战☀️基于 YOLO网络 的人脸识别 |(文末送机器学习书籍~)
  18. MySQL数据库常见面试题二(传智专修学院2017级java4班)
  19. 分享一个好用的第三方登录框架
  20. 背包问题一百块最少硬币数

热门文章

  1. web应用调试工具_如何使用浏览器开发人员工具调试渐进式Web应用程序
  2. 快来学习怎么可视化监控你的Python爬虫
  3. 大厂在用的Python反爬虫手段,破了它!
  4. Python编程 | 新手必会的 9 个 Python 技巧
  5. 处理Redis里的数据
  6. Hive 处理 json 的几个函数
  7. ExtJs2.0学习系列(6)--Ext.FormPanel之第三式(ComboBox篇)
  8. 每天进步一点点《SVD用于压缩》
  9. 【C++】C++类的学习(一)——初识类
  10. leetcode —— 面试题 04.03. 特定深度节点链表