欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第四篇:SpringBoot 整合JPA

程序员文章站 2022-06-17 11:56:16
...

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();
    }
}

当你启动工程后,会自动在数据库创建两张表

第四篇:SpringBoot 整合JPA

一张表是自增序列使用,一张表就是我们自己新建的实体对象表。有没有感觉很方便呢,为我们省去了很多的时间。

表有了,接下来我们访问新增接口:http://localhost/teacher/add?name=test1&age=25

就会有相应的数据返回了。查看数据库确实新增成功。

接下来我们访问,列表接口:http://localhost/teacher/list?id

当id为空时,就会返回所有的数据:如图

第四篇:SpringBoot 整合JPA

当id有值时,只会返回当前id的数据:

第四篇:SpringBoot 整合JPA

因为没有做处理所以只返回地址。

欢迎关注我的公众号我们一起学习:

第四篇:SpringBoot 整合JPA

源码地址:springboot-jpa