[Java][Spring Boot][JPA] 数据库应用 – 使用NetBeans开始Spring Boot (6)
摘要
一句话描述整个事物或情况的简洁概述。
Spring Boot使用Spring Data进行数据库访问。
Spring Data是一个抽象化访问JPA和MongoDB等数据存储的层。
我会使用JPA。
必须制作的东西
实体类 (Shí tǐ
这是与数据库表相对应的类。
如果已经准备好了数据库,使用NetBeans的功能进行生成是很简单的。
从[文件]>[新文件]菜单中,可以通过[Persistence]>[从数据库生成实体类]来从数据库的表中生成Entity类。
存储库接口
这是一个用来操作实体的接口。它是org.springframework.data.repository.Repository<T, ID extends Serializable>接口的派生接口。
作为派生接口,下面的内容已经提前准备好了。
使用方法
如果使用@Autowired等依赖注入到Repository接口上,Spring会自动创建代理实例。
@Component
public class SomeClass {
// ...
@Autowired
private SomeRepository someRepository;
// ...
}
只需要调用已定义的方法即可。
我想要进行除了CRUD之外的操作。
这是关于如何执行除了CRUD操作之外的其他操作的方法,在CrudRepository中事先准备。
方法1- 按照命名规约实现方法。
实现符合以下命名约定的方法,将为方法名称提供相应的行为。
-
- find…By
-
- read…By
-
- get…By
-
- query…By
stream…By Java 8のStreamを返します。
count…By
exists…By
delete…By
remove…By
出现在 “By” 之后的部分将会变成搜索表达式。
副查询部分包括Distinct以及关联实体的名称等。
多种搜索方式
提前准备了各种物品。
在2016/11/11的追记里,解释了关于【Spring Data JPA】自动生成的方法命名规则。
findByFirstnameAndLastname(String lastname)
2項目をOrで結ぶfindByFirstnameOrLastname(String firstname, String lastname)
2項目の間findByCreateDateBetween(Date since, Date to)
After/GreaterThanGreaterThanEqual
Before/LessThan
LessThanEqual
IsNull
IsNotNull
NotIn
In
StartingWith/EndingWith/Containing
NotContaining
Like
NotLike
大文字小文字を無視
findByFirstnameIgnoreCase(String firstname)
ソートfindAllOrderByFirstnameAsc()
findAllOrderByFirstnameDesc()
进入……的事物
Distinct
SQLのDISTINCTと一緒です。Top<数字>
/ First<数字>
先頭から<数字>
レコード分を返します。エンティティ名リレーション先のエンティティを返します。方案2 – 实现带有 @Query 注解的方法
比如说,可以像这样。
@Query("SELECT u FROM User WHERE u.firstname = :firstname")
List<User> findByFirstname(String firstname);
@Query的内容可以使用JPQL吗?
也可以使用Spring表达式语言。
第三种方法-创建一个自定义的类
在实现命名约定和JPQL无法满足的功能时,需要创建自定义类。
假设原先存在这样一个“Repository”接口,
public interface UserRepository extends CrudRepository<User, Long> {}
首先,我们将创建一个具有独特功能的界面。
public interface UserRepositoryCustom {
public void executeSomeOperation(User user);
}
将原先存在的接口进行继承。
public interface UserRepository extends CrudRepository<User, Long>, UserRepositoryCustom {}
我会进一步制作实施方案。
public class UserRepostitoryImpl implements UserRepositoryCustom {
public void executeSomeOperation(User user) {
// なにか特別な処理
}
}
我写得再详细一些。
使用 Custom 类来访问数据库。
考试
测试Repository接口。
我会使用HSQL数据库进行考试。
修改pom.xml
在您的项目中,将测试启动器、JDBC驱动程序和常用的JUnit作为依赖库添加进去。
2016/11/11的版本中,由于junit和hamcrest已经被包含在起始代码中,所以不再需要它们了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
创建一个用于测试的应用程序类
如果没有应用程序类,则创建一个。
package com.example;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories("com.example.repository")
public class TestApplication {
}
通常使用@SpringBootApplication就足够了,但由于存在单独的Repository类,所以添加@EnableJpaRepositories。
编写测试类
在注解中添加@RunWith,指定测试运行器。
我不明白@SpringBootTest和@Transactional在做什么。
2016/11/17 补充说明:@SpringBootTest和@Transactional是不必要的。只需添加@DataJpaTest即可。添加后,它将为我们输出SQL日志。
package com.example.repository;
import com.example.entity.User;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository instance;
@Before
public void setUp() {
// 初期データの用意等
}
@Test
public void testFindSomething() {
// テストを書く
}
}
请提供参考网址。
-
- Spring Data JPA でのクエリー実装方法まとめ
-
- 【Spring Data JPA】自動実装されるメソッドの命名ルール
-
- Spring Data JPAリファレンスマニュアル
-
- Spring Bootリファレンスマニュアル – JPA
Spring Data JPAソースコードレポジトリ
org.springframework.data.repository.query.parser.PartTree.java
Spring Frameworkリファレンスマニュアル – 統合テスト
Testing improvements in Spring Boot 1.4