你好,歡迎進入江蘇優(yōu)軟數(shù)字科技有限公司官網(wǎng)!
發(fā)布時間:2023-07-25
瀏覽次數(shù):0
項目源碼倉庫地址,https合約
Git倉庫地址(ssh)
git@.com:/.git
項目源碼、ssh合約的倉庫地址
確認數(shù)據(jù)庫已準備好
docker run \\
--name quarkus_test \\
-e POSTGRES_USER=quarkus \\
-e POSTGRES_PASSWORD=123456 \\
-e POSTGRES_DB=quarkus_test \\
-p 5432:5432 \\
-v /xxx:/var/lib/postgresql/data \\
postgres:13.3
創(chuàng)建一個新的maven子項目basic-db
quarkus-tutorials
com.bolingcavalry
1.0-SNAPSHOT
4.0.0
basic-db
io.quarkus
quarkus-arc
io.quarkus
quarkus-agroal
io.quarkus
quarkus-hibernate-orm
io.quarkus
quarkus-jdbc-postgresql
io.quarkus
quarkus-junit5
test
io.rest-assured
rest-assured
test
${quarkus.platform.group-id}
quarkus-maven-plugin
true
build
generate-code
generate-code-tests
maven-compiler-plugin
-parameters
maven-surefire-plugin
org.jboss.logmanager.LogManager
${maven.home}
配置文件
quarkus.datasource.db-kind=postgresql
quarkus.hibernate-orm.log.sql=true
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2
quarkus.datasource.username=quarkus
quarkus.datasource.password=123456
quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.50.43:15432/quarkus_test
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.sql-load-script=import.sql
.-orm..:有六個值,如下表
價值
意義
沒有任何
沒做什么
第一次啟動會建表,之后啟動不會改變
跌落-
每次啟動應用的時候刪除表(數(shù)據(jù)沒了),然后建表,然后執(zhí)行.sql導出數(shù)據(jù)
降低
啟動應用程序時刪除表,但不刪除數(shù)據(jù)庫
保留數(shù)據(jù),升級表結構
檢查表結構是否匹配
.-orm.sql-load-:指定sql文件。 當配置項.-orm..等于drop-and-時,執(zhí)行此sql文件,可用于生成初始化數(shù)據(jù)SQL文件
INSERT INTO known_fruits(id, name) VALUES (1, 'Cherry');
INSERT INTO known_fruits(id, name) VALUES (2, 'Apple');
INSERT INTO known_fruits(id, name) VALUES (3, 'Banana');
編碼:實體類
package com.bolingcavalry.db.entity;
import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.QueryHint;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "known_fruits")
@NamedQuery(name = "Fruits.findAll", query = "SELECT f FROM Fruit f ORDER BY f.name", hints = @QueryHint(name = "org.hibernate.cacheable", value = "true"))
@Cacheable
public class Fruit {
@Id
@SequenceGenerator(name = "fruitsSequence", sequenceName = "known_fruits_id_seq", allocationSize = 1, initialValue = 10)
@GeneratedValue(generator = "fruitsSequence")
private Integer id;
@Column(length = 40, unique = true)
private String name;
public Fruit() {
}
public Fruit(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注解Table確定通過一條名為.的自定義SQL來減少表名,旁邊會使用該注解定義的自增字段的信息。 初始值為10,也就是說當前應用添加的第一條記錄的ID等于表。 只有兩個數(shù)組:id和layer
package com.bolingcavalry.db.service;
import com.bolingcavalry.db.entity.Fruit;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.transaction.Transactional;
import java.util.List;
@ApplicationScoped
public class FruitService {
@Inject
EntityManager entityManager;
public List get() {
return entityManager.createNamedQuery("Fruits.findAll", Fruit.class)
.getResultList();
}
public Fruit getSingle(Integer id) {
return entityManager.find(Fruit.class, id);
}
@Transactional
public void create(Fruit fruit) {
entityManager.persist(fruit);
}
@Transactional
public void update(Integer id, Fruit fruit) {
Fruit entity = entityManager.find(Fruit.class, id);
if (null!=entity) {
entity.setName(fruit.getName());
}
}
@Transactional
public void delete(Integer id) {
Fruit entity = entityManager.getReference(Fruit.class, id);
if (null!=entity) {
entityManager.remove(entity);
}
}
}
單元測試類
package com.bolingcavalry;
import com.bolingcavalry.db.entity.Fruit;
import com.bolingcavalry.db.service.FruitService;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.*;
import javax.inject.Inject;
import java.util.List;
@QuarkusTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class FruitServiceTest {
/**
* import.sql中導入的記錄數(shù)量,這些是應用啟動是導入的
*/
private static final int EXIST_RECORDS_SIZE = 3;
/**
* import.sql中,第一條記錄的id
*/
private static final int EXIST_FIRST_ID = 1;
/**
* 在Fruit.java中,id字段的SequenceGenerator指定了initialValue等于10,
* 表示自增ID從10開始
*/
private static final int ID_SEQUENCE_INIT_VALUE = 10;
@Inject
FruitService fruitService;
@Test
@DisplayName("list")
@Order(1)
public void testGet() {
List list = fruitService.get();
// 判定非空
Assertions.assertNotNull(list);
// import.sql中新增3條記錄
Assertions.assertEquals(EXIST_RECORDS_SIZE, list.size());
}
@Test
@DisplayName("getSingle")
@Order(2)
public void testGetSingle() {
Fruit fruit = fruitService.getSingle(EXIST_FIRST_ID);
// 判定非空
Assertions.assertNotNull(fruit);
// import.sql中的第一條記錄
Assertions.assertEquals("Cherry", fruit.getName());
}
@Test
@DisplayName("update")
@Order(3)
public void testUpdate() {
String newName = "ShanDongBigCherry";
fruitService.update(EXIST_FIRST_ID, new Fruit(newName));
Fruit fruit = fruitService.getSingle(EXIST_FIRST_ID);
// 從數(shù)據(jù)庫取出的對象,其名稱應該等于修改的名稱
Assertions.assertEquals(newName, fruit.getName());
}
@Test
@DisplayName("create")
@Order(4)
public void testCreate() {
Fruit fruit = new Fruit("Orange");
fruitService.create(fruit);
// 由于是第一次新增,所以ID應該等于自增ID的起始值
Assertions.assertEquals(ID_SEQUENCE_INIT_VALUE, fruit.getId());
// 記錄總數(shù)應該等于已有記錄數(shù)+1
Assertions.assertEquals(EXIST_RECORDS_SIZE+1, fruitService.get().size());
}
@Test
@DisplayName("delete")
@Order(5)
public void testDelete() {
// 先記刪除前的總數(shù)
int numBeforeDelete = fruitService.get().size();
// 刪除第一條記錄
fruitService.delete(EXIST_FIRST_ID);
// 記錄數(shù)應該應該等于刪除前的數(shù)量減一
Assertions.assertEquals(numBeforeDelete-1, fruitService.get().size());
}
}
共有五種測試方法。 為了對它們進行排序,您需要使用注釋來修改類,并將值設置為..class。 然后用Order注解修改每個方法intellij idea 數(shù)據(jù)庫關系圖,就可以使用該值來執(zhí)行測試訂單。 測試方法有很多種。 為了便于觀察,使用注釋為每個測試方法命名。 同名intellij idea 數(shù)據(jù)庫關系圖,在IDEA上測試結果如下
IDEA的小坑
運行單元測試
如有侵權請聯(lián)系刪除!
Copyright ? 2023 江蘇優(yōu)軟數(shù)字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服務提供商
13262879759
微信二維碼