JSUG Study Group 2019 Teil 1 Frühlingsdaten JDBC Official Release Commemoration! Datenzugriffs-Sonderfunktion Hören Sie sich leicht verständliche Spring Data JDBC an und unterstützen Sie Mybatis Ich beschloss, es zu überprüfen, indem ich sagte, dass ich es tue.
Bei der Untersuchung besteht das Ziel darin, den Standard wie findById automatisch zu generieren und die komplizierten Teile separat mit der externen Datei von MyBatis zu verwalten.
Erstellen Sie einen Mapper Zu diesem Zeitpunkt kann der Namespace beliebig sein. Der Grund dafür ist, dass diese Methode die Standardimplementierung "Spring JDBC" für DataAccessStrategy verwendet.
<mapper namespace="com.example.mapper">
<select id="findByName" resultType="Employee">
Erstellen Sie eine Schnittstelle für den benutzerdefinierten Betrieb, auf die verwiesen wird
public interface EmployeeRepositoryExtension {
public List<Employee> findByLastName(String lastName);
}
Erstellen Sie eine Implementierungsklasse für benutzerdefinierte Vorgänge, auf die verwiesen wird Es ist kein Problem, wenn das hier angegebene Argument "Anweisung" mit der Mapper-Definition übereinstimmt.
public class EmployeeRepositoryExtensionImpl implements EmployeeRepositoryExtension {
private final SqlSession sqlSession;
public EmployeeRepositoryExtensionImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<Employee> findByLastName(String lastName) {
return this.sqlSession.selectList("com.example.mapper.findByName", lastName);
}
}
Vererben Sie andere Repository-Schnittstellen, auf die verwiesen wird
public interface EmployeeRepository extends CrudRepository<Employee, Long>, EmployeeRepositoryExtension {
@Query("SELECT * FROM employee WHERE first_name = :firstName")
public List<Employee> findByFirstName(@Param("firstName") String firstName);
}
Wie in [Referenz "Kombinierte Verwendung der Implementierung"](https://qiita.com/kazuki43zoo/items/bd63d28dc2348aa21719# Kombinierte Verwendung der Implementierung) beschrieben, kann DataAccessStrategy anscheinend gut definiert werden. (Nicht überprüft)
MyBatisDataAccessStrategy. Es gibt eine Atmosphäre, die mit MyBatisDataAccessStrategy # createCombinedAccessStrategy (...) möglich zu sein scheint, als würde man Java betrachten.
https://github.com/tac-yacht/Sample-SpringDataJDBC-mix-MyBatis
Wenn Sie sich Query Creation ansehen, sehen Sie den Methodennamen. Als Grundlage für die Generierung gibt es bereits eine Atmosphäre, in der Abfragen automatisch generiert werden. Wenn Sie sie also verwenden können, handelt es sich im Grunde genommen um eine automatische Generierung. Wenn die Generierung zu kompliziert ist, möchte ich die Abfrage mit MyBatis kratzen (Kann nicht ab 1.0.4 verwendet werden) Ich persönlich bin jedoch glücklich, weil ich an dieser Stelle keine findById usw. schreiben muss.
Bei Mybatis
2019-02-02 12:04:38.176 DEBUG 3108 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/findByLastName?name=doe", parameters={masked}
2019-02-02 12:04:38.646 DEBUG 3108 --- [nio-8080-exec-1] com.example.mapper.findByName : ==> Preparing: SELECT * FROM employee WHERE last_name = ?
2019-02-02 12:04:38.670 DEBUG 3108 --- [nio-8080-exec-1] com.example.mapper.findByName : ==> Parameters: doe(String)
2019-02-02 12:04:38.704 DEBUG 3108 --- [nio-8080-exec-1] com.example.mapper.findByName : <== Total: 1
@Bei benutzerdefinierten Abfragen mit Abfrage
2019-02-02 12:06:04.184 DEBUG 3108 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : GET "/findByFirstName?name=jone", parameters={masked}
2019-02-02 12:06:04.185 DEBUG 3108 --- [nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public java.lang.Object com.example.Controller.findByFirstName(java.lang.String)
2019-02-02 12:06:04.195 DEBUG 3108 --- [nio-8080-exec-3] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL query
2019-02-02 12:06:04.196 DEBUG 3108 --- [nio-8080-exec-3] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [SELECT * FROM employee WHERE first_name = ?]
Beim Generieren einer integrierten Abfrage
2019-02-02 12:06:07.882 DEBUG 3108 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : GET "/findById?id=1", parameters={masked}
2019-02-02 12:06:07.882 DEBUG 3108 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public java.lang.Object com.example.Controller.findById(java.lang.Long)
2019-02-02 12:06:07.896 DEBUG 3108 --- [nio-8080-exec-4] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL query
2019-02-02 12:06:07.896 DEBUG 3108 --- [nio-8080-exec-4] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [SELECT employee.id AS id, employee.first_name AS first_name, employee.last_name AS last_name FROM employee WHERE employee.id = ?]
Recommended Posts