训练大纲(第114天)
大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。
第219次(SpringBoot)
学习主题:SpringBoot
学习目标:
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
- SpringBoot整合Spring Data JPA步骤-(上)
- 创建一个Maven的jar工程。
- 修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
- 修改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>
- 修改全局配置文件,添加数据库配置、连接池配置、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=root
spring.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
- SpringBoot整合Spring Data JPA步骤-(下)
- 创建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;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
- 创建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<Users,Integer> {
}
- 在工程中添加测试启动器。
<!-- 测试工具的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
- 创建启动类。
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);
}
}
- 编写测试代码使用正向工程创建表,并在表中插入一条数据。
@Autowired
private UsersRepository usersRepository;
@Test
public void testSave() {
Users users = new Users();
users.setAddress("北京市海淀");
users.setAge(20);
users.setName("张三");
this.usersRepository.save(users);
}
- SpringBoot整合Spring Data JPA-Repository接口使用
- 在Spring Data JPA中提供了几个核心接口?
5个
1 Repository 接口
2 CrudRepository 接口
3 PagingAndSortingRepository 接口
4 JpaRepository 接口
5 JPASpecificationExecutor 接口
- Repository接口的作用是什么?
标识接口
- 方法名称命名查询方式的规则是什么?
findBy(关键字)+属性名称(首字符大写)+查询条件(首字母大写)
- @Query注解的作用是什么?
可以使用@Query注解实现查询
- @Modifying注解的作用是什么?
表示需要执行一个更新操作
- SpringBoot整合Spring Data JPA-CrudRepository接口使用
- CrudRepository接口的作用是什么?
CRUD操作
- CrudRepository接口的继承结构是什么样的?

- CrudRepository接口中有哪些常见方法?

- SpringBoot整合Spring Data JPA-PagingAndSortingRepository接口使用
- PagingAndSortingRepository接口的作用是什么?
分页与排序操作
- PagingAndSortingRepository的继承结构是什么样的?

- PagingAndSortingRepository排序的步骤是什么?
1 定义order对象定义排序规则
2 将order对象传递给sort,sort封装了排序规则
3 将sort传递给findAll方法,由实现PagingAndSortingRepository接口的类来调用findAll方法
- PagingAndSortingRepository分页的步骤是什么?
1 定义pageable对象,该对象有两个参数:page:当前页 size:每页显示的条数
2 将pageable对象传递给findAll方法
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第220次(SpringBoot)
学习主题:SpringBoot
学习目标:
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
- SpringBoot整合Spring Data JPA-JpaRepository接口使用
- JpaRepository接口的作用是什么?
对从父接口所继承的方法对返回值做适配处理
- JpaRepository继承结构是什么样的?

- Spring Data JPA-JPASpecificationExecutor接口使用
- JPASpecificationExecutor接口的作用是什么?
条件查询以及分页处理
- JPASpecificationExecutor接口的继承结构是什么样的?
单独存在
- Specification对象的作用是什么?
用于封装查询条件
- SpringBoot整合Spring Data JPA-建立双向一对多关联映射
- @GeneratedValue注解的作用是什么?
可以设置组件生成策略是自增长还是别的
- @ManyToOne注解的作用是什么?
表示关联关系:多对一
- @JoinColumn注解的作用是什么?
维护一个外键
- SpringBoot整合Spring Data JPA-建立双向多对多关联映射
- @ManyToMany注解的作用是什么?
表示关联关系:多对多
- @JoinTable注解的作用是什么?
映射中间表
- 创建一个菜单实体,包含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 {
@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;
}
@Override
public String toString() {
return "Menus [menusid=" + menusid + ", menusname=" + menusname + ", menusurl=" + menusurl + ", fatherid=" + fatherid + "]";
}
}
- SpringBoot整合Spring Data JPA-操作双向多对多关联映射
- 编写测试代码,创建角色一个对象,创建两个菜单对象,建立角色对象与菜单对象的关系,并插入到表中。
@Autowired
private RolesRepository rolesRepository;
/*** 添加测试 */
@Test
public void testSave() {
//创建角色对象
Roles r = new Roles();
r.setRolename("项目经理");
//创建菜单对象
Menus menus = new Menus();
menus.setMenusname("xxxx 管理系统");
menus.setFatherid(0);
Menus menus2 = 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);
}
- Spring Boot整合Ehcache步骤
- 什么是Ehcache?
通过 Ehcache实现对数据本地的缓存 , 用于单体架构的项目中
- Spring整合Ehcache的步骤是什么?
四个步骤:
1 添加对应坐标
2 创建ehcache.xml定义缓存策略
3 spring全局配置文件添加语句使其加载ehcache.xml
4 启动类加上@EnableCaching启动缓存
- Ehcache的配置文件应该放在项目的什么位置?
src/main/resources/ehcache.xml
- Spring整合Ehcache需要在全局配置文件中配置什么?
#连接数据库
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#指定连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#开启正向工程
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.generate-ddl=true
#运行时,打印sql语句
spring.jpa.show-sql=true
#使用缓存时需要在启动类上添加@EnableCaching注解 在需要开启注解的方法上添加@Cacheable
#开启ehcache的缓存配置
spring.cache.ehcache.config=ehcache.xml
- @EnableCaching注解的作用是什么?
加上@EnableCaching注解表示开启本地缓存
- Spring Boot整合@CacheEvict注解使用
- @Cacheable注解的作用是什么?
选择缓存的类型,需要在启动类开启
- @Cacheable注解的value属性的作用是什么?
这个注解是选择缓存的类型,需要在启动类开启@EnableCaching
- @Cacheable注解的key属性的作用是什么?
没有方法参数时,会默认以0为key,当有两个无参方法使用缓存时key会冲突。可以使用数字作为key,不能直接使用字符串
- @CacheEvict注解的作用是什么?
@CacheEvict(value=“users”,allEntries=true) 清除缓存中以users 存策略缓存的对象
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。