热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot+jpa显示完整sql_SpringBoot整合springdata和缓存

学习主题:SpringBootSpringBoot整合SpringDataJPA步骤-(上)创建一个Maven的jar工程。修改POM文件添加Web启动器࿰

学习主题:SpringBoot

  1. SpringBoot整合Spring Data JPA步骤-(上)
    1. 创建一个Maven的jar工程。
    2. 修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。



org.springframework.boot spring-boot-starter-data-jpa

  1. 修改POM文件添加MySQL数据库、数据库连接池坐标。


mysqlmysql-connector-java


com.alibabadruid1.0.9

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

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/kaoshi1?useUnicode=true&charsetEncoding=utf-8&useSSL=true&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=rootspring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.cyj.pojo
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

  1. SpringBoot整合Spring Data JPA步骤-(下)
    1. 创建Users实体类,包含id、name、age、address属性,其中id为主键。

package com.cyj.pojo;import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;@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;}@Overridepublic String toString() {return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";}
}

  1. 创建Dao接口继承JpaRepository接口。

package com.cyj.dao;
import com.cyj.pojo.Users;
importorg.springframework.data.jpa.repository.JpaRepository;
/*** @author cyj* @date 2019-11-21 10:49*/
public interface UsersRepository extends JpaRepository {
}

  1. 在工程中添加测试启动器。


org.springframework.bootspring-boot-starter-test

  1. 创建启动类。

package com.cyj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*** @author cyj* @date 2019-11-19 14:37*/
@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

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

@Autowired
private UsersRepository usersRepository;@Test
public void testSave() {Users users = new Users();users.setAddress("北京市海淀");users.setAge(20);users.setName("张三");this.usersRepository.save(users);
}

  1. SpringBoot整合Spring Data JPA-Repository接口使用
    1. 在Spring Data JPA中提供了几个核心接口?

5个

1 Repository 接口

2 CrudRepository 接口

3 PagingAndSortingRepository 接口

4 JpaRepository 接口

5 JPASpecificationExecutor 接口

  1. Repository接口的作用是什么?

标识接口

  1. 方法名称命名查询方式的规则是什么?

findBy(关键字)+属性名称(首字符大写)+查询条件(首字母大写)

  1. @Query注解的作用是什么?

可以使用@Query注解实现查询

  1. @Modifying注解的作用是什么?

表示需要执行一个更新操作

  1. SpringBoot整合Spring Data JPA-CrudRepository接口使用
    1. CrudRepository接口的作用是什么?

CRUD操作

  1. CrudRepository接口的继承结构是什么样的?
4be1d482a008c3114e20c320f571b514.png
  1. CrudRepository接口中有哪些常见方法?
fd3486ddd3b358bc891fcd3e51dca9b1.png
  1. SpringBoot整合Spring Data JPA-PagingAndSortingRepository接口使用
    1. PagingAndSortingRepository接口的作用是什么?

分页与排序操作

  1. PagingAndSortingRepository的继承结构是什么样的?
36f32a720a4db764df77a58f8245abb7.png
  1. PagingAndSortingRepository排序的步骤是什么?

1 定义order对象定义排序规则

2 将order对象传递给sort,sort封装了排序规则

3 将sort传递给findAll方法,由实现PagingAndSortingRepository接口的类来调用findAll方法

  1. PagingAndSortingRepository分页的步骤是什么?

1 定义pageable对象,该对象有两个参数:page:当前页 size:每页显示的条数

2 将pageable对象传递给findAll方法

  1. SpringBoot整合Spring Data JPA-JpaRepository接口使用
    1. JpaRepository接口的作用是什么?

对从父接口所继承的方法对返回值做适配处理

  1. JpaRepository继承结构是什么样的?
a947cd19fa845785980de58b4ce9947b.png
  1. Spring Data JPA-JPASpecificationExecutor接口使用
    1. JPASpecificationExecutor接口的作用是什么?

条件查询以及分页处理

  1. JPASpecificationExecutor接口的继承结构是什么样的?

单独存在

  1. Specification对象的作用是什么?

用于封装查询条件

  1. SpringBoot整合Spring Data JPA-建立双向一对多关联映射
    1. @GeneratedValue注解的作用是什么?

可以设置组件生成策略是自增长还是别的

  1. @ManyToOne注解的作用是什么?

表示关联关系:多对一

  1. @JoinColumn注解的作用是什么?

维护一个外键

  1. SpringBoot整合Spring Data JPA-建立双向多对多关联映射
    1. @ManyToMany注解的作用是什么?

表示关联关系:多对多

  1. @JoinTable注解的作用是什么?

映射中间表

  1. 创建一个菜单实体,包含menusid、menusname、menusurl、fatherid属性,与Roles为多对多关联关系,一个角色可以拥有多个菜单,一个菜单可以分配个多个角色。

