jpa save返回值_springboot整合JPA以及整合Cacheable

训练大纲(第114天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第219次(SpringBoot)

学习主题:SpringBoot

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

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

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

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

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

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

(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.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/work?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为主键。

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

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

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

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

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

(4) 创建启动类。

@RunWith(SpringJUnit4ClassRunner.class)
@org.springframework.boot.test.context.SpringBootTest(classes = SpringBootStart.class)
public class SpringBootTest {
    @Autowired
    private UsersDao usersDao;

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

@Test
public  void   isnertser(){
    Users users=new Users();
    users.setName("张三");
    users.setAge(25);
    users.setAddress("安徽合肥");
    this.usersDao.save(users);
}

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

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

1)reposiory:提供方法命名规则查询数据

提供注解@Query查询与更新

2)CrudRepository:提供数据库的增删改查操作

3)PagingAndSortingRepository:提供分页和排序

4)JpaRepository:对前面的接口查询的结果进行装饰与修饰

5)JpaSpecificationRepository:多条件查询与分页,排序

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

reposiory:提供方法命名规则查询数据

提供注解@Query查询与更新

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

//方法的名称必须要遵循驼峰式命名规则。findBy(关键字)+属性名称(首字母要

大写)+查询条件(首字母大写)

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

封装查询的条件的SQL语句和psql语句

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

声明该方法是更新,执行更新操作

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

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

CrudRepository:提供数据库的增删改查操作

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

父接口是Repository

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

增删改查的操作方法

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

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

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

PagingAndSortingRepository:提供分页和排序

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

Repository

继承

CrudRepository

继承

PagingAndSortingRepository

继承

JpaRepository

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

public void testPagingAndSortingRepositorySort() {
  //Order 定义排序规则
       // Order order = new Order(Direction.DESC,"id");
Sort sort = Sort.by( "id");
        List<Users> list =
                (List<Users>)this.userPagingAndSortingRepository.findAll(sort);
        for (Users users : list) {
            System.out.println(users);
        }
    }

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

 @Test
    public void testPagingAndSortingRepositoryPaging() {
  //Pageable:封装了分页的参数,当前页,每页显示的条数。注意:他的当前页是从 0 开始。
//PageRequest(page,size) page:当前页。size:每页显示的条数
PageRequest request = PageRequest.of(0, 1);
        Page<Users> page =
                this.userPagingAndSortingRepository.findAll(request);
        System.out.println("总条数:"+page.getTotalElements());
        System.out.println("总页数"+page.getTotalPages());
        List<Users> list = page.getContent();
        for (Users users : list) {
            System.out.println(users);
        }
    }

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第220次(SpringBoot

学习主题:SpringBoot

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

6. SpringBoot整合Spring Data JPA-JpaRepository接口使用

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

该接口继承了 PagingAndSortingRepository 接口。对继承的父接口

中的方法的返回值进行适配。

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

Repository

继承

CrudRepository

继承

PagingAndSortingRepository

继承

JpaRepository

7. Spring Data JPA-JPASpecificationExecutor接口使用

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

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

分页与排序。注意:JPASpecificationExecutor 是单独存在。完全独

立,但是需要和其他四个接口中的接口结合使用

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

v2-3c40829a650f96ab57be6975d78f8601_b.jpg

(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注解的作用是什么?

清除缓存的数据

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值