前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 整合 JPA

Spring Boot 整合 JPA

作者头像
背雷管的小青年
修改2020-06-09 12:21:57
5.4K0
修改2020-06-09 12:21:57
举报

目标: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可以极大的提高我们的日常开发效率和有效的降低项目开发成本。

  • 使用
    • 引入JPA依赖 创建SpringBoot项目,引入 JPA,MySQL,Web依赖,和数据库连接池依赖
代码语言:javascript
复制
<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>

  • 配置连接数据库参数和jpa参数--application.yml
代码语言:javascript
复制
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

  • 然后,编写一个SysUserDao并继承JpaRepository,由此我们已经继承了大部分可用的CURD操作,针对基础操作,DAO完全不用写任何方法。
代码语言:javascript
复制
public interface SysUserDao extends JpaRepository<SysUser,Long>, Serializable {
}

使用Spring Data JPA,可以通过两种方式使用 JPA 进行数据持久化。

方式一:使用Spring Data JPA 提供的接口默认实现,如上面我们的DAO实现。

方式二:自定义符合Spring Data JPA规则的查询方法,由框架将其自动解析为SQL。

  • 接着编写一个服务接口,添加用户保存、删除、查询全部和分页查询的方法。
代码语言:javascript
复制
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,代码如下

代码语言:javascript
复制
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;
    }
    
}

  • 继续编写服务实现类并调用DAO实现相应功能,以下DAO方法都是继承而来的,除此之后,JPA还提供了大量的API可用。
代码语言:javascript
复制
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()));
    }

}

  • 接着编写一个用户控制器,调用服务接口实现对应功能。
代码语言:javascript
复制
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);
    }
    
}

  • 集成swagger--添加一个swagger 配置类,在工程下新建 config 包并添加一个 SwaggerConfig 配置类。
代码语言:javascript
复制
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();
    }

}

代码语言:javascript
复制
打开浏览器,访问:http://localhost:8080/swagger-ui.html,进入swagger接口文档界面。
KNB.png
KNB.png
  • 然后调用save接口,分别插入以下三条数据。

{ "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" }

  • 回来继续调用findAll接口,可以看到我们已经成功的插入了三条数据。
VMM}WRS_VII7H_DQ(H%W49N.png
VMM}WRS_VII7H_DQ(H%W49N.png

其他的接口留给你们自己去测试

*工程第一次启动记得改application.yml里面的文件,第一次用就改为create,后面再用的话就改为update

hibernate.ddl-auto: create

下载链接:springboot-jpa-swagger.rar

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档