[JAVA] Kompatibilität von Spring JDBC und My Batis mit Spring Data JDBC (vorläufig)

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.

Verwenden Sie benutzerdefinierte Operationen

  1. 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">
    
  2. Erstellen Sie eine Schnittstelle für den benutzerdefinierten Betrieb, auf die verwiesen wird

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

Spielen Sie mit DataAccessStrategy

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.

Referenzmaterial

Quelle

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

Impressionen

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.

Anhang: Ausführungsergebnisprotokoll

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

Kompatibilität von Spring JDBC und My Batis mit Spring Data JDBC (vorläufig)
Feder mit Kotorin --2 RestController und Datenklasse
Implementierungsmethode für Multi-Datenquelle mit Spring Boot (Mybatis und Spring Data JPA)
Bis zur Datenerfassung mit Spring Boot + MyBatis + PostgreSQL
Aktualisieren Sie die Datenbank regelmäßig mit Spring Batch und My Batis
Spring Data JDBC-Vorschau
Bis zur Verwendung von Spring Data und JPA Part 2
Bis zur Verwendung von Spring Data und JPA Part 1
Verwenden Sie Spring JDBC mit Spring Boot
Fensteraggregation von Sensordaten mit Apache Flink und Java 8
Hinweise zur Verwendung von Spring Data JDBC
Verwenden Sie JDBC mit Java und Scala.
Ein Memo über den Fall, dass das Einfügen mit Spring Data JDBC nicht durchgeführt werden konnte
Datenverknüpfung mit Spark und Cassandra
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
[Mit Beispielcode] Grundlagen von Spring JDBC mit der Blog-App gelernt
Das Erstellen einer REST-API mit Spring JPA-Daten mit REST und Lombok ist unglaublich einfach.
Verwenden Sie Spring Mobile, um den Gerätetyp von Smartphones, Tablets und PCs zu bestimmen
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
ODER suchen Sie mit der Spring Data Jpa-Spezifikation
Nach 3 Monaten Java- und Frühlingstraining
HTTPS mit Spring Boot und Let's Encrypt
Ich habe Spring Data JDBC 1.0.0.BUILD-SNAPSHOT ausprobiert (-> 1.0.0.RELEASE)
Erfassung von JSON-Daten und Drehung von Werten
JDBC Versprechen und Schreibbeispiel
Geben Sie einfach Bilder mit Spring MVC ein und geben Sie sie aus
[Ruby] Schlüsselwörter mit Schlüsselwörtern und Standardwerten von Argumenten
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Gegenseitige Bezugnahme auf Entity of Spring Data JPA und seine Anmerkungen
Kollektive Behandlung von Spring-Validierungsfehlern mit @ControllerAdvice
[Anfänger] Laden Sie Bilder und Dateien mit Spring hoch [Autark]
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Holen Sie sich den Body-Teil von HttpResponse mit Spring Filter
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Sortieren nach Spring Data JPA (mit zusammengesetzter Schlüsselsortierung)
Sie können @Param mit Kotlin 1.1 und MyBatis 3.4.1+ eliminieren! !!
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Ich benötige eine Validierung der Federdaten für Pageable ~
Erstellen Sie mit Faker Dummy-Daten für das Portfolio [Hinweis]
Überprüfen Sie das Verhalten von getOne-, findById- und Abfragemethoden mit Spring Boot + Spring Data JPA