定义
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

网友评论