[JAVA] Compatibilité de Spring JDBC et My Batis avec Spring Data JDBC (provisoire)

[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.

Utiliser des opérations personnalisées

  1. 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">
    
  2. Créez une interface pour une opération personnalisée comme référencée

    public interface EmployeeRepositoryExtension {
        public List<Employee> findByLastName(String lastName);
    }
    
  3. 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);
    	}
    }
    
  4. 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);
    }
    

Jouez avec DataAccessStrategy

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).

Matériel de référence

La source

https://github.com/tac-yacht/Sample-SpringDataJDBC-mix-MyBatis

Impressions

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.

Annexe: Journal des résultats d'exécution

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

Compatibilité de Spring JDBC et My Batis avec Spring Data JDBC (provisoire)
Spring avec Kotorin --2 RestController et Data Class
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Jusqu'à l'acquisition de données avec Spring Boot + MyBatis + PostgreSQL
Mettre à jour périodiquement la base de données avec Spring Batch et My Batis
Aperçu de Spring Data JDBC
Jusqu'à l'utilisation de Spring Data et JPA Part 2
Jusqu'à l'utilisation de Spring Data et JPA Part 1
Utiliser Spring JDBC avec Spring Boot
Agrégation de fenêtres de données de capteurs avec Apache Flink et Java 8
Remarques sur l'utilisation de Spring Data JDBC
Utilisez JDBC avec Java et Scala.
Notez que Spring Data JDBC n'a pas pu insérer
Liaison de données avec Spark et Cassandra
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
[Avec un exemple de code] Les bases de Spring JDBC apprises avec l'application Blog
Créer une API REST avec Spring JPA Data avec REST et Lombok incroyablement facile.
Utilisez Spring Mobile pour déterminer le type d'appareil des smartphones, tablettes et ordinateurs personnels
Je veux afficher des images avec REST Controller de Java et Spring!
OU rechercher avec la spécification Spring Data Jpa
Après 3 mois de formation Java et Spring
HTTPS avec Spring Boot et Let's Encrypt
J'ai essayé Spring Data JDBC 1.0.0.BUILD-SNAPSHOT (-> 1.0.0.RELEASE)
Acquisition de données JSON et rotation des valeurs
Promesse JDBC et exemple d'écriture
Juste des images d'entrée et de sortie avec Spring MVC
[Ruby] Mots clés avec mots clés et valeurs par défaut des arguments
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Divers tableau de correspondance de Spring Framework et Spring Boot
Référence mutuelle de l'entité de Spring Data JPA et ses notes
Gestion collective des erreurs de validation Spring avec @ControllerAdvice
[Débutant] Téléchargez des images et des fichiers avec Spring [Autosuffisant]
Créez une application CRUD avec Spring Boot 2 + Thymeleaf + MyBatis
Obtenez la partie Body de HttpResponse avec Spring Filter
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Trier par Spring Data JPA (avec tri par clé composée)
Vous pouvez éliminer @Param avec Kotlin 1.1 et MyBatis 3.4.1+! !!
Création d'un référentiel commun avec Spring Data JPA
J'ai besoin de la validation de Spring Data pour Pageable ~
Créez des données factices pour le portefeuille avec Faker [Note]
Vérifiez le comportement de getOne, findById et des méthodes de requête avec Spring Boot + Spring Data JPA