springbootSpringDataJPA完成CRUD

Posted 风@太@大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springbootSpringDataJPA完成CRUD相关的知识,希望对你有一定的参考价值。

参考博客—恒宇少年:https://www.jianshu.com/p/b6932740f3c0

     纯洁的微笑:http://www.ityouknow.com/springboot/2016/08/20/spring-boo-jpa.html

首先了解JPA是什么?

  JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。

注意:JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品。

spring data jpa

  Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

  spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现。

本文实现目标

  学习并且使用SpringBoot访问mysql数据库,并且结合SpringDataJPA完成CRUD(Create,Read,Update,Delete)简单操作。

一、创建web工程(注意:应选择war包,web,MySQL,JPA组件作为我们开发必备组件)

 

二、打开pom.xml可以看到springboot自动为我们添加了spring-data-jpa、mysql-connector-java的支持

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dyh</groupId>
    <artifactId>lesson_three</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>lesson_three</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <!--spring-data-jpa-->
            <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>
            <!--ysql-connector-java的支持-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <!--如果使用的是内部Tomcat,那么应该注释掉<scope></scope>-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</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>
View Code

 注意:如果使用内部tomcat运行项目需要将spring-boot-starter-tomcat的scope标签注释掉。或者Tomcat一直启动不起来。

  配置文件application.xml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
    driverClassName: com.mysql.cj.jdbc.Driver
    username: root
    password: root

  jpa:
    database: MySQL
    show-sql: true
    hibernate:
#      naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
      ddl-auto: create

jpa.hibernate.ddl-auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:
  ·create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  ·create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  ·update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  ·validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

三、实体类与数据库

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

@Entity
@Table(name = "t_user")
public class User implements Serializable{
    @Id
    @GeneratedValue
    @Column(name = "t_id")
    private int id;

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

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

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=\'" + name + \'\\\'\' +
                ", address=\'" + address + \'\\\'\' +
                ", pwd=\'" + pwd + \'\\\'\' +
                \'}\';
    }
}
View Code

四、创建JPA,使用SpringDataJPA来完成数据库操作

import com.dyh.bean.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.io.Serializable;

public interface UserJpa extends JpaRepository<User,Long>,JpaSpecificationExecutor<User>,Serializable {

}

五、controller层代码(查询与增加操作)

@RestController
public class UserController {

    @Autowired
    private UserJpa userJpa;

    @RequestMapping(value = "/jpalist", method = RequestMethod.GET)
    public List<User> getListUser(){
        List<User> allUser = userJpa.findAll();
        return allUser;
    }

    @RequestMapping(value = "/jpaadd", method = RequestMethod.GET)
    public void addUser(User user){
        User us = new User();
        us.setName("luly");
        us.setAddress("郑州");
        us.setPwd("123456");
        User save = userJpa.save(us);
    }
}

 

补充:

JPA拥有哪些注解呢?
@Entity 声明类为实体或表。
@Table 声明表名。
@Basic 指定非约束明确的各个字段。
@Embedded 指定类或它的值是一个可嵌入的类的实例的实体的属性。
@Id 指定的类的属性,用于识别(一个表中的主键)。
@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。
@Transient 指定的属性,它是不持久的,即:该值永远不会存储在数据库中。
@Column 指定持久属性栏属性。
@SequenceGenerator 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。
@TableGenerator 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。
@AccessType 这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。
@JoinColumn 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。
@UniqueConstraint 指定的字段和用于主要或辅助表的唯一约束。
@ColumnResult 参考使用select子句的SQL查询中的列名。
@ManyToMany 定义了连接表之间的多对多一对多的关系。
@ManyToOne 定义了连接表之间的多对一的关系。
@OneToMany 定义了连接表之间存在一个一对多的关系。
@OneToOne 定义了连接表之间有一个一对一的关系。
@NamedQueries 指定命名查询的列表。
@NamedQuery 指定使用静态名称的查询。

以上是关于springbootSpringDataJPA完成CRUD的主要内容,如果未能解决你的问题,请参考以下文章

spring data jpa+springboot

Scrum框架下如何管理未完成或部分完成的工作

项目管理中,开始到完成完成到开始开始到开始和完成到完成的关系图解

为啥完成端口是win

掌握Thinkphp3.2.0----自动完成

使用 io 完成端口时,WriteFile 是不是会在完成时立即发布完成数据包