package com.cyj.pojo;import javax.persistence.*;
import java.util.HashSet;/*** @author cyj* @date 2019-11-21 11:08*/
@Entity
@Table(name = "t_menus")
public class Menus {&#64;Id&#64;GeneratedValue(strategy &#61; GenerationType.IDENTITY)&#64;Column(name &#61; "menusid")private Integer menusid;&#64;Column(name &#61; "menusname")private String menusname;&#64;Column(name &#61; "menusurl")private String menusurl;&#64;Column(name &#61; "fatherid")private Integer fatherid;&#64;ManyToMany(mappedBy &#61; "menus")private Set roles &#61; new HashSet<>();public Integer getMenusid() {return menusid;}public void setMenusid(Integer menusid) {this.menusid &#61; menusid;}public String getMenusname() {return menusname;}public void setMenusname(String menusname) {this.menusname &#61; menusname;}public String getMenusurl() {return menusurl;}public void setMenusurl(String menusurl) {this.menusurl &#61; menusurl;}public Integer getFatherid() {return fatherid;}public void setFatherid(Integer fatherid) {this.fatherid &#61; fatherid;}public Set getRoles() {return roles;}public void setRoles(Set roles) {this.roles &#61; roles;}&#64;Overridepublic String toString() {return "Menus [menusid&#61;" &#43; menusid &#43; ", menusname&#61;" &#43; menusname &#43; ", menusurl&#61;" &#43; menusurl &#43; ", fatherid&#61;" &#43; fatherid &#43; "]";}
}

  1. SpringBoot整合Spring Data JPA-操作双向多对多关联映射
    1. 编写测试代码&#xff0c;创建角色一个对象&#xff0c;创建两个菜单对象&#xff0c;建立角色对象与菜单对象的关系&#xff0c;并插入到表中。

&#64;Autowired
private RolesRepository rolesRepository;/*** 添加测试 */
&#64;Test
public void testSave() { //创建角色对象 Roles r &#61; new Roles();r.setRolename("项目经理"); //创建菜单对象 Menus menus &#61; new Menus();menus.setMenusname("xxxx 管理系统");menus.setFatherid(0);Menus menus2 &#61; new Menus();menus2.setFatherid(1);menus2.setMenusname("项目管理"); //关联 r.getMenus().add(menus);r.getMenus().add(menus2);menus.getRoles().add(r);menus2.getRoles().add(r); //保存 this.rolesRepository.save(r);
}

  1. Spring Boot整合Ehcache步骤
    1. 什么是Ehcache&#xff1f;

通过 Ehcache实现对数据本地的缓存 , 用于单体架构的项目中

  1. Spring整合Ehcache的步骤是什么&#xff1f;

四个步骤&#xff1a;

1 添加对应坐标

2 创建ehcache.xml定义缓存策略

3 spring全局配置文件添加语句使其加载ehcache.xml

4 启动类加上&#64;EnableCaching启动缓存

  1. Ehcache的配置文件应该放在项目的什么位置&#xff1f;

src/main/resources/ehcache.xml

  1. Spring整合Ehcache需要在全局配置文件中配置什么&#xff1f;

#连接数据库
spring.datasource.driverClassName&#61;com.mysql.jdbc.Driver
spring.datasource.url&#61;jdbc:mysql://localhost:3306/ssm?useSSL&#61;false
spring.datasource.username&#61;root
spring.datasource.password&#61;root
#指定连接池
spring.datasource.type&#61;com.alibaba.druid.pool.DruidDataSource#开启正向工程
spring.jpa.hibernate.ddl-auto&#61;update
spring.jpa.hibernate.generate-ddl&#61;true
#运行时,打印sql语句
spring.jpa.show-sql&#61;true

#使用缓存时需要在启动类上添加&#64;EnableCaching注解 在需要开启注解的方法上添加&#64;Cacheable

#开启ehcache的缓存配置

spring.cache.ehcache.config&#61;ehcache.xml

  1. &#64;EnableCaching注解的作用是什么&#xff1f;

加上&#64;EnableCaching注解表示开启本地缓存

  1. Spring Boot整合&#64;CacheEvict注解使用
    1. &#64;Cacheable注解的作用是什么&#xff1f;

选择缓存的类型,需要在启动类开启

  1. &#64;Cacheable注解的value属性的作用是什么&#xff1f;

这个注解是选择缓存的类型,需要在启动类开启&#64;EnableCaching

  1. &#64;Cacheable注解的key属性的作用是什么&#xff1f;

没有方法参数时&#xff0c;会默认以0为key&#xff0c;当有两个无参方法使用缓存时key会冲突。可以使用数字作为key&#xff0c;不能直接使用字符串

  1. &#64;CacheEvict注解的作用是什么&#xff1f;

&#64;CacheEvict(value&#61;“users”,allEntries&#61;true) 清除缓存中以users 存策略缓存的对象



推荐阅读
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 提升MySQL数据库架构性能的策略与方法
    为了提升MySQL数据库架构的性能,本文探讨了多种策略与方法。首先,分析了影响数据库性能的关键因素,并详细阐述了数据库结构优化的重要性。接着,介绍了数据库设计的基本步骤,包括第一、第二和第三范式的应用,以及反范式化设计的场景。此外,还讨论了数据库物理设计的关键要素,如表定义、索引设计和存储引擎选择,以确保高效的查询响应和数据管理。 ... [详细]
author-avatar
五环4_183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有