Spring Boot 整合Spring Data JPA

房东的猫 提交于 2019-11-27 10:12:25

一、前言

前些时间一直在学习Spring Boot整合Mybatis,现在给大家分享一下我学习JPA的经验,如果发现此文有什么问题或者改正的地方,欢迎大家在博客下面留言.

二、项目搭建

2.1 创建项目

  • 新建一个Spring Initializr项目

  • 创建项目的文件结构以及jdk的版本

    此demo选择的JDK版本为1.8

  • 选择项目所需要的依赖

  • 完成项目创建

2.2 数据库准备

  • 创建数据库

      create database 'bookstudy_jpa' default character set utf8;

    因为使用JPA的方式,在此故不需要创建表,表的创建在项目启动时,会根据实体类自动生成.

2.3 项目构建

  • 2.3.1 创建实体类

      package book.study.springboot_jpa.entity;
      import lombok.Data;
      import javax.persistence.*;
      @Data
      @Entity(name = "t_book")
      public class Book {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Integer id;
          @Column(name = "book_name",nullable = false)
          private String name;
          private String author;
          private String price;
          @Transient
          private String description;
      }
    • @Entity 表示该类是一个实体类,在项目启动时会根据该类自动生成一个表
    • @Id 表示该属性是一个主键,@GeneratedValue 表示该主键自动生成,strategy表示生成策略
    • @Column 定制生成字段的属性,name表示该属性对应在表中字段的名字.默认为实体类的属性
    • @Transient 表示在生成数据表时,该属性别忽略,不生成对应的字段
  • 2.3.2 创建BookDao接口

      public interface BookDao extends JpaRepository<Book, Integer> {
          List<Book> getBookByAuthorStartingWith(String author);
          List<Book> getBookByPriceGreaterThan(Float price);
          @Query(value = "select * from t_book where id = (select max(id) from t_book)", nativeQuery = true)
          Book getMaxIdBook();
          List<Book> getBookByAuthor(String author);
          List<Book> getBookByName(String name);
      }
    • BookDao继承JpaRepository.JpaRepository提供许多基本数据操作方法.
    • 在JPA中,主要方法符合既定规范,Spring Data就能分析开发者的意图. 既定规范可以去官网附录C下查看,也可以参看其他博主的博文
  • 2.3.3 创建BookService类

      @Service
      public class BookService {
          @Autowired
          private BookDao bookDao;
          public void addBook(Book book) {
              bookDao.save(book);
          }
          public Page<Book> getBookByPage(Pageable pageable) {
              return bookDao.findAll(pageable);
          }
          public List<Book> getBookByAuthorStartingWith(String author) {
              return bookDao.getBookByAuthorStartingWith(author);
          }
          public List<Book> getBookByPriceGreaterThan(Float price) {
              return bookDao.getBookByPriceGreaterThan(price);
          }
          public Book getMaxIdBook() {
              return bookDao.getMaxIdBook();
          }
          public List<Book> getBookByAuthor(String author) {
              return bookDao.getBookByAuthor(author);
          }
          public List<Book> getBookByName(String name) {
              return bookDao.getBookByName(name);
          }
      }
    • 在addBook()方法下的save()借口由JpaRepository提供
    • 在getBookByPage()方法下,返回值Page带有分页常用数据.
  • 2.3.4 创建BookController

      @RestController
      public class BookController {
          @Autowired
          private BookService bookService;
          @GetMapping("/save")
          public void save() {
              Book book = new Book();
              book.setAuthor("author");
              book.setName("bookName");
              book.setPrice(23F);
              bookService.addBook(book);
              System.out.println("addBook:"+book.toString());
          }
          @GetMapping("/search")
          public void search() {
              List<Book> bs1 = bookService.getBookByName("bookName");
              System.out.println("getBookByName:" + bs1);
          }
          @GetMapping("/findAll")
          public void findAll() {
              PageRequest pageRequest = PageRequest.of(0, 3);
              Page<Book> page = bookService.getBookByPage(pageRequest);
              System.out.println("总页数:"+page.getTotalPages());
              System.out.println("总记录数:"+page.getTotalElements());
              System.out.println("查询结果:"+page.getContent());
              System.out.println("当前页数:"+(page.getNumber()+1));
              System.out.println("当前页记录数"+page.getNumberOfElements());
              System.out.println("每页记录数:"+page.getSize());
          }
      }
  • 2.3.5 修改配置文件

      spring:
        datasource:
          type: com.alibaba.druid.pool.DruidDataSource
          url: jdbc:mysql://localhost:3306/bookstudy_jpa?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
          username: root
          password: password
        jpa:
          show-sql: true
          database: mysql
          hibernate:
            ddl-auto: update
          properties:
            hibernate:

三、运行效果

  • http://localhost:8080/save
    访问前数据库
    访问后控制台信息
    访问后的数据库

  • http://localhost:8080/findAll
    访问后控制台信息

  • http://localhost:8080/search
    /search
    访问后控制台信息

四、参考资料

  • 《Spring Boot + Vue 全栈开发实战》王松 著

  • JPA官方文档的Appendix C: Repository query keywords目录下有相关命名规范

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!