Integración de primavera y mybatis
Ideas de integración
Spring necesita administrar SQLSessionFactory a través de un singleton.
Spring y MyBatis se integran para generar objetos proxy y usar SQLSessionFactory para crear SQLSession. (La integración de Spring y MyBatis se completan automáticamente)
Los mapeadores de la capa de persistencia deben ser manejados para la primavera.
Integrar el entorno
Cree un nuevo proyecto Java (cerca de la estructura de ingeniería desarrollada real)
Paquete de frasco:
paquete mybatis3.2.7 jar
Spring3.2.0 paquete jar
MyBatis proporciona el paquete de integración de MyBatis y Spring: Spring Integration y Spring Integration, y ahora MyBatis proporciona la integración de MyBatis y Spring.
Todos los paquetes de jar (incluido SpringMVC)
Estructura de ingeniería
Paso 1: Integrar y configurar SQLSessionFactory
Configurar SQLSessionFactory y la fuente de datos en ApplicationContext.xml
SQLSessionFactory está bajo el paquete de integración de MyBatis y Spring.
< value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="10" /><property name="maxIdle" value="5" /></bean><!-- sqlSessinFactory -> <bean id = "sqlSessionFactory"> <!-Cargar myBatis Archivo de configuración-> <Property name = "configlocation" value = "mybatis /sqlmapconfig.xml" /> <!-data fuente-> <Property name = "dataSource" ref = "dataSource" /> </ Bean>Desarrollo original (después de la integración con primavera)
sqlmap/user.xml
Cargar user.xml en sqlmapconfig.xml
DAO (Implementar la herencia de clase SQLSessionDaosupport)
Anteriormente, la clase de implementación de la interfaz DAO necesitaba inyectar SQLSsoinFactory e inyectarla a través de Spring.
Aquí usamos Spring para declarar el método de configuración y configurar el frijol de DAO:
Permita que userdaoImpl implementa la clase heredar sqlsessiondaosupport
Configurar DAO
Configurar la interfaz DAO en ApplicationContext.xml
<!-Interfaz DAO original-> <bean id = "userDao"> <Property name = "SQLSessionFactory" ref = "SQLSessionFactory"/> </bean>
Procedimientos de prueba
Source_folder/userdaoImpltest.javapublic class userDaoMpltest {private ApplicationContext ApplicationContext; // Obtener contenedor Spring en el método de configuración @bebeforePublic Void setup () lanza excepción {application = new ClassPathXMLApplicationContext ("classpath: spring/applic testFinduserById () lanza la excepción {userdao userDao = (userdao) applicationContext.getBean ("userdao"); // llame al usuario user user = userdao.finduserByID (1); system.out.println (user);}}Desarrollo de agentes mapeadores
Usermapper.xml y usermapper.java
Simplemente copie el proyecto anterior y elimine la ruta del paquete.
Crear objetos proxy a través de mapperFactoryBean
Debido a que Usermapper no es un tipo de interfaz, debe usar mapperFactoryBean para generar el tipo de interfaz
Problema con este método:
Debe configurarse para cada mapeador, problemático.
Escaneo mapeador a través de mapperscannerconfigurer (recomendado)
* Después de configurar la ruta de escaneo mapper a través de la propiedad Basepackage, no es necesario configurar la ruta de escaneo en sqlmapperconfig.xml.
La propiedad SQLSessionFactoryBeanName se usa aquí porque si la propiedad SQLSessionFactory está configurada, el archivo de configuración de la base de datos y la configuración de la fuente de datos no se cargarán primero (DB.Properties)
Código de prueba
Ingeniería inversa
MyBaits requiere que los programadores escriban declaraciones SQL ellos mismos. El funcionario de MyBatis proporciona ingeniería inversa para generar automáticamente el código requerido para la ejecución de MyBatis (mapper.java, mapper.xml, po ..)
En el desarrollo empresarial real, un método de ingeniería inversa de uso común: generar código Java debido a la tabla de la base de datos.
Descargar ingeniería inversa
Cómo usar (puede usar) ejecutar ingeniería inversa
Se recomienda utilizar el método del programa Java y no confiar en las herramientas de desarrollo.
Genere archivos de configuración de código (4 lugares que deben modificarse)
Ubicación donde se genera la clase PO: CN.itcast.ssm.po
La ubicación donde se genera el archivo de mapeo mapeador: cn.itcast.ssm.mapper
La ubicación de la interfaz mapeador generada: cn.itcast.ssm.mapper
Especificar la tabla de la base de datos:
<Tabla TableName = "elementos"> </table> <table TableName = "Orders"> </table> <table TableName = "OrderDetail"> </table> <table TableName = "User"> </table> <? Xml Version = "1.0" Encoding = "UTF-8"?> < Configuración del generador 1.0 // en "" http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd "> <generadorconfiguration> <context id =" testTable "TargetRuntime =" mybatis3 "> <CommentGenerator> <!-si eliminar los comentarios generados de forma generada n. name = "SupressallComments" Value = "True"/> </commentGenerator> <!-Información sobre conexiones de base de datos: clase de controlador, dirección de conexión, nombre de usuario, contraseña-> <jdbcconnection controlclass = "com.mysql.jdbc.driver" ConnectionUrl = "JDBC: mySQL: // local: 3306/mybatis" "" " userId = "root" contraseña = "mysql"> </jdbcconnection> <!- <jdbcconnection conductClass = "oracle.jdbc.oracledriver" ConnectionUrl = "jdbc: oracle: fin: fin:@127.0.0.1: 1521: yycg" userID = "yycg" contraseña = "yycg" </jdbcontect -> <!-Falso predeterminado, JDBC decimal y tipos numéricos resuelven en entero. Cuando es verdadero, los tipos decimales y numéricos JDBC se resuelven a java.math.bigDecimal-> <javatyPeresolver> <Property name = "ForceBigDecimals" valor = "falso" /> < /javatyperesolver> <!-TargetProject: ubicación de la clase PO generada-> <javamodelgeneratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratoratorer TargetPackage = "cn.itcast.ssm.po" targetProject = "./ src"> <!-habilsubpackages: si debe usar el esquema como el sufijo del paquete-> <name de propiedad = "habilsubpackages" valor = "falso" /> <!-Espacios antes y después del valor devuelto de la base de datos se limpia-> <name de propiedad = "trimStrings" Value "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" verdadero "verdadero" /> </javaModelGenerator> <!-TargetProject: donde se genera el archivo de mapa mapper-> <sqlmapGenerator TargetPackage = "cn.itcast.ssm.mapper" targetProject = "./ src"> <!-habilitueSubpAckages: si permite que el esquema sea el sufix del paquete-> <name de propiedad = "nameSubpackages" /> </sqlmapGenerator> <!-TargetPackage: Ubicación de la generación de interfaz de mapper-> <javaclientGenerator type = "xmlmapper" targetPackage = "cn.itcast.ssm.mapper" targetProject = "./ src"> <!-enablubackages: si usa esquema como sufema de la paquete-> <s EnableSubpackAgies "Entables". value = "false"/> </javaclientGenerator> <!-Specify Database Tabla-> <table TableName = "items"> </table> <table tableName = "Orders"> </table> <table tableName = "OrderDetail"> </table> <table TableName = "Usuario"> </Tabla> </contexto> </generadorconfiguration>
Ejecutar el generador
Código generado
Use el código generado
Debe copiar el código generado en el proyecto generado a su propio proyecto.
Métodos de prueba en itemsmapper
// consulta de condición personalizada @testpublic void testSelectByExample () {itemsexample itemsexample = new itemsexample (); // Construir condiciones de consulta a través de criterios itemsexample.criteria criterios = itemsexample.createCriteria (); criterios.andnameRequalto ("Notebook 3"); // puede devolver múltiples listas <emsem> list = list = list = list = list = list = list = list = list = list = itemsMapper.SelectByExample (itemsexample); system.out.println (list);} // Query @testpublic void basado en la clave primaria testSelectByPrimary () {elementos de elementos = itemsMapper.SelectByPrimaryKey (1); System.out.Println (elementos);} // inserto @testpeid vestinsert () ipemés ítems new Items();items.setName("Mobile");items.setPrice(999f);itemsMapper.insert(items);}//Update data @Testpublic void testUpdateByPrimaryKey() {//Update all fields, you need to query it first and then update Items items = itemsMapper.selectByPrimaryKey(1);items.setName("Water CUP "); itemsMapper.UpdateByPrimaryKey (elementos); // Si el campo entrante no está vacío, use este método en actualizaciones por lotes. No hay necesidad de consultar primero y luego actualizar //itemsmapper.updateByPrimaryKeySelective(Record);}Lo anterior es un breve análisis de la integración y la ingeniería inversa de Spring y MyBatis, que espero sea útil para usted. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!