训练大纲(第114天)
大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。
第219次(SpringBoot)
学习主题:SpringBoot
学习目标:
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
1. SpringBoot整合Spring Data JPA步骤-(上)
(1) 创建一个Maven的jar工程。
(2) 修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。
(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为主键。
(2) 创建Dao接口继承JpaRepository接口。
(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接口中有哪些常见方法?
增删改查的操作方法
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接口的继承结构是什么样的?
(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注解的作用是什么?
清除缓存的数据
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。