MyBatis es un excelente marco de capa de persistencia que admite consultas SQL ordinarias, procedimientos almacenados y mapeo avanzado. MyBatis elimina la configuración manual de casi todos los códigos y parámetros JDBC y busca conjuntos de resultados. MyBatis utiliza XML o anotaciones simples para la configuración y el mapeo original para mapear interfaces y Pojos de Java (objetos Java Old Old) en los registros en la base de datos.
MyBatis es un proyecto de código abierto de Apache. En 2010, este proyecto se trasladó de Apache Software Foundation a Google Code y pasó a llamarse MyBatis.
Migró a Github en noviembre de 2013, la dirección de GitHub de MyBatis: https://github.com/mybatis/mybatis-3.
El término ibatis proviene de la combinación de "Internet" y "Abatis", y es un marco de capa de persistencia basado en Java. Ibatis proporciona marcos de capa de persistencia, incluidos mapas SQL y objetos de acceso a datos (DAO).
Cada aplicación MyBatis utiliza principalmente instancias SQLSessionFactory, y se puede obtener una instancia de SQLSessionFactory a través de SQLSessionFactoryBuilder. SQLSessionFactoryBuilder se puede obtener de un archivo de configuración XML o una instancia de una clase de configuración predefinida.
1. Use el generador para generar automáticamente la capa DAO, la capa del modelo y la capa de mapeador.
Dirección de descarga del generador mybatis: http://www.mybatis.org/generator/
Generador MyBatis Introducción china: http://generator.sturgeon.mopaas.com/
A continuación se utiliza el complemento MyBatis-Generator-Core-1.3.2.Jar para agregar el paquete de conexión de la base de datos JDBC para exportar automáticamente el paquete DAO de la capa de persistencia, el paquete modelo y el paquete mapeador.
Los paquetes Java que deben usarse son:
MyBatis-Generator-Core-1.3.2.Jar,
MySQL-Connector-Java-5.1.34.Jar,
OJDBC14-10.2.0.1.0.Jar,
sqljdbc4-4.0.jar.
Archivo de configuración: generador.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! DOCTYPE GeneratorConfiguration public "-// mybatis.org//dtd Configuración del generador de MyBatis 1.0 // en" "http://mybatis.org/dtd/mybatis-Generator-config_1_0.dtdd" <200 <!-El archivo de propiedades de configuración se utiliza para introducir expresiones de EL variables en el archivo de configuración-> <!-Si lo ejecuta en CMD, debe escribir la ruta completa en la URL porque ClassPath no se puede encontrar. Para recursos-> <!-<propietarios url = "archivo: /// d: /workspaces/mybatisgen/bin/generatorConfig.properties"/>-> <!-ubicación del paquete de controlador de bases de datos-<!-paquete de controladores de datos de servidor SQL-> <ubicación de classpathEntry = "d: /JavapoProme Oracle Data Driver Package-> <!-<classpathEntry ubicación = "d: /java/m2/repository/com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.0.1.0.jar"/>-> <!-paquete de controladores de datos mysql-> <!-<classpathentryry ubicación = "d: /javaproject/generator/mysql-connector-java-5.1.34.jar"/>-> <!-Aquí especifica ese dao para mybatis3-> <!-id: debe estar configurado. El identificador único de este contexto. Este valor se utilizará en algunos mensajes de error. DefaultModelType: se usa para definir la política de tipo de modelo generativo. 1. Política predeterminada condicional, genere una clase de modelo para cada tabla 2.flat: genere una clase de modelo a partir de todas las tablas, es decir, esta clase guardará todos los campos de las tablas 3.hierarquicales: si la tabla tiene una clave principal, el modelo generará una clase de clave primaria, otra clase, que se usa para acomodar cualquier columna de blob en la tabla y otra clase que se utiliza para acomodar los fielitos restantes. Esta es una relación adecuada entre las clases heredadas. TargetRuntime: esta propiedad se utiliza para especificar el código generado por el objetivo de tiempo de ejecución. 1. Los valores predeterminados de MYBATIS3 generarán objetos que sean compatibles con MyBatis versión 3.0 y posterior, y JSE 5.0 y posterior (por ejemplo, los modelos Java e interfaces mapeadores utilizarán tipos genéricos). El método "por ejemplo" admite una dinámica casi ilimitada donde las cláusulas en estos objetos generados. Además, los objetos Java con estos generadores admiten muchas características de JSE 5.0, incluidos tipos y comentarios parametrizados. 2.IBATIS2JAVA2 3.IBATIS2JAVA5-> <context id = "mysqltables" targetRuntime = "myBatis3" DefaultModelType = "Conditional"> <!-<plugin type = "org.mybatis.generator.plugins.equalShashCodeplugin" />-> <<<<Sole Supe de los comentarios de los comentarios 1. La propiedad se utiliza para especificar si se incluirán algún comentario en el código generado. Si se establece en verdadero, no se genera ningún comentario. 2. Suprimante Detalores predeterminados en falso Esta propiedad se usa para especificar si el comentario generado incluirá la marca de tiempo de generación MBG. -> <CommentGenerator> <Property name = "SupressallComments" value = "true" /> < /commentGenerator> <!-Url de enlace de base de datos, nombre de usuario, contraseña-> <!-MySQL Database Link URL, UserName, Password-> <!-<jdbcconnection driverClass = "com.mysql.jdbc.driver" ConnectionUrl = "JDBC: mysql: //127.0.0.1: 3310/test" userId = "test" contraseña = "1234"> </jdbcconnection>-> <!-oracle database link url, username, contraseña-> <!-<jdbcconnection DriverClass = " ConnectionUrl = "JDBC: Oracle: Thin:@127.0.0.1: 1521: ORCL" userId = "test" contraseña = "1234"> </jdbcconnection>-> <!-URL de enlace de base de datos de SQL Server, nombre de usuario, contraseña-> <jdbcconnection conductClass = "com.microsoft.sqlserver.jdbc.sqlserverdriver" conectionUrl = "jdbc: sqlserver: //127.0.0.1: 1433; databasename = test" userId = "test" contraseña = "1234"> </jdbcconnection> <!- H2 <Entrada <intery " Key = "JDBC.URL"> JDBC: H2: tcp: // localhost/test </entry> <entry key = "jdbc.driver"> org.h2.driver </etning>-> <!-sqlServer2000 <Entry Key = "JDBC.URL"> JDBC: Microsoft: sqlserver: // localhost: 1433; databaseName = [database] </entry> <entry key = "jdbc.driver"> com.microsoft.jdbc.sqlserver.sqlserververdriver </etning>-> <! key="jdbc.url">jdbc:sqlserver://192.168.0.98:1433;DatabaseName=[database]</entry> <entry key="jdbc.driver">com.microsoft.sqlserver.jdbc.SQLServerDriver</entry> --> <!-- JTDs for SQLServer <entry key = "Jdbc.Url"> jdbc: jtds: sqlserver: //192.168.0.102: 1433/[base de datos]; tds = 8.0; lastupdateCount = true </entry> <entry key = "jdbc.driver"> net.sourceforce.jtds.jdbc.driver </entreting> <! key = "JDBC.URL"> JDBC: PostGresql: // localhost/[base de datos] </etning> <entry key = "jdbc.driver"> org.postgresql.driver </entry>-> <!-sybase <entry key = "jdbc.Url"> jdbc: sybase: tds: localhost: 5007/[database] key = "jdbc.driver"> com.sybase.jdbc.sybdriver </etning>-> <!-db2 <entry key = "jdbc.url"> jdbc: db2: // localhost: 5000/[database] </entry> <inying key = "jdbc.driver"> com.ibm.db2.jdbc.app.db22 Hsqldb <entry key = "jdbc.Url"> jdbc: hsqldb: mem: generatordb </etning> <entry key = "jdbc.driver"> org.hsqldb.jdbcdriver </entry>-> <!-Derby <entry key = "jdbc.url"> jdbc: derby: // local/datost Key = "JDBC.Driver"> org.apache.derby.jdbc.clientDriver </entry>-> <!-Java Type Parser Configuración opcional-> <!-<javatyperesolver type = ""> Propiedad de tipo: esto se puede usar para especificar un analizador Java impulsado por el usuario. Esta clase debe implementar la interfaz org.mybatis.generator.api. JavatyPeresolver, debe haber un constructor público predeterminado. La propiedad también puede aceptar valores especiales de forma predeterminada en este caso, se utilizará la implementación predeterminada (el mismo efecto no especifica el tipo). Las propiedades compatibles con esta etiqueta: ForceBigDecimals: El valor predeterminado es falso si forzar a BigDecimal a representar todos los campos decimales y numéricos. • Si la escala es grande y la longitud es mayor que 18, se utilizará el tipo BigDecimal. • Si su longitud es de 10 a 18, el analizador tipo Java reemplazará a Java.lang.long. • Si la longitud es de 5 a 9, entonces el analizador tipo Java se reemplazará con un Java.Lang.integer. • Si su longitud es inferior a 5, el analizador de tipo Java será reemplazado por Java.Lang.Short. -> <JavatyPeresolver> <Property Name = "ForceBigDecimals" value = "false" /> < /javatyperesolver> <!-Generar el objeto VO-> <!-<javaModelGenerator> Los elementos se utilizan para definir las propiedades generadas por los modelos Java. El generador de modelos Java crea la tabla que coincide con la clase de clave principal, la clase de registro y la clase de muestra de consulta para la introspección. Este elemento es el elemento infantil requerido <contexto> Elemento. Propiedades compatibles: ConstructorBased: Esta propiedad se utiliza para seleccionar si el generador MyBatis generará un constructor de clase, que acepta cada campo en una clase de valor. Mientras tanto, los mapas de resultados SQL se integrarán en cada campo utilizando el constructor en lugar de "setter". Esta propiedad solo es aplicable a MyBatis3 y será ignorada para IBATIS2. El valor predeterminado es falso. Inmutable: Inmutable, esta propiedad se utiliza para seleccionar si el generador MyBatis generará una clase de modelo inmutable; esto significa que la clase no tendrá un método "setter" y el constructor aceptará el valor de cada campo en la clase. El valor predeterminado es falso. Trimstrings: esta propiedad se utiliza para seleccionar si el generador MyBatis agrega código para recortar el espacio vacío devuelto de la base de datos. Esto es útil si su base de datos almacena datos en un campo de caracteres en lugar de un campo Varchar. El generador MyBatis insertará código para cortar los campos de caracteres. El valor predeterminado es falso. -> <!-Genere el nombre y la ubicación del paquete de la clase de entidad. Aquí, coloque la clase de entidad generada en el paquete com.oursc.model-> <javaModelGenerator TargetPackage = "com.ooUc.model" TargetProject = "d:/javaproject/generador/src"> <propiedad name = "EnableSubpackages" Value = "true"/> <nombre de propiedad = "Trimstrings" Value = "verdadero"/> <<<Javamodelenerator> Objeto de asignación para consulta-> <!-Genere el nombre del paquete y la ubicación del archivo de mapa SQL generado. Aquí, coloque el archivo de mapa SQL generado en el paquete com.oursc.mapping-> <sqlmapGenerator targetPackage = "com.ouc.mapping" targetProject = "d:/javaproject/generator/src"> <propiedad name = "enableSubpackages" value = "true"/> </sqlmapGenerator> <! JavaclientGenerator> Los elementos son atributos utilizados para definir los generadores de código de cliente Java. El generador de clientes Java se utiliza para establecer interfaces y clases de Java para que el modelo Java generado y los archivos de mapeo XML se puedan usar fácilmente. Para el entorno objetivo IBATIS2, estos objetos generados adoptan la forma de la interfaz DAO y las clases de implementación. Para MyBatis, el objeto generado usa una interfaz mapper. Este elemento es un elemento infantil opcional. Si no especifica este elemento, el generador MyBatis (MBG) no generará interfaces y clases de clientes Java. Donde tipo atributo: si TargetRuntime es mybatis3 xmlmapper: el objeto generado interactuará la interfaz Java a la infraestructura mybatis 3.x mapper. La interfaz dependerá del archivo mapper XML generado. En general, se utiliza este XMLMapper. -> <!-Genere el nombre del paquete y la ubicación del DAO. Aquí, la clase DAO generada se coloca en el paquete com.oursc.dao-> <javaclientGenerator type = "xmlmapper" targetPackage = "com.ouc.dao" targetProject = "d:/javapoProject/generator/src"> <name de propiedad = "EnBABLECACKAGES" Valor = "verdadero"/> </javaclientenerator <! Seleccione una tabla en la base de datos. La tabla seleccionada dará como resultado los siguientes objetos que se generan para cada tabla: • Una mybatis/ibatis • Archivo de mapeo SQL formateado • Un conjunto de clases que forman la tabla "modelo" que incluye: • Una clase para que coincida • La clave principal de la tabla (si la tabla tiene una clave principal). • Los campos en la tabla coinciden no en la clave primaria, no en el campo BLOB. Esta clase extenderá la clave principal si hay una. • Una clase para mantener el campo BLOB en cualquier tabla (si la hay). Esta clase extenderá las dos primeras clases de una dependiendo de la configuración de la tabla. • Una clase, utilizada para generar dinámicas donde las cláusulas, en diferentes métodos "por ejemplo" (selectByExample, DeleteByExample). • (Opcional) Interfaz DAO y nombre de TableName: se debe configurar el nombre de la tabla especificada. DomainObjectName: el nombre básico del objeto Javabean generado. Si no se especifica, MBG se generará automáticamente en función del nombre de la tabla. Este nombre (ya sea especificado aquí o generado automáticamente) se utilizará como el nombre de la clase de dominio y el nombre de la clase DAO. HabilitarInsert: si se debe generar una declaración de inserción. El valor predeterminado es verdadero habilitableLectbyPrimaryKey: si generar una declaración de selección a través de la clave primaria. Independientemente de si existe una configuración de este tipo, si la tabla no tiene una clave primaria, no se generará. EnableUpdateByPrimaryKey: si se debe generar declaraciones de actualización a través de la clave principal. Si la tabla no tiene una clave principal, la declaración no se generará independientemente de si la propiedad está establecida o no. EndableLeteByPrimaryKey: si generar una declaración de eliminación a través de la clave principal. Si la tabla no tiene una clave principal, sin importar que esta propiedad esté establecida, la declaración no se generará. ActableEleteByExample: si generar una declaración de eliminación a través del objeto de ejemplo. Esta declaración realiza muchas deleciones dinámicas diferentes generadas en tiempo de ejecución. EnableCountByExample: si se debe generar una declaración para calcular el número de filas a través del objeto de ejemplo. Esta declaración devuelve un ejemplo que coincide con el número de filas en una tabla. EnableUpdateByExample: si se debe generar declaraciones de actualización a través del objeto de ejemplo. Esta declaración actualizará un registro coincidente en una tabla. SelectByPrimaryKeyQueryid: este valor se agregará a la lista de selección para seleccionar la declaración por la clave principal en esta tabla: "'<valor> as Queryid". Esto se puede usar para identificar consultas en la herramienta de seguimiento de tiempo de ejecución en DBA. Si necesita usar, debe especificar una ID única para generar MBG para cada consulta diferente. SelectByExamplequeryId: este valor se agregará a la lista de selección para seleccionar la declaración por ejemplo en esta tabla: "'<valor> as Queryid". Esto se puede usar para identificar consultas en la herramienta de seguimiento de tiempo de ejecución en DBA. Si necesita usar, debe especificar una ID única para generar MBG para cada consulta diferente. habilselectByExample: ¿Debería generarse la declaración de selección a través del ejemplo? Esta declaración realiza muchas consultas dinámicas diferentes generadas en tiempo de ejecución. ModelType: esta propiedad se utiliza para anular el tipo de modelo predeterminado si desea hacer esto para esta tabla. Si no se especifica, MBG generará el objeto de dominio basado en el tipo de modelo de contexto predeterminado. Este tipo de modelo define cómo se generará la clase de dominio MBG. Algunos tipos de modelos MBGS generarán una clase de dominio única para cada tabla, y otros pueden generar diferentes clases MBG dependiendo de la estructura de la tabla. ESCAPEWILDCARDS: excluya los comodines. Esto significa que tanto el esquema como los nombres de la tabla de los comodines SQL ('_' y ' %') deben evitarse en las columnas de búsqueda. Este es algunos controladores que requieren que si el esquema o la tabla contiene un comodín SQL (por ejemplo, si el nombre de una tabla es my_table, algunos controladores requieren que se escapen los caracteres de bajo costo). -> <!-para generar esas tablas (cambiar TableName y DomainObjectName)-> <table TableName = "v_supplyUser" domainObjectName = "vsupplyUser" EnlableByExample = "false" FALSE "EnsableByExample =" false "EntabledyExample =" false "EnableLectByExample =" false "SELECTYExampleMample =" false "EntabledEnExample =" false "EnableLectByExample =" false "SelectByExampleMample =" False "EntabledEnExample =" False "EnableLectByExample =" FALSE "SELECTBYEXPLADO" TableName = "wj_gatelist" domainObjectName = "wjgatelist" habiledeCountByExample = "false" EnableUpDateByExample = "false" habilitEleteByExample = "false" habildedByExample = "false" selectByExamperyId = "false"/> </contexto> <//generador Configuration> Abra la línea de comando CMD, vaya al archivo donde se encuentra el archivo de configuración y ejecute la siguiente declaración de generación:
java -jar mybatis -generador -core -1.3.2.jar -configfile generador.xml -verwrite
Después de ejecutar el comando, puede ver que el paquete DAO, el paquete modelo y los archivos de paquete mapper se generan en la ruta correspondiente.
2. Integración del marco de Mybatis
1) MyBatis utiliza la configuración de parámetros: sqlmapconfig.xml.
① Configuración de caché (caché): Cacheenabled: Global Switch: El valor predeterminado es verdadero. Si está configurado como falso, es inútil configurar los otros archivos XML mapper para admitir caché.
② Carga de retraso:
LazyLoadingEnabled: True usa la carga perezosa, falso deshabilita la carga perezosa, el valor predeterminado es verdadero, cuando está deshabilitado, todos los objetos asociados se cargarán instantáneamente.
Cuando AgressliveLAyLoading: True está habilitado, cuando se accede a una propiedad de objeto perezoso en el objeto cuando la carga perezosa está habilitada, todas las propiedades del objeto perezoso de este objeto se cargarán completamente. FALSO. Al cargar retrasos, cargue las propiedades del objeto según sea necesario (es decir, acceder a una propiedad de objeto perezoso en el objeto y otras propiedades de objeto perezoso en el objeto no se cargarán). El valor predeterminado es verdadero.
③ MultipleReSultSetSenable: Permita y no permita que una sola declaración devuelva múltiples conjuntos de datos (dependiendo de los requisitos del controlador). El valor predeterminado es verdadero.
④ USEColumnLabel: use etiquetas de columna en lugar de nombres de columnas. Diferentes unidades tienen diferentes enfoques. Consulte la documentación de la unidad o pruebe con estas dos opciones diferentes.
⑤ Use GeneratedKeys: permite que JDBC genere claves primarias. Se requiere soporte de manejo. Si se establece en verdadero, esta configuración forzará la clave primaria generada, algunas unidades son incompatibles pero aún se pueden ejecutar.
⑥ AutomapingBehavior: especifica si MyBatis mapea automáticamente los campos de la tabla de datos y las propiedades de los objetos. Parcial solo asignará automáticamente simple, sin resultados anidados. Completo asignará automáticamente todos los resultados complejos.
⑦ DefaultExecutortype: configura y establece el ejecutor, y el ejecutor simple ejecuta otras declaraciones. El ejecutor de reutilización puede reutilizar declaraciones de declaraciones preparadas, y el ejecutor por lotes puede ejecutar repetidamente declaraciones y actualizaciones de lotes.
⑧ El tiempo predeterminado TIMEOut: Establezca un límite de tiempo para determinar cuánto tiempo esperará la unidad a que la base de datos responda al tiempo de espera.
El archivo de configuración completo de SQLMapConfig.xml es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> <! DocType ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <Configuration> <settings> <setting name = "Capacéutico" /> <setting name = "lazyLoadingEnabled" valor = "true" /> <setting name = "multipleReSultSeSEnabled" value = "true" /> <setting name = "multipLerSultSetSeNabled" value = "true" /> <setting name = "usecolumnlabel" value = "true" /> <setting name = "useGenerated Keal" Value = "false" /> <name = "name" Authaveher "Automater". value="PARTIAL" /><setting name="defaultExecutorType" value="SIMPLE" /><!-- SIMPLE REUSE BATCH --><!-- <setting name="defaultExecutorType" value="BATCH" /> --><setting name="defaultStatementTimeout" value="" /><setting name="safeRowBoundsEnabled" value="false" /><setting name="mapUnderscoreToCamelCase" value = "false" /> <setting name = "localCacheScope" value = "session" /> <!-<setting name = "jdbctypefornull" value = "other" />-> <setting name = "jdbctypefornull" value = "null" /> <setting name = "lazyAzyLoadTigMethods" valora = "iguales, clone, hashcode, tostring" /> </etENTAYS> <Pypealiases> <S-MODULE-> <typealias alias = "user" type = "com.oursc.mkhl.platform.authority.model.user"/> <typealias alias = "rol" type = "com.ouc.mkhl.plpl.plpl.authityity.model.role"/> <typealias alias = "equipos" equipos " type = "com.ouc.mkhl.platform.basedata.model.equipment"/> <typealias alias = "fábrica" type = "com.oub.mkhl.platform.basedata.model.factory"/> </tipo de handler = "com.ooUc.openplatform.dao.mybatis.SerializableTypeHandler"/> </typehandlers> </figuration>
Procesamiento de valor especial de serialización: SerializableTypeHandler
paquete com.ooUc.openplatform.dao.mybatis; import java.io.serializable; import java.sql.callableStatement; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlucle; org.apache.ibatis.type.jdbctype;/*** @author wuping*/public class SerializeBeStypeHandler extiende basetypeHandler <Serializable> {@OverridePublicPublic Void setNonnullParameter (preparado PS, int i, parámetro serializable, jdbctype jdbctypeSeTpe) {ps.SetObject (i, parámetro);}@overridePublic serializable getNullAlleresult (resultSet rs, String columnName) lanza sqLException {return (serializable) rs.getObject (columnName);}@overDepublicEnizable getNullAblEableResult (resultsetSet RS, int columna) (Serializable) rs.getObject (columnIndex);}@overridePublic serializable getNullableSeSult (CallableStatement CS, int columnIndex) lanza SQLException {return (serializable) csgetObject (columnIndex);}}}} 2) Conjunto de resultados de resultados de resultados:
Al seleccionar la asignación en MyBatis, el tipo de retorno se puede usar con Resulttype o ResultMap. Resulttype representa directamente el tipo de retorno, mientras que el resultado de resultados es una referencia al resultado de resultados externo, pero el resultado de resultados y el resultado de resultados no pueden existir al mismo tiempo. Cuando MyBatis consulta la asignación, de hecho, cada consulta de atributos se coloca en un mapa correspondiente, donde la clave es el nombre del atributo y el valor es su valor correspondiente. Cuando el atributo de tipo de retorno proporcionado es resultante, MyBatis eliminará los pares de valores clave en el mapa y los asignará a los atributos correspondientes del objeto especificado por resultType. Entonces, de hecho, el tipo de retorno de cada mapa de consulta de MyBatis es un resultado de resultados. Sin embargo, cuando el atributo de tipo de retorno que proporcionamos es resultType, MyBatis asigna automáticamente el valor correspondiente a los atributos del objeto especificado por resultType. Cuando el tipo de retorno que proporcionamos es ResultMap, porque el mapa no puede representar bien el modelo de dominio, necesitamos convertirlo aún más en el objeto correspondiente nosotros mismos, lo que a menudo es muy útil en consultas complejas.
Ejemplo: userBaseResultMap
<resultmap id = "userBaseResultMap" type = "user"> <id columna = "id" propiedad = "id" jdbctype = "entero" /> <resultado columna = "username" metail = "username" jdbctype = "varchar" /> <resultado columna = "contraseña" = "contraseña" JDBCTYPE = "VARCHAR" /> <COLUNTO DE COLUNTACIÓN " /" COLUNTO "PERSONACIÓN" CORREO ELITOR "PERSONACIÓN" CORREO ELITRO = "Propiedad =" Propiedad = "Propiedad". jdbctype = "varchar" /> <resultado columna = "trueName" propiedad = "trueName" jdbctype = "varchar" /> <resultado columna = "sexo" propiedad = "sex" jdbctype = "varchar" /> <resultado columna = "edad" propiedad = "edad" jdbctype = "integer" /> <resultado columna = "Teléfono" Teléfono "Teléfono" Teléfono "Teléfono" Teléfono "" Teléfono ". jdbctype = "varchar" /> < /resultmap>
Clase de modelo: usuario
paquete com.oouc.mkhl.platform.authority.model; import java.io.serializable; // Información del usuario Clase pública El usuario implementa serializable {private Static Final Long SerialVersionUid = 1098321123l; ID de entero privado; // ID de usuario String private String UserName; // Nombre de usuario Contraseña de cadena privada; // Nombre de usuario Correo electrónico de cadena privada; // Envíe un correo electrónico a una cadena privada Truyame; // Nombre real Sexo de cadena privada; // Edad de entero privado de género; // Teléfono de cadena privada de edad; // teléfono móvil public entero getId () {return id; } public void setid (ID de entero) {this.id = id; } public String getUsername () {return UserName; } public void setUsername (String UserName) {this.Username = username == null? nulo: username.trim (); } public String getPassword () {return Password; } public void setPassword (String Password) {this.password = contraseña == NULL? nulo: contraseña.trim (); } public String getEmail () {return email; } public void setEmail (correo electrónico de cadena) {this.email = correo electrónico == null? nulo: email.trim (); } public String getTruename () {return trUEname; } public void setTrUename (string trUeName) {this.trUename = trUEname == null? NULL: TrUEname.trim (); } public String getsex () {return sex; } public void setsex (sexo de cadena) {this.sex = sex == null? nulo: sex.trim (); } public Integer GetAge () {return Age; } public void setAge (edad entera) {this.age = edad; } public String getTelephone () {return Telephone; } public void settelephone (teléfono de cadena) {this.telephone = phone == null? nulo: phone.trim (); }} 3) Agregar, eliminar, modificar y verificar:
(1) Seleccione la consulta:
① ID: el identificador único en este modo puede ser referenciado por otras declaraciones.
② Parametertype: el nombre completo de clase o alias del parámetro pasado a esta declaración.
③ Resulttype: la declaración devuelve el nombre o alias de clase completo del tipo de valor. Tenga en cuenta que si se trata de una colección, entonces todo el nombre o alias de clase del artículo en la colección se llena aquí, en lugar del nombre de clase de la colección en sí. (ResultType y ResultMap no se pueden usar juntos)
④ ResultMap: el nombre de map del resultado externo referenciado. El mapeo del conjunto de resultados es la característica más poderosa en MyBatis. Muchas asignaciones complejas se pueden resolver fácilmente. (ResultType y ResultMap no se pueden usar juntos)
⑤ FlushCache: si se establece en verdadero, el caché se borrará cada vez que se llame a la declaración. La instrucción SELECT se establece en falso de forma predeterminada.
⑥ USECACHE: si se establece en True, el conjunto de resultados de la declaración se almacenará en caché. La instrucción SELECT se establece en falso de forma predeterminada.
⑦ Tiempo de espera: Establezca el tiempo máximo que la unidad espera una respuesta antes de lanzar una excepción. El valor predeterminado es no establecer el valor, y la unidad lo decide en sí.
Ejemplo: consulta toda la información del usuario: selectUsers
<select id = "selectUsers" resultMap = "userBaseReSultMap"> Seleccionar id, nombre de usuario, correo electrónico del usuario </select>
(2) Insertar Insertar: saveuser
Aquí la tabla de base de datos utiliza la clave principal para aumentar, y la clave principal es ID.
① FetchSize: después de establecer un valor, la unidad se entusiasmará a regresar después de que el número de conjuntos de resultados alcance este valor. El valor predeterminado no está establecido, que está determinado por la unidad misma.
② DeclaryType: Declaración, declaración preparada, CallableStatement. Declaraciones preparadas, declaraciones invocables.
③ Use GeneratedKeys: use el método GetGeneratedKeys de JDBC para obtener la clave principal generada por la base de datos en sí (MySQL, SQLServer y otras bases de datos relacionales tendrán campos que se generarán automáticamente).
④ KeyProperty: identifica un valor devuelto por la clave que MyBatis se establecerá en GetGeneratedKeys, o use un elemento infantil de KeyKey para la instrucción Insertar.
<Insert id = "SaveUser" Parametertype = "User"> Insertar en usuarios (nombre de usuario, contraseña, correo electrónico, nombre de trío, sexo, edad, teléfono) valores ( #{username, jdbctype = varchar}, #{contraseña, jdbctype = varchar}, #{correo electrónico, jdbcctype = varche}, #{TrUename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{edad, jdbctype = integer}, #{teléfono, jdbctype = varchar}) </sert> (3) Actualización de actualización: actualizar dinámicamente SQL: UpdateUser
<update id = "updateUser" parametertype = "user"> actualizar el usuario <set> <if "username! = null"> username = #{username, jdbctype = varchar}, </if> <if test = "contraseña! = null"> contraseña = #{contraseña, contraseña, jdbctype = varchar}, <//if <if null "correaje! #{email,jdbcType=VARCHAR},</if><if test="trueName != null" >trueName = #{trueName,jdbcType=VARCHAR},</if><if test="sex != null" >sex = #{sex,jdbcType=VARCHAR},</if><if test="age != null" >age = #{edad, jdbctype = integer}, </if> <if test = "phone! = null"> phone = #{phone, jdbctype = varchar}, </if> </set> where id = #{id, jdbctype = integer} </update> (4) Eliminar Eliminar: Eliminar
<delete id = "deleteuser" parametertype = "entero"> delete de userwhere id = #{id, jdbctype = integer} </elete> (5) SQL: el elemento SQL se usa para definir un segmento de instrucción SQL reutilizable para que otras declaraciones llamen.
<sql id = "userBasecolumnList"> Nombre de usuario, contraseña, correo electrónico, teléfono </sql> <select id = "getUsers" resultMap = "userBaseResultMap"> select <include refid = "userBasecolumnList"/> de user </select>
(6) Parámetros: Parámetros: MyBatis puede usar tipos de datos básicos y los complejos tipos de datos de Java.
Tipos de datos básicos, cadena, int, fecha, etc.
El uso de tipos de datos básicos solo puede proporcionar un parámetro, por lo que debe usar la clase de entidad Java o el tipo de mapa como tipo de parámetro. Sus atributos se pueden obtener directamente a través de #{}.
① Parámetros de tipo de datos básicos: cadena
<Select id = "getUserByName" resultType = "user" parametertype = "string"> select id, nombre de usuario, correo electrónico desde userwhere username = #{username, jdbctype = varchar} </select> Código Java:
Usuario público getUserByName (nombre de cadena); // Obtener información de usuario basada en el nombre de usuario
② Parámetro de tipo de entidad Java: usuario
<Insert id = "SaveUser" Parametertype = "User"> Insertar en el usuario (nombre de usuario, contraseña, correo electrónico, nombre de trueName, sexo, edad, teléfono) valores ( #{username, jdbctype = varchar}, #{contraseña, jdbctype = varchar}, #{correo electrónico, jdbcctype = varche}, #{TrUename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{edad, jdbctype = integer}, #{teléfono, jdbctype = varchar}) </sert> Código Java:
public int SaveUser (usuario de usuario); // insertar información del usuario
③ Parámetros del mapa: map <string, object> Recordmap
<select id = "selectChildGrouptoTalnum" resultType = "Integer"> select Count (*) de GroupInfo <Trim prefix = "donde" prefiXoverRides = "y | o"> e id en <foreach Collection = "IDSTR" item = "IDS" Open = "(" Separator = "," Close = ")>" nombre! = '' '"> y name como concat (concat ('%', #{name}),'%') </if> <if test =" Descripción! = Null y descripción! =' '' "> y descripción como concat (concat ('%', #{descripción}), '%') </if> <if test =" type! = type! =-1 "> y type = type = Type = #{type, jdbctype = integer} </if> <if test = "Category! = NULL and Category! =-1"> y categoría = #{Categoría, jdbctype = Integer} </if> </trim> </select> Código Java:
// Obtenga el número total de registros en subgrupos públicos int selectChildGrouptoTalnum (map <string, object> RecordMap); Map <String, Object> RecordMap = new HashMap <String, Object> (); RecordMap.put ("Idstr", Group.GetChildGroupIds (). Split (",")); RecordMap.put ("Name", Name); RecordMap.put ("Descripción", Descripción); RepajSp.put ("Tipo", -1); RecordMap.put ("Categorial", -1); Groupdao.SelectChildGrouptoTalnum (RecordMap); ④ Múltiples parámetros:
Método 1: Pase los parámetros en orden.
<
Código Java:
// Consulta el parámetro idpublic int selectSensorNobySensorName (String Sensorname, int testUnitno, String LabCode);
Método 2: Agregar anotación @param a los parámetros de la interfaz.
<select id = "selectbyUsernameEndvcode" resultMap = "userBaseReSultMap"> select id, nombre de usuario de user <TRIM prefix = "Where" prefiXoverRides = "y | o"> <if test = "username! = null y username! = '' '"> y el nombre de usuario como concat (concat ('%', #{UserName}, if),' <), ' test = "Supperno! = NULL y SUMPRADERNO! = ''"> y el proveedor como concat (concat ('%', #{proveierNo}), '%') </fif> y proveedor! = 'test' </ trim> limit #{startIndex}, #{págs. PageSize} </etect> Código Java:
// consulta información del usuario basada en el nombre de usuario y la lista pública del código V <serve> selectbyUsernameEndVcode (@param ("username") string username,@param ("proveedor") cadena de cadena de proveedor,@param ("startIndex) int intartindex, @param (" pageizize ") int pageSize); 4) Declaración dinámica de SQL:
Seleccione la etiqueta Key, si la etiqueta, el juicio condicional de if + where, actualizar la instrucción de if + set, si + recortar reemplaza dónde/establecer la etiqueta, recortar reemplaza el set, elija (cuándo, de lo contrario), la etiqueta foreach. Las declaraciones dinámicas de SQL son la parte más flexible de MyBatis, y es muy conveniente usarlas bien.
Ejemplo: selecttotalNumbyAccountType
<select id = "selecttotalnumByAccountType" resultType = "Integer"> Select Count (*) del usuario <TRIM prefix = "Where" prefiXoverRides = "y | o"> e id no en <foreach Collection = "IDSTR" item = "IDS" Open = "(" Separator = "," Close = ")"> #{Ids} </foreach> </foreach> NULL y USERNAME! = '' "> y UserName Like Concat (concat ('%', #{username}), '%') </if> <if test =" Supperno! = NULL y SUMPRADO! = '' '"> y SUPERVIERNO Like ONDAT (concat ('%', #{proveerno}),'%) </if> <</if test Truyame! = '' '"> y Truyame Like Concat (concat ('%', #{TrUename}),'%') </fif> y cuento = #{AccountyPe} </ trim> </elect>Lo anterior es un resumen del conocimiento de uso del marco de capa persistente mybatis presentada por el editor. Espero que te sea útil. 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!