SpringBoot学习笔记(三):Jpa基本使用
一、Spring Boot Jpa 介绍
Jpa 是什么?
-
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。
-
Spring Data JPA为Java Persistence API(JPA)提供了存储库支持。它简化了需要访问JPA数据源的应用程序的开发。
二、pom.xml引入Maven依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
三、实体类
- @Entity:声明此类为实体类
- @Id:声明实体属性为表主键
- @GeneratedValue:主键生成策略,通过
strategy
属性指定TABLE
使用数据库表来模拟序列产生主键SEQUENCE
根据底层数据库的序列来生成主键,通过@SequenceGenerator
注解指定序列名,条件是数据库支持序IDENTITY
使用数据库ID自增主键,条件是数据库支持AUTO
默认,JPA根据数据库类型自动选择适合的策略
- @Column:声明实体属性的表字段定义
@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;
//省略getter和setter方法、构造方法
}
四、继承 JpaRepository
- JpaRepository继承自PagingAndSortingRepository和QueryByExampleExecutor接口,JpaRepository基于JPA的Repository接口,极大减少了JPA作为数据访问的代码,JpaRepository是实现Spring Data JPA技术访问数据库的关键接口。
public interface UserRepository extends JpaRepository<User, Long>{
User findByUserName(String userName);
}
五、测试类
- @RunWith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合 - @SpringBootTest注解进行单元测试
- @Resource默认按byName实现依赖注入
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTests {
@Resource
private UserRepository userRepository;
@Test
public void testSave() {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
String formattedDate = dateFormat.format(date);
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());
userRepository.delete(userRepository.findByUserName("aa"));
}