第五章 SpringBoot系列配置JPA访问数据

系列文章目录

第一章 SpringBoot系列之从0搭建项目
第二章 SpringBoot系列返回json数据
第三章 SpringBoot系列GlobalException全局异常捕获
第四章 SpringBoot系列整合Mybatis做增删改查
第五章 SpringBoot系列配置JPA访问数据
第六章 SpringBoot系列使用JdbcTemplate操作数据
第七章 SpringBoot系列静态资源处理,访问磁盘文件


前言

上一章内容主要写配置Mybatis访问数据,本章咱来看看如何配置JPA访问数据,根据自己需要选择持久层框架,JPA使用相对与Mybatis来说非常简单,写写SQL然后了解JPA常用API就能对表做增删改查操作了,适用于简单查询较复杂查询不是那么友好,具体使用哪一种持久层框架根据自己需求评估吧。


提示:以下是本篇文章正文内容,下面案例可供参考

一、JPA持久层框架简介

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

二、mysql建表

/*
Navicat MySQL Data Transfer

Source Server         : test
Source Server Version : 50718
Source Host           : localhost:3306
Source Database       : demo

Target Server Type    : MYSQL
Target Server Version : 50718
File Encoding         : 65001

Date: 2020-10-27 10:04:01
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `person`
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(3) NOT NULL,
  `sex` char(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', 'lc', '18', '男');

三、整合JPA相关配置

1.在pom.xml文件中加入JPA依赖配置、mysql驱动包配置,并导入下载依赖jar包。

pom.xml文件配置:

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.47</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2.application.properties配置

########################################################
###datasource
########################################################
#数据库连接地址
spring.datasource.url = jdbc:mysql://cdb-khlq4cod.gz.tencentcdb.com:10157/demo?useSSL=false
#用户名
spring.datasource.username = root
#密码
spring.datasource.password = Iccc@2020
#驱动包
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
#指定连接池中最大的活跃连接数.
spring.datasource.max-active=20
#指定连接池最大的空闲连接数量.
spring.datasource.max-idle=8
#指定连接池最小的空闲连接数量.
spring.datasource.min-idle=0

#######################################################
## Java Persistence Api
#######################################################
# Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager) 新版本的mysql配置
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
#老版本的mysql 配置
#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect

3.Entity表映射实体类

package com.example.demo.model;

import javax.persistence.*;
import java.io.Serializable;

/**

  • person
  • @author
    */
@Entity
@Table(name = "person")
public class PersonDO implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    @Column(name = "sex")
    private String sex;

    private static final long serialVersionUID = 1L;

    public Long getId() {
        return id;
    }

    public void setId(Long 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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

4.持久层dao

持久层JPA提供了Repository接口,以及其子接口实现了基本的CURD操作,如:CrudRepository,PagingAndSortingRepository,SimpleJpaRepository,QueryDslJpaRepository等,我们在写持久层可继承以上接口使用。

package com.example.demo.dao;

import com.example.demo.model.PersonDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface PersonDao extends JpaRepository<PersonDO, Long> {

    @Query(value = "select id,name,age,sex from person where id = :id", nativeQuery = true)
    public PersonDO selectOne(@Param("id") Long id);
}

5.service层

package com.example.demo.service;

import com.example.demo.dao.PersonDao;
import com.example.demo.model.PersonDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PersonService {

    @Autowired
    private PersonDao personDao;

    public PersonDO selectPersonInfoJpaDemo(Long id) {
        return personDao.selectOne(id);
    }
}

6.controller层

package com.example.demo.controller;

import com.example.demo.dto.JsonDataDTO;
import com.example.demo.model.PersonDO;
import com.example.demo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class DemoController {

    @Autowired
    private PersonService personService;
    
    @RequestMapping("/selectPersonInfoJpaDemo")
    public PersonDO selectPersonInfoJApademo(@RequestParam("id") Long id) {
        return personService.selectPersonInfoJpaDemo(id);
    }
}

四、demo运行效果

浏览器访问:http://localhost:8080/selectPersonInfoJpaDemo?id=1
在这里插入图片描述

总结

本章技术分享主要讲述如何在SpringBoot中运用JPA持久层框架对数据库进行操作,实现起来确实要比Mybatis简单不少,没有了Mybatis的Mapper.xml映射配置文件,通过实现JPA提供抽象接口或注解自定义SQL操作数据库,JPA优点就是简单上手快,缺点就是无法做复杂度高的查询,例如一对多,多对多等查询。

posted @ 2020-10-28 18:11  程序员小召  阅读(130)  评论(0编辑  收藏  举报