Construya una plataforma MyBatis+PostgreSQL desde cero
Recientemente, la base de datos de un proyecto utiliza PostgreSQL para operar datos utilizando MyBatis original. No hay nada de malo en MyBatis original. Sin embargo, hay una herramienta TK.Mybatis en China que nos ayuda a hacer muchas cosas prácticas. En la mayoría de los casos, necesitamos procesar en mybatis original. Básicamente se ha implementado bien. Este artículo compartirá los pasos detallados para instalar PostgreSQL, configurar TK.Mybatis y algunos problemas menores que se pueden encontrar en este proceso.
Instalar PostgreSQL, ejecute el siguiente comando para instalar: Copie el código de la siguiente manera: Apt-Get Update && Apt-Get Install PostgreSQL
Después de instalar el servidor, también necesitamos un pDADMin cliente con una interfaz gráfica. Instalé la versión de Windows de PostgreSQL, y puede encontrar la versión correspondiente en esta dirección. Después de que la instalación sea exitosa, un usuario del sistema y un usuario de la base de datos se crearán de forma predeterminada. El nombre y la contraseña son todos Postgres. Podemos crear un nuevo usuario o usar esta cuenta directamente. De todos modos, solo soy una prueba. Después de completar la instalación, puede encontrar problemas de acceso remoto:
Problema de conexión remota, solo las conexiones locales están permitidas de forma predeterminada. Para permitir que otros clientes se conecten, podemos modificar su archivo de configuración. El directorio de este archivo se encuentra en /etc/postgresql/9.5/main. Hay dos archivos en este directorio:
1: PostgreSQL.Conf, esto está relacionado con el servidor, y hay una dirección Listen_Address, que solo escucha localmente de forma predeterminada, y podemos modificarla.
2: PG_HBA.COF, esto está relacionado con los permisos de usuario, hay una configuración relacionada con la conexión, que se puede configurar en el modo de puerta de enlace
Después de una conexión exitosa, probablemente sea así, podemos crear bases de datos, tablas y otros objetos.
Generador de código MyBatis, el mapeo de la base de datos y el modelo, dicho trabajo mecánico debe dejarse a la máquina para completar. Consulte los detalles aquí.
General Mapper, una operación de CRUD de una sola tabla, puede abstraer una interfaz pública, y el mapeador general proporcionado por TK.Mybatis puede ayudarnos a resolver este tipo de problema.
---- Mapper.xml, lo suficientemente pequeño (incluidos solo mapas de campo)
<mappper namespace = "com.jim.logstashmvc.dao.generated.mapper.productMapper"> <resultMap id = "BaseSultMap" type = "com.jim.logstashmvc.daoo.generated.entity.product.product"> <! Warning-@mbggenerated-> <<d columna = "id" id "jdbcy" jdBcy "jdbcy" jdbe "jdBcy" big. Propiedad = "id" /> <resultado columna = "name" jdbctype = "varchar" propiedad = "name" /> </ resultadomap> </mapper>
---- Mapper, bastante simple (solo herede de la interfaz mapeador)
La copia del código es la siguiente: la interfaz pública ProductMapper extiende Mapper <Product> {}
Complementos, aquí hay complementos de paginación, complementos de análisis de rendimiento SQL, etc., es muy fácil de integrar con MyBatis.
¿Cómo integrarse con la primavera?
Integración de generadores, puede usar el método Maven para ejecutar el generador de código.
Depender de los paquetes
< <artifactid> mybatis-spring </arfactid> <versever> $ {mybatis.spring.version} </versión> </pendency> <!-mbg-> <pendency> <moupid> org.mybatis.generator </groupid> <artifactid> mybatis-generator-core-core </artifactid>>>>>>> <Persion> $ {mbg.version} </versión> <cope> compilar </cope> <pectional> true </pectional> </pendency> <!-Pagation-> <pendency> <MoupRupid> com.github.pagehelper </groupId> <artifactid PageHelper </artifactid> <versión> $ {Pagehelper.version} < <artifactid> Persistence-API </arfactid> <versever> 1.0 </versión> </pendency> <pendency> <uproupid> org.postgresql </uproupid> <artifactid> postgresql </arfactid> <versión> 9.3-1102-jdbc41 </presion> </pendency>>Configuración del generador de configuración, especifique la ruta del archivo de configuración, dependencias de configuración: uno es un controlador de base de datos y el otro es un mapeador general
< <ConfigurationFile> $ {Basedir} /src/main/resources/generator/generatorConfig.xml </ConfigurationFile> <Overwrite> true </verwrite> <verbose> true </verbose> </Configuration> <Spendencies> <Spendency> <MoupRid> org.postgresql </groupid> <AtifactId> PostGresql </artifactid> <versión> 9.3-1102-jdbc41 </verversion> </pendency> <pendency> <MoupRupid> tk.mybatis </groupId> <artifactId> mapper </artifactid> <versions> $ {mapper.version} </versever> </persion> </spendency> </pliegue>Archivo de configuración del generador
** Configurar conexiones de base de datos
** Configure las rutas de almacenamiento del modelo generado, mapper y mapper.xml
** Configure la información de la tabla que se generará
Tenga en cuenta el TargetRuntime, aquí está myBatis3Simple, y su opción predeterminada es myBatis3. Si usamos un mapeador general, podemos escribir esto al escanear la interfaz en Spring.
Copie el código de la siguiente manera: <Bean> <Property Name = "SqlSessionFactoryBeanName" value = "jimsqlSessionFactory"/> <Property name = "basepackage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </ bean>
Si es myBatis3, el formato mapper.xml generado será mucho más complicado. He encontrado este problema antes: usar el mapper.xml generado por mybatis3, luego configurar incorrectamente el mapperscannerconfigurer en el siguiente modo mapeador general, lo que me impide de la siguiente manera. Se puede determinar que la razón es un problema de configuración (no una ID duplicada en un mapper.xml). Estudiaré la configuración del mapeador no genérico más adelante.
Copie el código de la siguiente manera: Causado por: java.lang.illegalargumentException: la colección de declaraciones asignadas ya contiene valor para com.jim.logstashmvc.dao.generated.mapper.productmapper.selectbyexpleat org.apache.ibatis.session.configuration $ strictMap.put (configuration.Java:837) org.apache.ibatis.session.configuration $ strictmap.put (configuration.java:809)
La configuración del generador es la siguiente:
Copie el código de la siguiente manera: <GeneratorConfiguration> <Properties Resource = "config.properties"/> <context targetRuntime = "myBatis3Simple" DefaultModelype = "plano"> <Property name = "startingDeliMiter" valor = "` "/> <nombre de propiedad =" endelimiter "valor =" `"/> <glugin type = "$ {mappers.pper.pliMin}"/"Valor de endDelimiter" = "` "/> <complemento =" $ {MAPER. <Property name = "Mappers" value = "$ {mapper.mapper}"/> </tugin> <jdbcconnection driverClass = "$ {jdbc.driverclass}" ConnectionUrl = "$ {jdbc.url}" userId = "$ {jdbc.username}" contraseña = "$ {jdbc.palsepelta}" <jdbconnection> <jdbconnection <javaModelGenerator TargetPackage = "$ {TargetModelPackage}" TargetProject = "$ {TargetJavaproject}"/> <SqlMapGenerator TargetPackage = "mApper" TargetProject = "$ {TargetResourcesProject}"/> <javaclientGenerator TargetPackage = "$ {TargetMaMeMeMePRAPEMPER {" TargetProject = "$ {TargetJavaproject}" type = "xmlmapper"> </javaclientGenerator> <table tableName = "producto" domainObjectName = "Product"> </table> </textis> </ GeneratorConfiguration> Configure los parámetros Maven de ejecución como se muestra en la figura a continuación.
La integración de MyBatis configura principalmente la información del grupo de conexión, complementos, escaneo mapeador y otra información.
<bean id = "jimdataSource"> <Property name = "DriverClassName" valor = "$ {jdbc.driverclass}"/> <propiedad name = "url" value = "$ {jdbc.url}"/> <propiedad = "userName" value = "$ {jdbc.username}"/> <propiedad de propiedad = "contraseña" contraseña "" value = "$ {jdbc.password}"/> <propiedad name = "inicialsize" value = "5"/> <propiedad name = "minidle" value = "10"/> <propiedad name = "maxwait" value = "60000"/> <Property name = "TimeBetSeVictionRunsMillis" Value = "60000"/> <Nombre de propiedad = "MyVictableDetimEllInTimeMemEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmEmElis" valor = "3600000"/> <propiedad name = "ValidationQuery" value = "select 1"/> <Property name = "testHileDleDle" value = "true"/> <propiedad name = "testonBorrow" value = "false"/> <propiedad name = "testOnborrow" value = "false"/> <name de propiedad de propiedad = "testonret" value = "false"/> <//> </bean> "id =" "jims.factory" name = "DataSource" ref = "jimdataSource"/> <Property name = "mApperLocations" value = "classpath: mapper/*. xml"/> <propiedad name = "typealIsespackage" valor = "com.jim.logstashmvc.dao.generated.Entity"/> <name de la propiedad = "plugins"> <RAYRAY> <RAYRAY> <RAYRAY> <RAYA> <RAYA> GAELO "GAYA" OVER "ovalos" dialecto = postgresql razonable = true SoportMethodSarGuments = True ReturnPageInfo = check params = count = CountSql </valor> </property> </bean> </array> </property> </bean> <Bean> <Property name = "sqlSessionBeanName" Value = "JimsqlSessionfactory"/> <Property Name = "BasepAckage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>Uso del mapeador general:
• Mapeador, todos los mapeadores generados se heredan de Mapper <T>, y mantienen todas las interfaces de mapeador común de forma predeterminada, incluidas las operaciones comunes de CRUD.
• IService, la definición de una interfaz mapeador general, podemos modificar esta interfaz de acuerdo con nuestro propio negocio
@ServicePublic Interface Iservice <T> {t selectbykey (tecla de objeto); int save (t entidad); int delete (clave de objeto); int updateAll (entidad t); int updateTnull (entidad t); Lista <T> selectByExample (ejemplo de objeto); // TODO OTROS ...}BaseService, la clase de implementación de General Mapper
Public Abstract Class BaseService <T> Implementa iservice <T> {@aUtowired mapper <t> mapper <t> mapper; Public mapper <T> getMapper () {return mapper; } @Override public t selectbyKey (tecla de objeto) {return mapper.selectbyPrimaryKey (clave); } public int save (t entidad) {return mapper.insert (entidad); } public int delete (clave de objeto) {return mapper.deleteByPrimaryKey (clave); } public int UpdateAll (t entidad) {return mapper.updateByPrimaryKey (entidad); } public int UpdateTnull (T entidad) {return mapper.updateByPrimaryKeySelective (entidad); } Lista pública <T> selectByExample (ejemplo de objeto) {return mapper.selectByExample (ejemplo); } // TODO OTROS ...}Categorías de servicio específicas
@ServicePublic PublicS ProductserviceImpl extiende BaseService <Product> Implementa Productservice {@Override Public List <Product> SelectByProduct (producto Producto, int Page, int Rows) {ejemplo de ejemplo = nuevo ejemplo (Product.class); Ejemplo. Criterios de criterios = ejemplo.createCriteria (); if (! stringUtils.isblank (producto.getName ())) {criteria.anequalto ("name", producto.getName ()); } if (producto.getId ()! = null) {criteria.Andequalto ("id", producto.getId ()); } PageHelper.StartPage (página, filas); return selectByExample (ejemplo); }}Instale PostgreSQL y conéctese con éxito de forma remota, integre MBG para generar mapeador y modelo, luego integre mybatis con Spring y finalmente conéctelo a través de un mapeador general para lograr nuestro objetivo: completar la mayor parte del trabajo a través de una pequeña cantidad de código y entregarlo a la herramienta para el trabajo repetido. Pero General Mapper tiene sus ventajas y desventajas, y debe equilibrarse de acuerdo con el entorno del proyecto. Personalmente, siento que los beneficios superan las desventajas.
Citado por este artículo:
1. Http://www.mybatis.tk/
2. Https://github.com/abel533/mybatis-spring
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.