目标:Spring Boot 整合 JPA 工具:IDEA--2020.1 学习目标:框架工具集成 本次学习的工程下载链接放到文本最后面
JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范。其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种ORM工具来管理Java应用中的关系数据。 简而言之,JPA提供了使用面向对象的方式操作数据库的功能。JPA充分吸收了现有Hibernate,TopLink,JDO等ORM框架的优势,具有易于使用、伸缩性强等优点。
Spring Data JPA是Spring基于Spring Data框架对于JPA规范的一套具体实现方案,使用Spring Data JPA可以极大地简化JPA 的写法,几乎可以在不写具体实现的情况下完成对数据库的操作,并且除了基础的CRUD操作外,Spring Data JPA还提供了诸如分页和排序等常用功能的实现方案。合理的使用Spring Data JPA可以极大的提高我们的日常开发效率和有效的降低项目开发成本。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
server:
port: 8080
spring:
# 配置数据源信息
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
username: root
password: root
jpa:
show-sql: true # 默认false,在日志里显示执行的sql语句
database: mysql
hibernate.ddl-auto: update #指定为update,每次启动项目检测表结构有变化的时候会新增字段,表不存在时会
新建,如果指定create,则每次启动项目都会清空数据并删除表,再新建
properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect # 使用JPA
创建表时,默认使用的存储引擎是MyISAM,通过指定数据库版本,可以使用InnoDB
database-platform: org.hibernate.dialect.MySQL5Dialect
hibernate:
naming:
#指定jpa的自动表生成策略,驼峰自动映射为下划线格式
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
#physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
public interface SysUserDao extends JpaRepository<SysUser,Long>, Serializable {
}
使用Spring Data JPA,可以通过两种方式使用 JPA 进行数据持久化。
方式一:使用Spring Data JPA 提供的接口默认实现,如上面我们的DAO实现。
方式二:自定义符合Spring Data JPA规则的查询方法,由框架将其自动解析为SQL。
package com.xmaven.service;
import com.xmaven.model.SysUser;
import com.xmaven.util.PageQuery;
import java.util.List;
public interface SysUserService {
/**
* 保存用户
* @param user
*/
public void save(SysUser user);
/**
* 删除用户
* @param id
*/
public void delete(SysUser user);
/**
* 查询全部用户
* @return
*/
public List<SysUser> findAll();
/**
* 查询分页数据
* @return
*/
public Object findPage(PageQuery pageQuery);
}
这个里面需要写一个工具类名叫PageQuery,代码如下
package com.xmaven.util;
public class PageQuery {
private int page;
private int size;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
package com.xmaven.service.impl;
import com.xmaven.dao.SysUserDao;
import com.xmaven.model.SysUser;
import com.xmaven.service.SysUserService;
import com.xmaven.util.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserDao sysUserDao;
@Override
public void save(SysUser user) {
sysUserDao.save(user);
}
@Override
public void delete(SysUser user) {
sysUserDao.delete(user);
}
@Override
public List<SysUser> findAll() {
return sysUserDao.findAll();
}
@Override
public Object findPage(PageQuery pageQuery) {
return sysUserDao.findAll(PageRequest.of(pageQuery.getPage(),
pageQuery.getSize()));
}
}
package com.xmaven.controller;
import com.xmaven.model.SysUser;
import com.xmaven.service.SysUserService;
import com.xmaven.util.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("user")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@PostMapping(value="/save")
public Object save(@RequestBody SysUser user) {
sysUserService.save(user);
return 1;
}
@PostMapping(value="/delete")
public Object delete(@RequestBody SysUser user) {
sysUserService.delete(user);
return 1;
}
@GetMapping(value="/findAll")
public Object findAll() {
return sysUserService.findAll();
}
@PostMapping(value="/findPage")
public Object findPage(@RequestBody PageQuery pageQuery) {
return sysUserService.findPage(pageQuery);
}
}
package com.xmaven.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("SpringBoot API Doc")
.description("This is a restful api document of Spring Boot.")
.version("1.0")
.build();
}
}
打开浏览器,访问:http://localhost:8080/swagger-ui.html,进入swagger接口文档界面。
{ "id": 1, "name": "111", "email": "111@qq.com", "password": "111" } { "id": 2, "name": "222", "email": "222@qq.com", "password": "222" } { "id": 3, "name": "333", "email": "333@qq.com", "password": "333" }
其他的接口留给你们自己去测试
*工程第一次启动记得改application.yml里面的文件,第一次用就改为create,后面再用的话就改为update
hibernate.ddl-auto: create