Étant donné que j'écris en utilisant le temps d'intervalle, je vous serais reconnaissant si vous pouviez indiquer les parties avec une précision médiocre. Tout d'abord, excluez ceux qui sont EOL. Nous considérerons les fonctions payantes, mais nous ne les utiliserons pas réellement, en raison du problème des poches. La base de données utilisée est fixée à Postgre pour une raison stupide telle que "Eh bien, peut-être que Postgre peut être utilisé même s'il n'est pas spécifié."
ORM | Transaction | Data Model | DSL |
---|---|---|---|
○ | ○ | × | × |
○: Correspondance ×: non pris en charge
SelectByIdTest.java
EmployeeDao dao = new EmployeeDaoImpl();
AppConfig.singleton().getTransactionManager().required(() -> {
Employee e1 = dao.selectById(BigDecimal.ZERO);
});
SelectByFirstNameAsStreamTest.java
EmployeeDao dao = new EmployeeDaoImpl();
AppConfig.singleton().getTransactionManager().required(() -> {
// EmployeeDao#selectByFirstNameAsStream(String)Est une signature ajoutée manuellement
Employee e1 = dao.selectByFirstNameAsStream("John");
});
EmployeeDao.java
//Les noms d'argument et les paramètres utilisés dans le fichier SQL doivent avoir le même nom
@Select
Stream<Employee> selectByFirstNameAsStream(String first_name);
META-INF/~/EmployeeDao/selectByFirstNameAsStream.sql
select
/*%expand*/*
from
employee
where
first_name = /* first_name */1
SelectByFirstNameForCountTest.java
EmployeeDao dao = new EmployeeDaoImpl();
AppConfig.singleton().getTransactionManager().required(() -> {
System.out.println(
// EmployeeDao#selectByFirstNameForCount(String, Function<Stream<Employee>, AtomicInteger>)Est une signature ajoutée manuellement
dao.selectByFirstNameForCount(
"Taro",
e -> new AtomicInteger((int)e.count())));
});
EmployeeDao.java
//Je ne pensais pas qu'il n'accepterait pas IntFunction
@Select(strategy = SelectType.STREAM)
AtomicInteger selectByFirstNameForCount(String first_name, Function<Stream<Employee>, AtomicInteger> mapper);
META-INF/~/EmployeeDao/selectByFirstNameForCountTest.sql
select
/*%expand*/*
from
employee
where
first_name = /* first_name */1
EmployeeWithPost.java
@Entity(naming = NamingType.SNAKE_LOWER_CASE)
public class EmployeeWithPost {
/** */
@Id
@Column(name = "id")
BigDecimal id;
/** */
@Column(name = "first_name")
String firstName;
/** */
@Column(name = "middle_name")
String middleName;
/** */
@Column(name = "last_name")
String lastName;
/** */
@Id
@Column(name = "post_id")
BigDecimal postId;
/** */
@Column(name = "name")
String name;
public void setId(BigDecimal id) {
this.id = id;
}
public BigDecimal getId() {
return this.id;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return this.firstName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getMiddleName() {
return this.middleName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return this.lastName;
}
public void setPostId(BigDecimal postId) {
this.postId = postId;
}
public BigDecimal getPostId() {
return this.postId;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public String toString() {
return "EmployeeWithPost["
+ this.id
+ ":"
+ this.firstName.trim()
+ "/"
+ this.middleName.trim()
+ "/"
+ this.lastName.trim()
+ " "
+ this.postId
+ "-"
+ this.name.trim()
+ "]";
}
}
EmployeeWithPostDao.java
@Dao(config = ORMConfig.class)
public interface EmployeeWithPostDao {
@Select
public List<EmployeeWithPost> selectByEmployeeId(BigDecimal employeeId);
}
META-INF/(nom du paquet)/EmployeeWithPostDao/selectByEmployeeId.sql
select
employee.id AS id,
employee.first_name AS first_name,
employee.middle_name AS middle_name,
employee.last_name AS last_name,
post.id AS post_id,
post.name AS name
from
employee
INNER JOIN
post
ON
post.employee_id = employee.id
where
employee_id = /* employeeId */1
@ Singleton
.@ Singleton
, utilisez l'instance obtenue par ʻAppConfig.singleton ()`@ Singleton
, utilisez l'instance obtenue par new AppConfig ()
.@ Singleton
, créé est sans @ Singleton
, le code de test est comme exemple, le résultat n'a pas fonctionné@ Singleton
avec le code sans @ Singleton
, DAO et AppConfig seront des transactions distinctes des spécifications ci-dessus.Recommended Posts