In den letzten zwei Tagen wurde ein neues Projekt gestartet, da die Mitglieder des Projektteams immer MyBatis genutzt haben. Obwohl ich das minimalistische Modell von JPA persönlich bevorzuge, ist MyBatis immer noch festgestellt, dass die Einheitstechnologieauswahl beibehalten wird, um das Projekt aufrechtzuerhalten. Ich ging online, um relevante Informationen über die Kombination von Spring Boot und MyBatis zu finden. Es gibt verschiedene Formen, die die Leute es leid machen, es zu lesen. Als ich MyBatis 'offizielle Demo und Dokumente kombinierte, fand ich schließlich die beiden einfachsten Modi. Ich habe einen Tag damit verbracht, es zusammenzufassen und zu teilen.
Die Essenz des ORM -Frameworks besteht darin, die Codierung von Betriebsdatenbanken in der Programmierung zu vereinfachen. Jetzt sind im Grunde noch zwei Unternehmen übrig. Eine soll behaupten, dass Sie keinen Satz von SQL Hibernate schreiben können, und der andere ist, mybatis von dynamischem SQL flexiug zu debuggen. Beide haben ihre eigenen Merkmale und können flexibel entsprechend den Bedürfnissen in der Systementwicklung auf Unternehmensebene verwendet werden. Ich fand ein interessantes Phänomen: Die meisten traditionellen Unternehmen verwenden gerne Winterschlaf, und die Internetbranche verwendet normalerweise MyBatis.
Das Merkmal von Hibernate besteht darin, dass alle SQL mit Java -Code generiert werden und es keine SQL -Schreiben (Lese-) SQL schreiben muss, ohne aus dem Programm zu springen. Es hat Programmierintegrität. Es entwickelt sich an der Spitze des Modells. Grundsätzlich kann der entsprechende SQL basierend auf dem Methodennamen generiert werden. Wenn Sie nicht viel wissen, können Sie meinen vorherigen Artikel über die Verwendung von Frühlingsdaten JPA lesen.
MyBatis ist in der frühen Phase sehr problematisch und erfordert verschiedene Konfigurationsdateien, Entitätsklassen, DAO -Layer -Mapping -Assoziationen und viele andere Konfigurationen. Natürlich entdeckte MyBatis diesen Nachteil. In der frühen Phase wurde der Generator entwickelt, der automatisch Entitätsklassen, Konfigurationsdateien und DAO -Schichtcode erstellen kann, die auf den Tabellenergebnissen basieren und einen Teil des Entwicklungsvolumens verringern können. In der späteren Phase können viele Optimierungen verwendet werden, um Anmerkungen zu verwenden, DAO -Ebenen und Konfigurationsdateien usw. automatisch zu verwalten, und die Entwicklung an der Spitze ist das Modell, über das wir heute sprechen werden. MyBatis-Spring-Boot-Starter ist Springboot+MyBatis kann ohne Konfigurationsdateien vollständig kommentieren und auch eine einfache Konfiguration und einfach zu beginnen.
Denken Sie jetzt darüber nach, Spring Boot ist großartig. Solange Sie etwas mit Spring Boot in Verbindung bringen, vereinfacht es es.
MyBatis-Spring-Boot-Starter
Offizielle Beschreibung: MyBatis Spring-Boot-Starter hilft Ihnen, MyBatis mit Spring Boot zu verwenden
Tatsächlich hat MyBatis eine Lösung entwickelt, um sich dem Spaß anzuschließen, weil Spring Boot so beliebt ist, aber dieser hat tatsächlich viele Probleme gelöst und ist in der Tat viel reibungsloser zu verwenden. Es gibt zwei Hauptlösungen für MyBatis-Spring-Boot-Starter. Einer besteht darin, Anmerkungen zu verwenden, um alle Probleme zu lösen, und das andere ist die vereinfachte alte Tradition.
Natürlich muss jeder Modus zuerst die POM-Datei von MyBatis-Spring-Boot-Starter einführen. Jetzt ist die neueste Version 1.1.1 (sie ist einfach auf Double 11 :))
<Depepecy> <gruppe> org.mybatis.spring.boot </Groupid> <artifactId> myBatis-pring-stoot-starter </artifactid> <version> 1.1.1 </Version> </abhängig>
Ich werde zwei Entwicklungsmodelle vorstellen
Keine Konfigurationsdateianschlagsversion
Es ist mit Anmerkungen fertig.
1 Fügen Sie relevante Maven -Dateien hinzu
<Depelencies> <Deponcy> <gruppe> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter </artifactid> </abhängig> <depepractId> <gruppe-org.springFramework.boot </Groupid> <artifactidid </grupp.SpringFrameWork > Spring-Boot-Starter-Test </artifactId> <Scope> Test </scope> </abhängig> <depelzus> <gruppe> org.springframework.boot </gruppacid> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <DepEN DECY> <GruppeId> org.mybatis.spring.boot </GroupId> <artifactId> mybatis-pring-boot-starter </artifactid> <version> 1.1.1 </Version> </abhängig> <dielporcy> <Groupid> Mysql </gruppe </artifactid> mysql-c Onnector-Java </artifactId> </abhängig> <depeopcy> <gruppe> org.springFramework.boot </Groupid> <artifactid> Spring-Boot-Devtools </artifactid> <optional> true </optional> </abhängig> </abhängig> </abhängig>
Ich werde das vollständige POM -Paket hier nicht veröffentlichen. Bitte lesen Sie den Quellcode direkt durch
2. Anwendungen.Properties Fügen Sie relevante Konfigurationen hinzu
mybatis.type-aliases-package=com.neo.entityspring.datasource.driverClassName = com.mysql.jdbc.Driverspring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8spring.datasource.username = rootspring.dataSource.Password = root
Springboot lädt automatisch die relevante Konfiguration von Spring.DataSource. Der SQLSessionFactory wird automatisch in den Mapper injiziert. Übrigens müssen Sie sich keine Sorgen um alles machen, es einfach abholen und benutzen.
Fügen Sie in der Startklasse @MapperScan einen Scan des Mapper -Pakets hinzu
@SpringbootApplication@mapperscan ("com.neo.mapper") öffentliche Klasse Anwendung {public static void main (String [] args) {Springapplication.run (application.class, args);}}Oder fügen Sie einfach Annotation @mapper in der Mapper -Klasse hinzu. Es wird empfohlen, die oben genannte zu verwenden, da es ansonsten ziemlich problematisch ist, jedem Mapper Annotation hinzuzufügen.
3. Entwickeln Sie Mapper
Der dritte Schritt ist der kritischste Teil, und die SQL -Produktion ist hier
public interface UserMapper {@Select("SELECT * FROM users")@Results({@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),@Result(property = "nickName", column = "nick_name")})List<UserEntity> getAll();@Select("SELECT * FROM users WHERE id = #{id}")@Results({@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),@Result(property = "nickName", column = "nick_name")})UserEntity getOne(Long id);@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{Userex}) ") void Insert (UserEntity -Benutzer);@Update (" Benutzer aktualisieren username =#{userername}, nick_name =#{fickname} wobUm der Produktion näher zu sein, unterstrich ich die beiden Attribute von user_sex und nick_name in der Datenbank und die Namen der Entity -Klasse sind inkonsistent. Zusätzlich verwendet User_sex Aufzählungen
@Select ist eine Annotation der Abfragetokasse, und alle Abfragen verwenden dies
@Result ändern die zurückgegebene Ergebnismenge, und die zugehörigen Entitätsklassenattribute und Datenbankfelder entsprechen einzeln. Wenn die Attribute der Entitätsklassen und die Datenbankattributnamen konsistent sind, ist dieses Attribut nicht erforderlich, um zu ändern.
@Insert Fügen Sie die zu verwendende Datenbank ein. Durch die direkte Übergabe der Entitätsklasse wird das Attribut automatisch an den entsprechenden Wert analysiert
@Update ist für die Änderung verantwortlich und kann auch direkt in das Objekt übergeben werden
@Delete ist für das Löschen verantwortlich
Weitere Immobilien finden Sie hier: http://www.mybatis.org/mybatis-3/zh/java-api.html
Beachten Sie, dass der Unterschied zwischen # Symbol und $ Symbol:
// Dieses Beispiel erstellt eine vorbereitete Aussage, so etwas wie SELECE * vom Lehrer, wobei Name =?;@Select ("SELECT * vom Lehrer, wobei Name = #{Name}") Lehrer SelectTeachForGivenName (@param ("Name") String -Name name); // Dieses Beispiel schafft und eine inlinedige Aussage, so etwas wie Select * aus dem Lehrer. selectTeachForGivenName (@param ("name") Zeichenfolge Name);4. Verwendung
Die obigen drei Schritte vervollständigen die relevante Ebenenentwicklung im Grunde genommen. Verwenden Sie es bei der Verwendung, verwenden Sie es einfach als gewöhnliche Klasse, und es kann in sie injiziert werden.
@Runwith (springrunner.class) @springBoottestPublic Class UsMapperTest {@autowiredPrivate UsMapper UsMapper; @TestPublic void TestInsert () löst Ausnahme aus {Usmaper.insert (new nusterEntity ("aa", "a123456", userMaper.man). UserEntity ("BB", "B123456", UserSexenum.woman)); UsMapper.insert (New UserEntity ("CC", "B123456", UserSexenum); UserMapper.getall (); System.out.println (users.toString ());}@testpublic void testupdate () löst Ausnahme aus {userEntity user = UsMapper.getOne (3L); System.out.println (user.toString ()); user.setnickname ("neo"); UsMapper.Update (Benutzer);Im Quellcode gibt es vollständige Ergänzungen, Löschungen, Änderungen und Suchanfragen, sodass ich sie hier nicht veröffentlichen werde
Minimalistische XML -Version
Die minimalistische XML -Version behält die alte Tradition der Zuordnung von Dateien bei. Die Optimierung spiegelt sich hauptsächlich in der Implementierungsschicht wider, die nicht implementiert werden muss. Das System findet den entsprechenden SQL in der Zuordnungsdatei automatisch gemäß dem Methodennamen.
1. Konfiguration
Die POM -Datei entspricht der vorherigen Version, außer dass die folgende Konfiguration zur application.properties hinzugefügt wird.
mybatis.config-locations = classPath: mybatis/mybatis-config.xmlmybatis.mapper-locations = classPath: mybatis/mapper/*. xml
Gibt die Adresse der myBatis grundlegenden Konfigurationsdatei und der Entitätsklassenzuordnungsdatei an
MyBatis-config.xml-Konfiguration
<configuration> <typealias> <typealias alias = "Integer" type = "java.lang.Integer" /> <typealias alias = "long" type = "java.lang.long" /> <typealias alias = " type = "java.util.linkedHasMap" /> <typealias alias = "arrayList" type = "java.util.arrayList" /> <typealias alias = "linkedList" type = "java.util.linkedList" /> < /typealias> < /configuration>
Hier können Sie auch eine grundlegende MyBatis -Konfiguration hinzufügen
2. Fügen Sie die Zuordnungsdatei des Benutzers hinzu
<mapper namespace = "com.neo.mapper.usmapper"> <resultMap id = "baseresultmap" type = "com.neo.Entity property="passWord" jdbcType="VARCHAR" /><result column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/><result column="nick_name" property="nickName" jdbcType="VARCHAR" /></resultMap><sql id="Base_Column_List" >id, userName, password, user_sex, nick_name < /sql> <select id = "getAll" resultmap = "baseresultmap"> select <include refID = "base_column_list" /> von Benutzern < /select> <select id = "getone" -Aretertype = "java.lang.long.Longmap =" basseresultMap "-Selectrinne. = #{id}</select><insert id="insert" parameterType="com.neo.entity.UserEntity" >INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})</insert><update id="update" parameterType="com.neo.entity.UserEntity" >UPDATE users SET <if test = "userername! #{id} </delete> </minkPer>In der Tat hat es nur die Verschiebung des Mapper SQL von der vorherigen Version in die XML hier verschoben
3. Schreiben Sie den DAO -Layer -Code
Public Interface UsMapper {List <DersEntity> getAll (); UserEntity getone (Long ID);Im Vergleich zum vorherigen Schritt sind nur Schnittstellenmethoden übrig.
4. Verwendung
Es gibt keinen Unterschied zwischen der Verwendung und der vorherigen Version. Sehen Sie sich bitte den Code an
Wie man wählt
Die beiden Modi haben ihre eigenen Eigenschaften. Die kommentierte Version eignet sich für einfache und schnelle Modi. Wie das beliebte Microservice -Modell heutzutage entspricht ein Mikroservice einer eigenen Datenbank. Die Nachfrage nach Multi-Table-Verbindungsabfrage wird stark reduziert und wird für diesen Modus immer besser geeignet.
Das alte traditionelle Modell eignet sich besser für große Projekte. Es kann SQL flexibel dynamisch erzeugen, was für die Anpassung von SQL bequem ist und das Gefühl hat, SQL mit großer Vergnügen und Mörder zu schreiben.
Beispielcode-GitHub: https://github.com/ityouknow/spring-boot-examples
Beispielcode-Code Cloud: https://gitee.com/ityouknow/spring-boot-examples