[JSUG Study Group 2019 Part 1 Spring Data JDBC Official Release Commemoration! Soutenez Mybatis en écoutant Easy-to-understand Spring Data JDBC sur Data Access Special J'ai décidé de le vérifier en disant que je le fais.
Dans l'enquête, le but est de laisser le standard tel que findById être généré automatiquement, et de gérer les pièces compliquées séparément avec le fichier externe de MyBatis.
Créez un mappeur À ce stade, l'espace de noms peut être arbitraire. La raison est que cette méthode utilise l'implémentation par défaut "Spring JDBC" pour DataAccessStrategy.
<mapper namespace="com.example.mapper">
<select id="findByName" resultType="Employee">
Créez une interface pour une opération personnalisée comme référencée
public interface EmployeeRepositoryExtension {
public List<Employee> findByLastName(String lastName);
}
Créez une classe d'implémentation pour les opérations personnalisées comme référencées Il n'y a pas de problème si l'argument "instruction" spécifié ici correspond à la définition du mappeur.
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);
}
}
Hériter à d'autres interfaces de référentiel comme référencées
public interface EmployeeRepository extends CrudRepository<Employee, Long>, EmployeeRepositoryExtension {
@Query("SELECT * FROM employee WHERE first_name = :firstName")
public List<Employee> findByFirstName(@Param("firstName") String firstName);
}
Comme décrit dans [Référence «Utilisation combinée de l'implémentation»](https://qiita.com/kazuki43zoo/items/bd63d28dc2348aa21719# Utilisation combinée de l'implémentation), il semble que DataAccessStrategy puisse être bien défini. (Non vérifié)
[MyBatisDataAccessStrategy](https://github.com/spring-projects/spring-data-jdbc/blob/master/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybattrata/MyBatessategy. Il y a une atmosphère qui semble être possible en utilisant MyBatisDataAccessStrategy # createCombinedAccessStrategy (...) comme si vous regardiez java).
https://github.com/tac-yacht/Sample-SpringDataJDBC-mix-MyBatis
Si vous regardez Création de requête, vous pouvez voir le nom de la méthode. Comme base de génération, il existe déjà une atmosphère qui semble générer automatiquement des requêtes, donc si vous pouvez l'utiliser, il s'agit essentiellement d'une génération automatique, et si c'est trop compliqué à générer, je veux gratter la requête avec MyBatis (Ne peut pas être utilisé à partir de 1.0.4) Cependant, je suis personnellement heureux car je n'ai pas besoin d'écrire findById etc. à ce stade.
Quand 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
@Lors d'une requête personnalisée avec une requête
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 = ?]
Lors de la génération d'une requête intégrée
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