Erstellen Sie eine MyBatis+Postgresql -Plattform von Grund auf neu
Kürzlich verwendet die Datenbank eines Projekts PostgreSQL, um Daten mit Original -MyBatis zu betreiben. An Original MyBatis ist nichts auszusetzen. In China gibt es jedoch ein TK.Mybatis -Tool, das uns hilft, viele praktische Dinge zu tun. In den meisten Fällen müssen wir auf Original -MyBatis verarbeiten. Es wurde im Grunde genommen gut implementiert. In diesem Artikel wird die detaillierten Schritte für die Installation von PostgreSQL, die Konfiguration von TK.Mybatis und einige kleinere Probleme freigegeben, die möglicherweise in diesem Prozess auftreten.
Installieren Sie postgresql und führen Sie den folgenden Befehl aus, um zu installieren: Kopieren Sie den Code wie folgt: APT-Get-Update && apt-Get installieren Sie postgreSQL
Nach der Installation des Servers benötigen wir auch einen Client -PDAdmin mit einer grafischen Schnittstelle. Ich habe die Windows -Version von PostgreSQL installiert und finden Sie die entsprechende Version an dieser Adresse. Nach erfolgreicher Installation werden ein Systembenutzer und ein Datenbankbenutzer standardmäßig erstellt. Der Name und das Passwort sind alle Postgres. Wir können einen neuen Benutzer erstellen oder dieses Konto direkt verwenden. Wie auch immer, ich bin nur ein Test. Nach Abschluss der Installation können Sie auf Remote -Zugriffsprobleme stoßen:
Das Problem der Remoteverbindung ist standardmäßig nur lokale Verbindungen zulässig. Damit andere Clients eine Verbindung herstellen können, können wir die Konfigurationsdatei ändern. Das Verzeichnis dieser Datei befindet sich in /etc/postgresql/9.5/main. In diesem Verzeichnis gibt es zwei Dateien:
1: PostgreSQL.Conf, dies ist serverbezogen, und es gibt eine ordnungsgemäße Adresse, die nur standardmäßig auf lokal hört, und wir können sie ändern.
2: pg_hba.cof hängt mit Benutzerberechtigungen zusammen. Es gibt eine verbindungsbezogene Konfiguration, die im Gateway-Modus konfiguriert werden kann
Nach einer erfolgreichen Verbindung ist es wahrscheinlich so, dass wir Datenbanken, Tabellen und andere Objekte erstellen können.
Der MyBatis -Codegenerator, die Zuordnung von Datenbank und Modell, solche mechanischen Arbeiten sollten der Maschine abgeschlossen werden. Weitere Informationen finden Sie hier.
General Mapper, eine einzelne Tabelle CRUD -Operation kann eine öffentliche Schnittstelle und der von TK.Mybatis bereitgestellte allgemeine Mapper abstrahieren können, kann uns helfen, diese Art von Problemen zu lösen.
---- Mapper.xml, klein genug (einschließlich nur Feldkarten)
<mapper namespace = "com.jim.logstashmvc.dao.generated.mapper.ProductMapper"> <resultmap id = "baseresultmap" type = "com.jim.logStashmvc.dao.generated.entity.Production =" idroducte "> <!-@mbenerated-> <idroduct"> <!-@mbenerated-> <id "-@mbenerated-> <id"-@mbenerated-> <" JdbcType = "Bigint" Property = "id" /> <result column = "name" jdbctype = "varchar" properation = "name" /> < /resultmap> < /minkPer>
---- Mapper, einfach genug (nur von der Mapper-Schnittstelle erben)
Die Codekopie lautet wie folgt: ProductMapper der öffentlichen Schnittstelle erweitert Mapper <produkts> {}
Plugins, hier sind Paging -Plugins, SQL -Leistungsanalyse -Plugins usw., es ist sehr einfach, in MyBatis zu integrieren.
Wie integriere ich mich in den Frühling?
Integration von Generatoren können Sie mit der Maven -Methode den Codegenerator ausführen.
Von Paketen abhängen
<!-mybatis-> <depelzus> <gruppe> org.mybatis </Groupid> <artifactId> mybatis </artifactid> <version> $ {mybatis.version} </version> </abhängig> <!-Spring Integration-> <De vorangetrieben> </Groupid> org.mybatis </Groupid> <artifactId> mybatis-pring </artifactId> <version> $ {mybatis.spring.version} </Version> </abhängig> <!-MBG-> <Depopenty> <GroupId> org.mybatis.generator </gruppactid> <artifactid> mybatis-gENS-Generator </artifactid> </artifactid> </artifactid> </artifactid> </artifactid> </artifactid> <version> $ {mbg.version} </version> <scope> kompilieren </scope> <option> true </optional> </abhängig> <!-pagination-> <Deponcy> <gruppe> com.github.PageHelper </gruppy> <artifactid> pagehelper </artifactId> $ <Version> $ <Version> $ <Version> $ <Version> $ <Version> $ <Version> $ <Version> $ <$ $ $ $ $> <$ $ $ {{$ $ $ $ $ $ $ {{{{$ $ $ $> < <!-- General Mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${mapper.version}</version> </dependency> <!-- TkMybatis will use JPA annotations--> <dependency> <groupId>javax.persistence</groupId> <artifactId> persistenz-api </artifactId> <version> 1.0 </Version> </abhängig> <depelzieKonfigurationsgenerator-Plug-In, Geben Sie den Konfigurationsdateipfad an, Konfigurationsabhängigkeiten: Der eine ist ein Datenbank-Treiber und der andere ist ein allgemeiner Mapper
<!-mbg-> <plugin> <gruppe org.mybatis.generator </GroupId> <artifactId> MyBatis-Generator-Maven-Plugin </artifactid> <version> $ {MBG.Version} </Version> <Configuration> <configuration> <configurationFile> $ {basiert} /src/main/resources/generator/generatorconfig.xml </configurationFile> <overwrite> true </overwrite> <verbose> true </verbose <artifactId>postgresql</artifactId> <version>9.3-1102-jdbc41</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${mapper.version}</version> </dependency> </dependencies> </plugin>Generatorkonfigurationsdatei
** Datenbankverbindungen konfigurieren
** Konfigurieren Sie die Speicherpfade des generierten Modells, Mapper und Mapper.xml
** Konfigurieren Sie die zu generierenden Tabelleninformationen
Beachten Sie die Targetruntime, hier ist MyBatis3Simple und seine Standardoption ist myBatis3. Wenn wir einen allgemeinen Mapper verwenden, können wir dies beim Scannen der Schnittstelle im Frühjahr schreiben.
Kopieren Sie den Code wie folgt: <bean> <Eigenschaft name = "
Wenn es sich um myBatis3 handelt, ist das generierte Mapper.xml -Format viel komplizierter. Ich habe dieses Problem schon einmal angetroffen: Verwenden der von myBatis3 generierten Mapper.xml und dann fälschlicherweise den MapperscannerConfiger in den folgenden allgemeinen Mapper -Modus konfigurieren, der mich wie folgt auffordert. Der Grund kann als Konfigurationsproblem festgelegt werden (keine doppelte ID in a Mapper.xml). Ich werde die Konfiguration von nicht genererem Mapper später untersuchen.
Kopieren Sie den Code wie folgt: verursacht von: java.lang.ilgelegalargumentException: Die Sammlung von Anweisungen enthält bereits Wert für com.jim.logstashmvc.dao.generated.mapper.ProductMapper.SelectbyExampleat org. org.apache.ibatis.session.configuration $ strictmap.put (configuration.java:809)
Die Konfiguration des Generators lautet wie folgt:
Kopieren Sie den Code wie folgt: <GeneratorConfiguration> <Properties Resource = "config.Properties"/> <context targetRuntime = "mybatis3Simple" DefaultModeltType = "Flat"> <Property name = "startdelimiter" value = "` "/> < -Eigenschaftsname =" enddelimiter "value =" "/"/> < # "plugy =" endDelimiter "value =" "/"/> < # "," Pluginin "," Plugs "," ` #", "Pluginin", "` # "," Pluginin "," ` #", "Pluginin", "PLUGININ", "PLUGININ)" `"/> < type = "$ {mapper.plugin}"> <Eigenschaft name = "mappers" value = "$ {mapper.mapper}"/> </plugin> <jdbcconnection driverClass = "$ {jdbc.driverClass}" connectionurl = "$ {jdbc.url}"} "userId =" $ "{{jdbc. {{{jdbc.Unnern" password="${jdbc.password}"> </jdbcConnection> <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/> <sqlMapGenerator targetPackage="mapper" targetProject="${targetResourcesProject}"/> <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER"> </javaClientGenerator> <table tableName="product" domainObjectName="Product"></table> </context></generatorConfiguration>Configure maven running parameters as shown in die Abbildung unten.
MyBatis-Integration konfiguriert hauptsächlich Verbindungspoolinformationen, Plug-Ins, Mapper-Scan und andere Informationen.
<bean id = "jimdataSource"> <Property name = "triverClassName" value = "$ {jdbc.driverClass}"/> <Property name = "url" value = "$ {jdbc.url}"/> <Property name = "username" value = "$" {JDBC.UnName}}}} "/< value="${jdbc.password}"/> <property name="initialSize" value="5"/> <property name="minIdle" value="10"/> <property name="maxWait" value="60000"/> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <property name="minEvictableIdleTimeMillis" value = "3600000"/> <Eigenschaft name = "validationQuery" value = "select 1"/> <Eigenschaft name = "test während <Eigenschaft name = "dataSource" ref = "jimdataSource"/> <Eigenschaft name = "mapperlocations" value = "classPath: mapper/*. xml"/> <Eigenschaft name = "TypealiaSespackage" value = "com.jim.logstashmvc.dao.generated.entity"/> <Stiefname "/> <Stiefname"/> <Stiefname "/> <Stiefname"/> <Stiefs "/> <Stiefname"/> <Stiefname "/> <Stiefs"/> <Stiefs "/" <"/> <"/> <"/> <"/> < name = "properties"> <wert> Dialekt = postgreSQL vernünftig = true SupportMethodsArgumente = True ReturnPageInfo = Überprüfungsparams = count = countSQL </value> </property> </bean> </array> </property> </bean> < name = "basepackage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>Verwendung von General Mapper:
• Mapper, alle generierten Mapper werden von Mapper <T> von Mapper <T> geerbt und halten standardmäßig alle Schnittstellen von gemeinsamem Mapper, einschließlich gängiger CRUD -Operationen.
• Iservice, die Definition einer allgemeinen Mapper -Schnittstelle, können wir diese Schnittstelle nach unserem eigenen Geschäft ändern
@ServicePublic Interface IService <T> {t SelectByKey (Objektschlüssel); int Save (t Entity); int delete (Objektschlüssel); int updateAll (t Entity); int updateDatenotnull (t Entity); Liste <T> selectByExample (Objektbeispiel); // andere andere ...}BaseSeService, die Implementierungsklasse von General Mapper
public abstract Class BaseSeService <T> implementiert iService <t> {@autowired Protected MAPPER <T> Mapper; public Mapper <T> getMapper () {return mapper; } @Override public t SelectByKey (Objektschlüssel) {return mapper.SelectByprimaryKey (Key); } public int Save (t Entity) {return mapper.insert (Entity); } public int delete (Objektschlüssel) {return mapper.deleteByprimaryKey (Key); } public int updateAll (t Entity) {return mapper.UpdateByprimaryKey (Entity); } public int updateNoTnull (t Entity) {return mapper.updatByprimaryKeysselective (Entity); } publiclist <T> selectByExample (Objektbeispiel) {return mapPer.SelectByExample (Beispiel); } // andere andere ...}Spezifische Servicekategorien
@ServicePublic Class ProductServiceImpl erweitert BaseService <produkt> implementiert ProductService {@Override publiclist <produkt> selectByProduct (Produktprodukt, int Seite, int Zeilen) {Beispiel für Beispiel = neues Beispiel (product.class); Beispiel.Criteria Criteria = Beispiel.Createcriteria (); if (! Stringutils.isblank (product.getName ())) {criteria.andequalto ("name", product.getName ()); } if (product.getId ()! } PageHelper.startPage (Seite, Zeilen); return selectByExample (Beispiel); }}Installieren Sie Postgresql und verbinden Sie erfolgreich remote, integrieren Sie MBG, um Mapper und Modell zu generieren, integrieren Sie MyBatis in die Feder und verbinden Sie es schließlich über einen allgemeinen Mapper, um unser Ziel zu erreichen: Um den größten Teil der Arbeiten durch eine kleine Menge Code zu vervollständigen, und es dem Tool für wiederholte Arbeiten übergeben. Aber General Mapper hat seine Vor- und Nachteile und muss gemäß der Projektumgebung ausgeglichen werden. Ich persönlich bin der Meinung, dass die Vorteile die Nachteile überwiegen.
Zitiert durch diesen Artikel:
1. http://www.mybatis.tk/
2. https://github.com/abel533/mybatis-Spring
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.