Construisez une plate-forme MyBatis + PostgreSQL à partir de zéro
Récemment, la base de données d'un projet utilise PostgreSQL pour faire fonctionner les données à l'aide de MyBatis d'origine. Il n'y a rien de mal avec Mybatis original. Cependant, il existe un outil Tk.Mybatis en Chine qui nous aide à faire beaucoup de choses pratiques. Dans la plupart des cas, nous devons traiter sur MyBatis original. Il a été essentiellement bien mis en œuvre. Cet article partagera les étapes détaillées pour l'installation de PostgreSQL, la configuration de Tk.Mybatis et quelques problèmes mineurs qui peuvent être rencontrés dans ce processus.
Installez PostgreSQL, exécutez la commande suivante pour installer: Copiez le code comme suit: APT-Get Update && apt-get install postgresql
Une fois le serveur installé, nous avons également besoin d'un pdadmin client avec une interface graphique. J'ai installé la version Windows de PostgreSQL et vous pouvez trouver la version correspondante à cette adresse. Une fois l'installation réussie, un utilisateur système et un utilisateur de base de données seront créés par défaut. Le nom et le mot de passe sont tous postgres. Nous pouvons créer un nouvel utilisateur ou utiliser ce compte directement. Quoi qu'il en soit, je ne suis qu'un test. Une fois l'installation terminée, vous pouvez rencontrer des problèmes d'accès à distance:
Problème de connexion à distance, seules les connexions locales sont autorisées par défaut. Pour permettre à d'autres clients de se connecter, nous pouvons modifier son fichier de configuration. Le répertoire de ce fichier est situé dans /etc/postgresql/9.5/main. Il y a deux fichiers dans ce répertoire:
1: postgresql.conf, il s'agit d'un lien de serveur, et il y a une adresse LICEN_ADdress, qui écoute localement par défaut, et nous pouvons le modifier.
2: pg_hba.cof, ceci est lié aux autorisations des utilisateurs, il existe une configuration liée à la connexion, qui peut être configurée en mode passerelle
Après une connexion réussie, c'est probablement comme ça, nous pouvons créer des bases de données, des tables et d'autres objets.
Générateur de code MyBatis, cartographie de la base de données et du modèle, ces travaux mécaniques doivent être laissés à la machine à terminer. Veuillez vous référer aux détails ici.
Le mappeur général, une seule opération de crud de table peut abstraction d'une interface publique, et le mappeur général fourni par Tk.mybatis peut nous aider à résoudre ce type de problème.
---- Mapper.xml, assez petit (y compris les cartes de champ uniquement)
<mapper namespace = "com.jim.logstashmvc.dao.generated.mapper.productmapper"> <resultmap id = "BaseresultMap" type = "com.jim.logstashmvc.dao.generated.entity.product"> <! JDBCTYPE = "BigInt" Property = "ID" /> <Result Column = "Name" JDBCTYPE = "VARCHAR" Property = "NAM
---- Mappeur, assez simple (juste hériter de l'interface de mapper)
La copie de code est la suivante: Interface publique ProductMapper étend le mappeur <roduct> {}
Plugins, voici les plugins de pagination, les plugins d'analyse des performances SQL, etc., il est très facile à intégrer avec MyBatis.
Comment s'intégrer au printemps?
Intégration des générateurs, vous pouvez utiliser la méthode Maven pour exécuter le générateur de code.
Dépendre des packages
<! - Mybatis -> <dependency> <proupId> org.mybatis </proncId> <Artifactid> Mybatis </ artifactid> <version> $ {Mybatis.Version} </ version> </Dependance> <! - Spring Integration -> <Dedency> <ProupId> Org.mybatis </rom groupement> <ArtefactId> MyBatis-Spring </letefactive> <Dersion> $ {mybatis.spring.version} </ version> </dEpendency> <! - MBG -> <Dendency> <ProupId> org.mybatis.Generator </proupId> <Artifactid> Mybatis-Generator-Core </letifactid> <version> $ {mbg.version} </ version> <ccope> compile </ccope> <ochotéal> true </ optional> </ Dependency> <! - Pagination -> <dependency> <proupId> com.github.pagehelper </proncId> <Artifactid> Pagehelper </ ArtifactId> <version> $ {pagehelper.version} <! - General Mapper -> <Dedency> <GroupId> tk.mybatis </rombandid> <Artifactid> Mappen </ Artifactid> <Dersion> $ {Mapper.Version} </DERNIERNE> </ Dependency> <! - TKMyBatis utilisera JPA Annotations -> <Dedency> <ProupId> Javax.persistence </ GroupId> <ArtefactId> Persistance-API </ artifactId> <Dersion> 1.0 </DERNIFRIGATION> </DENDENCENCE> <Dependance> <ProupId> org.Postgresql </rom grouped> <ArtefactId> PostgreSql </letefactId> <version> 9.3-1102-JDBC41 </DERNIER> </DENSEDENCY>Plug-in Générateur de configuration, spécifiez le chemin du fichier de configuration, Dépendances de configuration: L'un est un pilote de base de données, et l'autre est un mappeur général
<! - MBG -> <Glugin> <GroupId> org.mybatis.Generator </rolgleId> <Artifactid> Mybatis-Generator-Maven-Plugin </Retifactid> <DERSE> $ {MBG.Version} </ Version> <FIFICITION> <IcongurationFile> $ {basaseIr} /src/main/resources/Generator/GeneratorConfig.xml </ ConfigurationFile> <Cverwrite> true </cventwrite> <vorbose> true </verbose> </FIGIGROUNT> <preetences> <Dedency> <proupId> org.PostGresql </prebourdid> <ArtefactId> Postgresql </letefactive> <Sease> 9.3-1102-JDBC41 </DERNIFRIMINATION> </ Dependency> <Dedidency> <proupId> Tk.mybatis </proupId> <ArtifActid> MAPPER </RIFACTID> <DERVERSE> $ {MAPPER.VERSION} </DERNIFROITIONS>Fichier de configuration du générateur
** Configurer les connexions de la base de données
** Configurez les chemins de stockage du modèle généré, Mapper et Mappel.xml
** Configurez les informations de la table à générer
Remarquez le cibleRuntime, voici MyBatis3Simple, et son option par défaut est MyBatis3. Si nous utilisons un mappeur général, nous pouvons écrire ceci lors de la numérisation de l'interface au printemps.
Copiez le code comme suit: <an bean> <propriété name = "sqlSessionFactoryBeanName" value = "jimsqlSessionFactory" /> <propriété name = "basepackage" value = "com.jim.logstashmvc.dao.generated.mapper" /> </ean>
S'il s'agit de MyBatis3, le format généré Mappel.xml sera beaucoup plus compliqué. J'ai déjà rencontré ce problème: en utilisant le mappeur.xml généré par MyBatis3, puis configurez mal le MAPPERScannerConfigurer en mode Général suivant, ce qui m'invite comme suit. La raison peut être déterminée comme un problème de configuration (pas un ID en double dans un mappeur.xml). J'étudierai la configuration du mapper non générique plus tard.
Copy the code as follows: Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.jim.logstashmvc.dao.generated.mapper.ProductMapper.selectByExampleat org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:837) at org.apache.ibatis.session.configuration $ strictmap.put (configuration.java:809)
La configuration du générateur est la suivante:
Copiez le code comme suit: <GeneratorConfiguration> <Properties Resource = "config.properties" /> <context targetRuntime = "MyBatis3Simple" defaultModelType = "Flat"> <propriété name = "débutDeliter" value = "` "/> <propriété name =" enddeliter "valugin =" `" /> <* plugin Type = "$ {mApper" <propriété name = "mappers" value = "$ {mapper.mapper}" /> </ plugin> <jdbcconnection driverclass = "$ {jdbc.DriverClass}" ConnectionUrl = "$ {jdbc.url}" userrid = "$ {jdbc.> </ jdbcconnection> <javamodelGenerator TargetPackage = "$ {TargetModelPackage}" TargetProject = "$ {TargetJavaproject}" /> <SqlMapGenerator TargetPackage = "MAPPER" TargetProject = "$ {TargetResourcesProject}" /> <JavaclintGorateur TargetPackage = "$ {TargetMapperPackage}" TargetProject = "$ {TargetJavaproject}" type = "xmlmapper"> </ javaclientGenerator> <Table TableName = "Product" DomainObjectName = "Product"> </ Table> </ context> </eneratorConCengation> Configurer les paramètres d'exécution de mavens comme indiqué dans la figure ci-dessous.
L'intégration MyBatis configure principalement les informations de pool de connexions, les plug-ins, la numérisation du mappeur et d'autres informations.
<bean id = "jimdatasource"> <propriété name = "driverclassname" value = "$ {jdbc.DriverClass}" /> <propriété name = "url" value = "$ {jdbc.url}" /> <propriété name = "username" value = "$ {jdbc.ausername}" /> <prewame = "mot de passe" value = "$ {jdbc.password}" /> <propriété name = "initialSize" value = "5" /> <propriété name = "minidle" value = "10" /> <propriété name = "maxwait" value = "60000" /> <propriété name = "property" MineVictableidlemilLis " Value = "3600000" /> <propriété name = "validationQuery" value = "select 1" /> <propriété name = "Test WHIR name = "dataSource" ref = "jimdatasource" /> <propriété name = "mapperlocations" value = "classpath: mapper / *. xml" /> <propriété name = "tyciasespackage" value = "com.jim.logstashmvc.dao.generated.entity" /> <propriété name = "Plugins"> <Array> <value> dialect = postgresql raisonnable = true supportMethodSarguments = true returnPageInfo = vérifier params = count = countSql </value> </ propriété> </bEan> </-betwear> </ bean> <ank value = "com.jim.logstashmvc.dao.generated.mapper" /> </ank>Utilisation de General Mapper:
• Le mappeur, tous les mappeurs générés sont hérités du mappeur <T> et maintiennent toutes les interfaces de mapper commun par défaut, y compris les opérations de crud communes.
• Iservice, la définition d'une interface de mappen générale, nous pouvons modifier cette interface en fonction de notre propre entreprise
@ServicePublic Interface Iservice <T> {t SelectByKey (clé d'objet); int save (t entité); int delete (clé d'objet); int updateall (entité t); int updatenotnull (entité t); Liste <T> selectByExample (Exemple d'objet); // todo aux autres ...}BaseService, la classe de mise en œuvre de General Mapper
Classe abstraite de la classe BaseService <T> Implémentez Iservice <T> {@Autowired Protected Mapper <T> MAPTER; Public Mapper <T> GetMapper () {RETOUR MAPTER; } @Override public t SelectByKey (clé d'objet) {return Mapper.SelectByprimaryKey (key); } public int save (t entité) {return mappy.insert (entité); } public int Delete (objet Key) {return mapper.deleteByPrimaryKey (key); } public int updateAll (t entité) {return mapper.updatebyprimaryKey (entité); } public int updatenotnull (t entité) {return mapper.updatebyprimarykeySelective (entité); } public list <T> selectByExample (Example d'objet) {return Mapper.SelectByExample (Exemple); } // too les autres ...}Catégories de services spécifiques
@ServicePublic Class ProductServiceImpl étend BaseService <Rudding> implémente ProductsService {@Override public List <Rudding> selectByProduct (produit Product, int Page, intr lignes) {Exemple Exemple = Nouveau exemple (Product.Class); Exemple.Criteria Critères = Exemple.CreateCriteria (); if (! stringUtils.isblank (product.getName ())) {critères.andEqualto ("name", product.getName ()); } if (product.getId ()! = null) {critères.andEqualto ("id", product.getId ()); } PageHelper.StartPage (page, lignes); return selectByExample (exemple); }}Installez PostgreSQL et connectez avec succès à distance, intégrez MBG pour générer du mappeur et du modèle, puis intégrez MyBatis à Spring, et enfin connectez-le via un mappeur général pour atteindre notre objectif: terminer la plupart du travail via une petite quantité de code et le remettre à l'outil pour un travail répété. Mais le général Mapper a ses avantages et ses inconvénients, et doit être équilibré selon l'environnement du projet. Je pense personnellement que les avantages l'emportent sur les inconvénients.
Cité par cet article:
1. Http://www.mybatis.tk/
2. Https://github.com/abel533/mybatis-spring
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.