Da ich mit der Lückenzeit schreibe, würde ich es begrüßen, wenn Sie auf Teile mit geringer Genauigkeit hinweisen könnten. Schließen Sie zunächst diejenigen aus, die EOL sind. Wir werden kostenpflichtige Funktionen in Betracht ziehen, diese jedoch aufgrund des Taschenproblems nicht verwenden. Die verwendete Datenbank ist aus einem dummen Grund wie "Nun, vielleicht kann Postgre verwendet werden, auch wenn es nicht angegeben ist" auf Postgre festgelegt.
ORM | Transaction | Data Model | DSL |
---|---|---|---|
○ | ○ | × | × |
○: Korrespondenz ×: Nicht unterstützt
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)Ist eine manuell hinzugefügte Signatur
Employee e1 = dao.selectByFirstNameAsStream("John");
});
EmployeeDao.java
//In der SQL-Datei verwendete Argumentnamen und Parameter müssen denselben Namen haben
@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>)Ist eine manuell hinzugefügte Signatur
dao.selectByFirstNameForCount(
"Taro",
e -> new AtomicInteger((int)e.count())));
});
EmployeeDao.java
//Ich dachte nicht, dass es IntFunction nicht akzeptieren würde
@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/(Paketnamen)/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
, erstellt ist ohne @ Singleton
, Testcode ist als Beispiel, Ergebnis hat nicht funktioniert@ Singleton
mit dem Code ohne @ Singleton
verwenden, sind DAO und AppConfig separate Transaktionen von den oben genannten Spezifikationen.Recommended Posts