美文网首页
SpringBoot JPA

SpringBoot JPA

作者: Feng_001 | 来源:发表于2019-12-31 14:52 被阅读0次

定义

1、JPA
JPA(java persistence API)的简称,是处理数据持久化的一个接口,规范。用于管理JavaEE和JavaSE环境中的持久化,以及对象/关系映射的JavaAPI。

2、Spring Data JPA
Spring Data JPA 是 Spring Data 家族的一部分,它很容易实现基于JPA的数据库存储。该模块是基于JPA的数据访问层的增强支持。 基于Spring的项目使用该技术访问数据库变得更加容易。

概念的东西不多说了。看下SpringDataJPA有多容易。

准备

  • IDE IDEA
  • lombok 插件安装(或自行生成Getter Setter)
  • 创建一个空的MVN 项目

POM 文件

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

实体类文件(或删除lombok自行生成Getter Setter)


import lombok.Getter;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Getter
@Setter
@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false, unique = true)
    private String userName;

    @Column(nullable = false)
    private String passWord;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = true, unique = true)
    private String nickName;

    @Column(nullable = false)
    private String regTime;

    public User(String userName, String passWord, String email, String nickName, String regTime) {
        this.userName = userName;
        this.passWord = passWord;
        this.email = email;
        this.nickName = nickName;
        this.regTime = regTime;
    }

    public User() {
    }

    // getter and setter
}

创建持久层接口

import org.springframework.data.jpa.repository.JpaRepository;


public interface UserRepository extends JpaRepository<User,Long> {

    User findByUserNameOrEmail(String userName, String email);

    User findByUserName(String userName);

}

到这里CRUD工作已经完成。
可以不写findByUserNameOrEmail和findByUserName 两个方法。这两个方法不用实现,是Spring Data JPA默认实现 。

测试类 体验SpringData JPA,执行即可到效果

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {

    @Resource
    private UserRepository userRepository;

    @Test
    public void testUserReq() {
        Date data = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = dateFormat.format(data);

        userRepository.save(new User("aa", "aa123456", "aa@126.com", "aa", formattedDate));
        userRepository.save(new User("bb", "bb123456", "bb@126.com", "bb", formattedDate));
        userRepository.save(new User("cc", "cc123456", "cc@126.com", "cc", formattedDate));

        Assert.assertEquals(3, userRepository.findAll().size());

        Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "bb@126.com").getNickName());
        userRepository.delete(userRepository.findByUserName("aa"));

        Assert.assertNull(userRepository.findByUserName("aa"));
    }
}

说明

1、 该项目并未使用application.yml 的配置文件。
2、 数据库使用H2 并默认使用内存数据库
3、 可以增加application.yml 查看sql log活着其它配置

spring:
  jpa:
    show-sql: true
屏幕快照 2019-12-31 下午2.39.56.png

相关文章

网友评论

      本文标题:SpringBoot JPA

      本文链接:https://www.haomeiwen.com/subject/gnvboctx.html