学习主题:SpringBoot
- SpringBoot整合Spring Data JPA步骤-(上)
- 创建一个Maven的jar工程。
- 修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。
org.springframework.boot spring-boot-starter-data-jpa
- 修改POM文件添加MySQL数据库、数据库连接池坐标。
mysqlmysql-connector-java
com.alibabadruid1.0.9
- 修改全局配置文件,添加数据库配置、连接池配置、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
- 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;}@Overridepublic 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 {
}
- 在工程中添加测试启动器。
org.springframework.bootspring-boot-starter-test
- 创建启动类。
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方法
- 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 {&#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; "]";}
}
- SpringBoot整合Spring Data JPA-操作双向多对多关联映射
- 编写测试代码&#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);
}
- Spring Boot整合Ehcache步骤
- 什么是Ehcache&#xff1f;
通过 Ehcache实现对数据本地的缓存 , 用于单体架构的项目中
- Spring整合Ehcache的步骤是什么&#xff1f;
四个步骤&#xff1a;
1 添加对应坐标
2 创建ehcache.xml定义缓存策略
3 spring全局配置文件添加语句使其加载ehcache.xml
4 启动类加上&#64;EnableCaching启动缓存
- Ehcache的配置文件应该放在项目的什么位置&#xff1f;
src/main/resources/ehcache.xml
- 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
- &#64;EnableCaching注解的作用是什么&#xff1f;
加上&#64;EnableCaching注解表示开启本地缓存
- Spring Boot整合&#64;CacheEvict注解使用
- &#64;Cacheable注解的作用是什么&#xff1f;
选择缓存的类型,需要在启动类开启
- &#64;Cacheable注解的value属性的作用是什么&#xff1f;
这个注解是选择缓存的类型,需要在启动类开启&#64;EnableCaching
- &#64;Cacheable注解的key属性的作用是什么&#xff1f;
没有方法参数时&#xff0c;会默认以0为key&#xff0c;当有两个无参方法使用缓存时key会冲突。可以使用数字作为key&#xff0c;不能直接使用字符串
- &#64;CacheEvict注解的作用是什么&#xff1f;
&#64;CacheEvict(value&#61;“users”,allEntries&#61;true) 清除缓存中以users 存策略缓存的对象