第四篇:SpringBoot 整合JPA
JPA是什么?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。想了解更多请自行百度百科。
JPA
JPA的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码实现该API,而不是使用某个供应商特有的API。
JPA是需要Provider来实现其功能,其中Hibernate就是JPA Provider中很强大的一个,其实,JPA一颗说就是Hibernate众多功能中的一个子集。
新建一个工程:
完整的pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wujie</groupId>
<artifactId>springboot-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-jpa</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<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>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>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在application.yml中配置数据源:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/my?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
jpa:
hibernate:
ddl-auto: update #第一次建表create 后面用update
show-sql: true
在使用jpa的时候,需要注意ddl-auto的一些使用,避免数据库被删除重建,例如:通过jpa在数据库中建表需要将ddl-auto改为create,建完表以后需要改为update,否则每次重启工程会删除表进行重建。
创建实体类:
@Entity
public class Teacher {
@Id
@GeneratedValue
/**
* id,主键
*/
private Integer id;
/**
* 年龄
*/
private Integer age;
/**
* 姓名
*/
private String name;
//...省略getter,setter方法
}
创建Dao层
public interface TeacherDao extends JpaRepository<Teacher,Integer> {
}
创建一个dao接口来继承JpaResository的接口,就能完成数据的访问,其中包含了基本的单表的增删改查方法,十分的快捷与方便。这里有一个Teacher名字,它是对象的名字,而不是具体的数据库的表名,Integer则是指主键的类型。
创建service层
public interface TeacherService {
Teacher add (Teacher teacher);
Teacher update(Teacher teacher);
int delete(Integer id);
Teacher findTeacherById(Integer id);
List<Teacher> findTeacher();
}
创建service实现层
@Service
public class TeacherServiceImpl implements TeacherService {
@Autowired
private TeacherDao teacherDao;
@Override
public Teacher add(Teacher teacher) {
Teacher save = teacherDao.save(teacher);
return save;
}
@Override
public Teacher update(Teacher teacher) {
return teacherDao.saveAndFlush(teacher);
}
@Override
public int delete(Integer id) {
teacherDao.deleteById(id);
return 0;
}
@Override
public Teacher findTeacherById(Integer id) {
Optional<Teacher> teacher = teacherDao.findById(id);
if (teacher != null) {
return teacher.get();
}
return null;
}
@Override
public List<Teacher> findTeacher() {
return teacherDao.findAll();
}
}
创建controller层
@RestController
@RequestMapping("teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
@RequestMapping(value = "add")
public String addTeacher(Teacher teacher){
Teacher teacher1 = teacherService.add(teacher);
return teacher1.toString();
}
@RequestMapping(value = "list")
public Object list(@RequestParam("id") Integer id){
if(id == null){
return teacherService.findTeacher();
}else {
return teacherService.findTeacherById(id).toString();
}
}
@RequestMapping("update")
public String updateTeacher(Teacher teacher){
Teacher teacher1 = teacherService.update(teacher);
return teacher1.toString();
}
}
当你启动工程后,会自动在数据库创建两张表
一张表是自增序列使用,一张表就是我们自己新建的实体对象表。有没有感觉很方便呢,为我们省去了很多的时间。
表有了,接下来我们访问新增接口:http://localhost/teacher/add?name=test1&age=25
就会有相应的数据返回了。查看数据库确实新增成功。
接下来我们访问,列表接口:http://localhost/teacher/list?id
当id为空时,就会返回所有的数据:如图
当id有值时,只会返回当前id的数据:
因为没有做处理所以只返回地址。
欢迎关注我的公众号我们一起学习:
源码地址:springboot-jpa
下一篇: 老母鸡高压锅炖多长时间可以熟