Introducción a mybatis
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.
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)
1. Paquete de jarra requerido
Aquí discutimos el uso de MyBatis por separado, solo ponga el paquete mybatis-xxxjar.
Si usa Maven para crear un proyecto, debe poner la siguiente configuración en la dependencia de pom.xml:
<Spendency> <MoupRoMID> org.mybatis </groupid> mybatis </artifactid> <versión> 3.2.2 </versión> </pendency>
La compañía actualmente usa 3.2.2, y puede colocar el número de versión de acuerdo con su propio paquete JAR.
Si se está integrando con el marco correspondiente, debe poner el paquete de integración. Por ejemplo, nuestra empresa usa MyBatis para integrarse con la primavera.
También debe agregar el paquete mybatis-spring-xxx.jar y decidir según la situación real. Por supuesto, los paquetes JAR del controlador de bases de datos también son indispensables.
2. Build SQLSessionFactory desde XML
Cada aplicación basada en MyBatis se centra en una instancia de SQLSessionFactory.
Se puede obtener una instancia de SQLSessionFactory a través de SQLSessionFactoryBuilder.
SQLSessionFactoryBuilder puede construir una instancia de SQLSessionFactory a partir de un archivo de configuración XML o una instancia de configuración previa a la customizada.
Es muy simple construir una instancia de SQLSessionFactory a partir de un archivo XML. Se recomienda utilizar el archivo de recursos en ClassPath para la configuración.
Sin embargo, también se puede configurar utilizando cualquier instancia de InputStream, incluida una ruta de archivo en forma de una cadena o una ruta de archivo en forma de archivo: // URL.
MyBatis contiene una clase de herramientas llamada Recursos, que contiene algunos métodos prácticos que facilitan cargar archivos de recursos de classpath u otras ubicaciones.
Por ejemplo:
String Resource = "MyBatis-Config.xml"; InputStream IS = Resources.getResourCeasstream (recurso); SqlSessionFactory SQLSessionFactory = new SqlSessionFactoryBuilder (). Build (is);
El archivo de configuración XML (Configuración XML) contiene la configuración central para el sistema myBatis, incluida la fuente de datos para obtener la instancia de conexión de la base de datos (DataSource)
y un administrador de transacciones (TransactionManager) que determina el modo de alcance y control de las transacciones. El archivo de configuración se discutirá en detalle más adelante.
Por ejemplo:
< valor = "jdbc: mySql: //192.168.200.12: 3306/test_mybatis"> <propiedad name = "username" valor = "root"> <propiedad name = "contraseña" valor = "root123"> </propiation> </propiedad </propiedad> UsermainMapper.xml archivo. Usermainmapper.xml se encuentra en el paquete com.lanhuigu.mybatis.map, por lo que el recurso está escrito como com/lanhuigu/mybatis/map/usermainmapper.xml-> <mapper Resource = "com/lanhuigu/mybatis/map/usermainmapper.xml"> </ mapper> </mappers> </figuration>
El cuerpo del elemento ambiental contiene la configuración de la gestión de transacciones y la agrupación de conexión. El elemento Mappers contiene un conjunto de mapeadores de mapeadores (los archivos XML de estos mapeadores contienen el código SQL y la información de definición de mapeo).
3. Obtenga SQLSession de SQLSessionFactory
Ahora que tenemos el SQLSessionFactory, podemos obtener una instancia de SQLSession. SQLSession contiene completamente todos los métodos necesarios para ejecutar comandos SQL a una base de datos.
Puede ejecutar directamente las declaraciones SQL asignadas a través de la instancia de SQLSession. Por ejemplo:
SqlSessionFactory sqlSessionFactory = null; // xml construir sqlsession fábrica SqlSessionFactoryBuilder (). Build (is); session = sqlSession.Opensession (); usuario user = session.selectone ("com.lanhuiguu.mybatis.map.usermainmapper.QueryUsermainbyid", 1); system.println (user.getusername ();} No hay ningún problema en la ejecución de la mapeo de esta manera, también podemos realizar el mapeo de una manera más concisa.
Use una interfaz que pueda describir razonablemente los parámetros y los valores de retorno para una declaración dada (por ejemplo, usermainmapper.class),
No solo puede ejecutar un código más claro y tipo seguro ahora, sino que no tiene que preocuparse por literales de cadena y moldes propensos a errores. Por ejemplo:
Sqlsession session = sqlsessionFactory.opensession (); usermainMapper usermainMapper = session.getMapper (usermainmapper.class); user user = usermainMapper .QueryUsermainByid (1);
4. Ejemplo
Es fácil confundirse solo leyendo pero no practicando. Mire los ejemplos y vuelva a leer el documento, tal vez el efecto será mejor.
Prepare el paquete de jar:
mybatis-3.2.2.jar (mybatis)
MySQL-Connector-Java-5.1.21.jar (controlador de base de datos)
Junit-4.4.Jar (prueba, no quiero usar este Junit, puede usar el método principal para probarlo)
Estructura del proyecto:
base de datos:
Crear tabla `t_user_main` (` f_id` int (11) no nulo, `f_username` varchar (20) predeterminado nulo,` f_age` int (3) predeterminado nulo, clave primaria (`f_id`)) motor = myisam default = latin1; insertar en t_user_main valores (1, 'testMybatis', 25);
Configuración XML de MyBatis-mybatis-config.xml:
< valor = "jdbc: mySql: //192.168.200.12: 3306/test_mybatis"> <propiedad name = "username" valor = "root"> <propiedad name = "contraseña" valor = "root123"> </propiation> </propiedad </propiedad> UsermainMapper.xml archivo. Usermainmapper.xml se encuentra en el paquete com.lanhuigu.mybatis.map, por lo que el recurso está escrito como com/lanhuigu/mybatis/map/usermainmapper.xml-> <mapper Resource = "com/lanhuigu/mybatis/map/usermainmapper.xml"> </ mapper> </mappers> </figuration>
User.java:
paquete com.lanhuigu.mybatis.entity; import java.io.serializable; public class User User implementa serializable {private static final long serialversionUid = -34120680973487599984l; ID de introducción privada; private String username; id) {this.id = id;} public String getUsername () {return username;} public void setUsername (string username) {this.username = username;} public entero getAge () {return Age;} public void setage (edad entero) {this.age = edad;}}Usermainmapper.xml:
< El valor del espacio de nombres se establece convencionalmente en el nombre del paquete + elimina el nombre del archivo del sufijo del archivo de mapa SQL. Esto puede garantizar que el valor del espacio de nombres sea único. Por ejemplo, Namespace = "com.lanhuigu.mybatis.map.usermainmapper" es com.lanhuigu.mybatis.map (nombre del paquete) + usermainmapper (usermainMapper.xml el archivo está retirado)-> <mapper namespace = "com.lanhuigu.mybatis.map.usermaRmaNMaPerMaNMaNMaNMaNMaPerMaNMaPerMaNMAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnmAnMaPerMaPER Una instrucción SQL de consulta En la etiqueta SELECT, establece el atributo de ID de la etiqueta SELECT a QueryUsermainById, el valor del atributo de ID debe ser único y el atributo Parametertype no se puede reutilizar para indicar el tipo de parámetro utilizado en la consulta. The resultType attribute indicates the result set type returned by the query resultType="com.lanhuigu.mybatis.entity.User" means encapsulating the query result into an object of the User class Return to the User class, which is the entity class corresponding to the users table--><select id="queryUserMainById" parametertype="int" resultType = "com.lanhuigu.mybatis.entity.user"> seleccione F_ID ID, F_USERNAME USERNAME, F_AGE Age de t_user_main donde f_id = #{id} </select> </mapper>Mybatistest.java Código de prueba:
paquete com.lanhuigu.mybatis; import java.io.ioException; import java.io.inputstream; importar org.apache.iMe.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; public class myBatistest {@TestPublicPublic Void testMyBatis () SHOLE IOException {sqlSessionFactory sqlsession SqlSessionFactory Factory instancia sqlsession session = null; // Obtener el objeto sqlsession intenta {//1.mybatis del archivo de configuración, que se coloca en classpath, que es equivalente a string recursce = "mybatis-config.xml"; // 2. Lea el archivo de configuración de MyBatis y cree la instancia de fábrica SQLSessionFactory /// ======= 2.1 Use el cargador de clases para cargar el archivo de configuración myBatis (también carga el archivo de asignación asociado) // inputStream es = myBatistest.class.class.getClassLoader (). = new SQLSessionFactoryBuilder (). Build (is); // ======= 2.2 Use la clase de recursos proporcionada por MyBatis para cargar el archivo de configuración de MyBatis (también carga el archivo de asignación asociado) // Reader Reader = recursos.getResourceas Reader (recursos); // construya la fábrica SQLSessionFactory // sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ====== 2.3 Use la clase de recursos proporcionada por myBatis para cargar el archivo de configuración de myBatis inputStream es = recursos.getResourceasStream (recurso); SqlSessionFactoryBuilder (). Build (is); // 3. Cree una SQLSessionSession que pueda ejecutar SQL en el archivo de asignación = SQLSessionFactory.Opensession ();/*** La cadena de identificación para mapear sql:* com.lanhuigu.mybatis.map.usermapper es el valor del atributo de nombres de la etiqueta mapper en el usermaNMApPer.xmmAlMainMainMainMainmonmermin. Valor de atributo de la etiqueta Seleccionar del archivo UsermainMapper.xml. A través del valor de atributo de identificación de la etiqueta Select, * el SQL que se ejecutará se puede encontrar a través de la combinación de estos dos. */// Ejecute la consulta y devuelva un objeto de usuario único. Nota: "Com.lanhuigu.mybatis.map.usermainmapper.Queryusermainbyid" es la cadena de identificación que mapea SQL. Usuario usuario = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.Queryusermainbyid", 1); system.out.println (user.getusername ());} finalmente {session.close ();}}}Salida de la consola:
Para el ejemplo anterior, en el código de prueba:
Usuario usuario = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.Queryusermainbyid", 1); system.out.println (user.getusername ());¿Es este código muy desagradable de usar? Hemos dicho que hay una manera más directa:
Agregue una interfaz de mapeo al mapa de la estructura del proyecto:
paquete com.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; interfaz pública usermainmapper {usuario público QueryUsermainByid (int id);}Al mismo tiempo, modifique el código de prueba de la siguiente manera:
paquete com.lanhuigu.mybatis; import java.io.ioException; import java.io.inputstream; importar org.apache.iMe.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainMapper; {SqlSessionFactory sqlSessionFactory = null; // xml construir sqlsessionfactory instancia sqlsession session = null; // Obtener el objeto sqlsession try {//1.mybatis de configuración ruta del archivo, que se coloca en classpath, que es equivalente a string recursos = "mybatis-config.xmll"; Lea el archivo de configuración de MyBatis y cree la instancia de fábrica SQLSessionFactory /// ======= 2.1 Use el cargador de clases para cargar el archivo de configuración myBatis (también carga el archivo de asignación asociado) // inputStream es = myBatistest.class.class.getClassLoader (). = new SQLSessionFactoryBuilder (). Build (is); // ======= 2.2 Use la clase de recursos proporcionada por MyBatis para cargar el archivo de configuración de MyBatis (también carga el archivo de asignación asociado) // Reader Reader = recursos.getResourceas Reader (recursos); // construya la fábrica SQLSessionFactory // sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ====== 2.3 Use la clase de recursos proporcionada por myBatis para cargar el archivo de configuración de myBatis inputStream es = recursos.getResourceasStream (recurso); SqlSessionFactoryBuilder (). Build (is); // 3. Cree una SQLSessionSession que pueda ejecutar SQL en el archivo de asignación = SQLSessionFactory.Opensession ();/*** La cadena de identificación para mapear sql:* com.lanhuigu.mybatis.map.usermapper es el valor del atributo de nombres de la etiqueta mapper en el usermaNMApPer.xmmAlMainMainMainMainmonmermin. Valor de atributo de la etiqueta Seleccionar del archivo UsermainMapper.xml. A través del valor de atributo de identificación de la etiqueta Select, * el SQL que se ejecutará se puede encontrar a través de la combinación de estos dos. */// Ejecute la consulta y devuelva un objeto de usuario único. Note: "com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById" is the identification string that maps SQL/*User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1); System.out.println (user.getUsername ());*/usermainMapper usermainMapper = session.getMapper (usermainMapper.class); user user = usermainMapper.QueryUsermainById (1); system.printl (user.getusername ();} finalmente {session.clase (); Modificar la parte de consulta anterior a:
UsermainMapper usermainMapper = session.getMapper (usermainMapper.class); usuario user = usermainMapper.QueryUsermainById (1);
Use una interfaz que pueda describir razonablemente los parámetros y los valores de retorno para una declaración dada (por ejemplo, usermainmapper.class),
No solo puede ejecutar un código más claro y tipo seguro ahora, sino que no tiene que preocuparse por literales de cadena y moldes propensos a errores.
Ejecute el código de prueba y el efecto es el mismo.
UsermainMapper Interface Ubicación:
Dado que hemos agregado la interfaz, myBatis-Config.xml puede cambiar la configuración de la parte mapper y asignar directamente el archivo de paquete donde se encuentra la interfaz UsermainMapper:
Eso es
Modificar a
La configuración completa es la siguiente, y puede verificarla ejecutando el código de prueba. Esta práctica es más fácil de mantener y administrar mapas de manera unificada:
< valor = "jdbc: mySql: //192.168.200.12: 3306/test_mybatis"> <propiedad name = "username" valor = "root"> <propiedad name = "contraseña" valor = "root123"> </propiation> </propiedad </propiedad> UsermainMapper.xml archivo. Usermainmapper.xml se encuentra en el paquete com.lanhuigu.mybatis.map, por lo que el recurso está escrito como com/lanhuigu/mybatis/map/usermainmapper.xml-> <!-<mapper recource = "com/lanhuigu/mybatis/map/usermaNMapper.xml"> </mappers> </mAppAPT name = "com.lanhuigu.mybatis.map"> </paquete> </mappers> </figuration>
Como anteriormente, podemos ver que no importa cómo jugemos, ¿SQL todavía está asignado en UsermainMapper.xml?
¿Es esta implementación única? ¿Tengo que usar XML?
Por supuesto que no. Si su código anterior se modifica y se prueba con éxito, hagamos la última modificación.
En lugar de utilizar usermainmapper.xml para implementar la asignación, utilizamos anotaciones Java para implementar la asignación.
La modificación principal es la interfaz usermainmapper.java, agregando un nuevo método QueryUsermainByidNew y utilizando anotaciones para implementar la asignación
Mapeo de la interfaz de auto-resolución mybatis.
Interfaz modificada usermainmapper.java:
paquete com.lanhuigu.mybatis.map; import org.apache.ibatis.annotations.param; import org.apache.ibatis.annotations.select; import com.lanhuigu.mybatis.entity.user; interface usermainmapper {/*** xml*/public user useryByid (int); anotación*/@select ("Seleccione F_ID ID, F_USERNAME UserName, F_AGE Age de t_user_main donde f_id = $ {id}") Usuario público QueryUsermainByidNew (@Param ("id") int id);} El código de prueba modificado, ejecutarlo de las siguientes maneras:
paquete com.lanhuigu.mybatis; import java.io.ioException; import java.io.inputstream; importar org.apache.iMe.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainMapper; {SqlSessionFactory sqlSessionFactory = null; // xml construir sqlsessionfactory instancia sqlsession session = null; // Obtener el objeto sqlsession try {//1.mybatis de configuración ruta del archivo, que se coloca en classpath, que es equivalente a string recursos = "mybatis-config.xmll"; Lea el archivo de configuración de MyBatis y cree la instancia de fábrica SQLSessionFactory /// ======= 2.1 Use el cargador de clases para cargar el archivo de configuración myBatis (también carga el archivo de asignación asociado) // inputStream es = myBatistest.class.class.getClassLoader (). = new SQLSessionFactoryBuilder (). Build (is); // ======= 2.2 Use la clase de recursos proporcionada por MyBatis para cargar el archivo de configuración de MyBatis (también carga el archivo de asignación asociado) // Reader Reader = recursos.getResourceas Reader (recursos); // construya la fábrica SQLSessionFactory // sqlSessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); // ====== 2.3 Use la clase de recursos proporcionada por myBatis para cargar el archivo de configuración de myBatis inputStream es = recursos.getResourceasStream (recurso); SqlSessionFactoryBuilder (). Build (is); // 3. Cree una SQLSessionSession que pueda ejecutar SQL en el archivo de asignación = SQLSessionFactory.Opensession ();/*** La cadena de identificación para mapear sql:* com.lanhuigu.mybatis.map.usermapper es el valor del atributo de nombres de la etiqueta mapper en el usermaNMApPer.xmmAlMainMainMainMainmonmermin. Valor de atributo de la etiqueta Seleccionar del archivo UsermainMapper.xml. A través del valor de atributo de identificación de la etiqueta Select, * el SQL que se ejecutará se puede encontrar a través de la combinación de estos dos. */// Ejecute la consulta y devuelva un objeto de usuario único. Note: "com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById" is the identification string that maps SQL/*User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1); System.out.println (user.getUsername ());*//*usermainMapper usermainMapper = session.getMapper (usermainMapper.class); user user = usermaPper.QueryUsyUsermainByid (1); system.out.println (user.getusername ());*/usermaPappapeMaPerMaPerMeperMaper = session.getMapper (usermainMapper.class); user user = usermainMapper.QueryUsermainByIdNew (1); system.out.println (user.getUsername ());} Finalmente {session.close ();}}}}}}}Lo anterior es la colección completa de MyBatis Introducción (2) 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!