第四篇:SpringBoot 整合JPA

版权声明:如需转载,请备注出处 https://blog.csdn.net/u013783065/article/details/81091829

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

猜你喜欢

转载自blog.csdn.net/u013783065/article/details/81091829