第五章 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优点就是简单上手快,缺点就是无法做复杂度高的查询,例如一对多,多对多等查询。