MyBatis es un excelente marco de capa de persistencia que admite consultas SQL simples, procedimientos almacenados y mapeo avanzado. MyBatis elimina la configuración manual de casi todos los códigos y parámetros JDBC y la encapsulación de búsqueda del conjunto de resultados. MyBatis puede usar XML o anotaciones simples para la configuración y mapeo original, mapeo de interfaces y Pojos de Java (objetos Java Old Old) en los registros en la base de datos.
Mapeo uno a uno
En la vida, todavía hay ejemplos uno a uno, como estudiantes y tarjetas de identificación, o en nuestro país, se implementa el sistema de monogamia. Luego solo tenemos una tarjeta de identificación para estudiantes y tarjetas de identificación, y por supuesto solo hay una tarjeta de identificación para cada tarjeta de identificación.
Script de base de datos:
- Eliminar la base de datos de caída de la base de datos si existe myBaits;- Crear base de datos Crear base de datos si no existe myBatis Conjunto de caracteres predeterminado UTF8;- Seleccione la base de datos Use myBatis;- Eliminar tabla de datos de datos si existe el estudiante; table de caída si existe tarjeta; Create TABLE Student (SID int (255), Sname Varchar (32), SCID int (255), restricción PK_SID Clave primaria (SID), restricción FK_Scid Exterior Key (SID) Tarjeta de referencias (CID)); Agregue los valores de inserción de datos de prueba en la tarjeta (CID, NUM) (1, '123456789012345678'); valores (1, 'jaja', 1);
Crea una nueva clase One2one.card.java
paquete one2One; import java.io.Serializable;/*** Id Card*@author Administrator **/ @supressWarnings ("serial") tarjeta de clase pública implementa serializable {private entero cid; private string num; public integer getcid () {return cid;} public void setcid (intenger cid) {this.cid = cid;}; {return num;} public void setNum (String num) {this.num = num;}}Crea una nueva clase One2One.student.Java
paquete one2one; import java.io.Serializable;/*** Estudiante*@author administrador **/ @supressWarnings ("serial") public class Student Student implementa serializable {privado entero entero; sname;} public void setsname (string sname) {this.sname = sname;} public tarjeta getCard () {tarjeta de retorno;} public void setcard (tarjeta de tarjeta) {this.card = tarjeta;}}Cree un nuevo archivo CardMapper.xml en el paquete One2One
<? xml versión = "1.0" encoding = "utf-8"?> < type = "One2One.card" id = "Cardmap"> <id columna = "cid" propiedad = "cid"/> <resultado columna = "num" propiedad = "num"/> <resultmap> </mapper>
Del mismo modo, cree un nuevo archivo StudentMapper.xml en el paquete One2One
<? xml versión = "1.0" encoding = "utf-8"?> < type = "one2One.student" id = "studentmap"> <id columna = "sid" propiedad = "sid"/> <resultado columna = "sname" propiedad = "sname"/> <!-No escriba campos relacionados-> </sul Cwhere S.Scid = C.cid y S.Sid = #{Sid} </select> </mapper>Cree un nuevo archivo mybatis.cfg.xml en SRC e incluya archivos studentmapper.xml y cardmapper.xml
<? xml versión = "1.0" encoding = "utf-8"?> < default = "mysql_developer"> <!-Connect MySQL Información del entorno-> <entorno id = "mysql_developer"> <!-myBatis usa JDBC Transaction Manager-> <TransActionManager type = "JDBC"/> <!-MyBatis usa Counsing de conexión para obtener ObjectS de conexión-> <Datasource Type = "Poured" <!-; with the database --><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value = "mysqladmin"/> <dataSource> </entorno> <!-Conexy Oracle Englain Information-> <Environment id = "oracle_developer"> <!-myBatis usa JDBC Transaction Manager-> <TRANSACTIONMANAGER TIPO = "JDBC"/> <!-MyBatis utiliza la agrupación de conexión para obtener objetos de conexión-> <Dataurce TypeCe Typee = "" JDBC "/> <!--MyBatis usa la agrupación de conexión para obtener objetos de conexión-> <Dataurce TypeCe Typee =" "JDBC"/> <!-MyBatis usa la combinación de conexión para obtener objetos de conexión-> <Dataurce typeCe Typee = "" JDBC "/> <!--MyBatis usa la agred Propiedades para interactuar con bases de datos -> <propiedad name = "controlador" valor = "oracle.jdbc.driver.oracledriver"/> <propiedad name = "url" value = "jdbc: oracle: oracle: delgada:@127.0.0.1: 1521: orcl"/> <name de propiedad = "user" valor = "scott"/> <nombre de propiedad = "contraseña" contraseña " value = "Tiger"/> </shasource> </entorno> </entornos> <!-Cargando el archivo de mapa-> <mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers> </formuatese>
Cree una nueva clase de herramienta myBatisutil.java clase en el paquete Util
paquete Util; import java.io.ioException; import java.io.reader; import java.sql.connection; import org.apache.e org.apache.ibatis.session.SqlSessionFactoryBuilder; clase pública myBatisUtil {private static staticLocal <sqlSession> ThreadLocal = new ThreadLocal <SqlSession> (); Public Static sqlSessionFactory sqlSession SqlSession; // Método de construcción de construcción privado MyBatiLil () src /mybatis.cfg.xmlStatic {try {lector lector = recursos.getResourCeAsreader ("mybatis.cfg.xml"); sqlSessionFactory = new SqlSessessionFactoryBuilder (). Build (Reader);} Catch (IoException e) {E.PrintStacktRace ();} SqlSession* @return*/public static sqlSession getSqlSession () {// get sqlsession del objeto del actual ThreadSqlSession sqlsession = threadlocal.get (); if (sqlsession == null) {if (sqlsessionFactory está unido al actual ThreadThreadLocal.set (SQLSession);}} return sqlSession;}/*** Cerrar SqlSession y separarse del hilo actual*/public static void ClosesqlSession () {// Objeto SqlSessession del hilo actual SqlSession sqlSession = ThreadLocal.get (); /// Si el objeto SqlSession if (sqlsession! = null) {// cierra el objeto sqlsession sqlsession.close (); // separa la relación entre el hilo actual y sqlsession threadlocal.remove ();}} // prueba public static void main (string [] args) {sqlSession sqlssession = mybatisutil.getSqlSession () sqlsession.getConnection (); system.out.println (Conn! = NULL? "Conexión exitosa": "Falló de conexión");}}Crear una nueva clase de capa de persistencia stuentcarddao.java clase
paquete one2one; import org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** Persistence Layer*@author Administrator **/public student studentCarddao {/*** Información de la tarjeta de la tarjeta del estudiante No. 1 de la consulta* Excepción {sqlSession sqlsession = null; try {sqlsession = myBatisUtil.getSqlSession (); return sqlsession.selectone ("studentNamespace.findById", id);} Catch (Exception e) {E.PrintStackTrace (); shower e;} Finalmente, {myBatisUtil.ClossqlSession ();}} // Test Consuly La información del estudiante No. 1 información de la tarjeta de identificación @TestPublic Void testFindById () lanza la excepción {StudentCardDao dao = new StudentCardDao (); Student = dao.findbyid (1); System.out.Println (student.getsid () ")") }}En este momento, solo podemos consultar el nombre del Estudiante No. 1, pero no podemos consultar su número de identidad, porque el valor del atributo de la tarjeta en este momento es nulo, que se puede ver en StudentMapper.xml
<select id = "findByid" parametertype = "entero" resultmap = "studentMap">
Cuando mybatis analiza esta oración, solo puede encapsular los datos de la consulta en Sid y Sname, entonces, ¿qué debo hacer?
En StudentMapper.xml
<resultMap type = "One2One.card" id = "CardMap"> <id columna = "Cid" Property = "Cid"/> <resultado columna = "num" Property = "num"/> <resultado columna = "num"/> </ resultadomap>
Aumentar
<
Entonces el contenido completo de StudentMapper.xml en este momento es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> < type = "one2One.student" id = "studentmap"> <id columna = "sid" propiedad = "sid"/> <resultado column = "sname" propiedad = "sname"/> <!-Introducir información de asignación en CardMapper.xml Propiedad de archivo representa las propiedades asociadas de estudiante-> <Propiedad de asociación = "Card" ResultMap = "Cardnamespace.cardMap"/> </> <Resultados asociados parametertype = "Integer" resultMap = "StudentMap"> Seleccione S.Sid, S.Sname, C.Cid, C.Num de Student S, Card Cwhere S.Scid = C.cid y S.Sid = #{Sid} </seling> </ mapper>Ahora puede probar su número de identificación de estudiante
Cambie el método de prueba de la clase de capa de persistencia stuentcarddao.java clase a
// testPublic void testFindById () lanza la excepción {StudentCardDao Dao = new StudentCardDao (); Student Student = dao.findbyid (1); System.out.println (student.getSid ()+":"+student.getsname ()+":"+student.getCard (). GetNum ();}Similarmente
Agregue un método para consultar la información de la tarjeta de identificación y la tarjeta de identificación "jaja" en la clase de studentdao.java
/*** Consulta La información y la información de la tarjeta de identificación de los estudiantes "jaja"* @param name* @return* @throws excepción*/public student findByName (nombre de cadena) lanza la excepción {sqlSession sqlsession = null; try {sqlSession = myBatisUtil.getSqlSession (); return sqlSsession.selEn (Excepción e) {E.PrintStackTrace (); tirar e;} Finalmente {myBatisutil.clossqlSession ();}}Y agregar métodos de prueba
// testPublic void testFindByName () lanza la excepción {StudentCardDao Dao = new StudentCardDao (); Student Student = dao.findbyname ("jaja"); system.out.println (student.getSid ()+":"+student.getSname ()+":" student.getCard (). Getnum ());}Por supuesto, si lo prueba ahora, morirá miserablemente porque no configuró <Select> en el archivo StudentMapper.xml, por lo tanto, agregue la información de configuración <elect> al archivo StudentMapper.xml.
<select id = "findByName" parametertype = "string" resultmap = "studentmap"> select s.sid, s.sname, c.cid, c.num from student s, card cwhere s.scid = c.cid y s.sname = #{sname} </select>De esta manera, la prueba tendrá éxito. La misión está hecha.
El código completo es el siguiente:
Scripts de base de datos mysql
- Eliminar la base de datos de caída de la base de datos si existe myBaits;- Crear base de datos Crear base de datos si no existe myBatis Conjunto de caracteres predeterminado UTF8;- Seleccione la base de datos Use myBatis;- Eliminar tabla de datos de datos si existe el estudiante; table de caída si existe tarjeta; Create TABLE Student (SID int (255), Sname Varchar (32), SCID int (255), restricción PK_SID Clave primaria (SID), restricción FK_Scid Exterior Key (SID) Tarjeta de referencias (CID)); Agregue los valores de inserción de datos de prueba en la tarjeta (CID, NUM) (1, '123456789012345678'); valores (1, 'jaja', 1);
Clase de herramienta mybatis.java clase
paquete Util; import java.io.ioException; import java.io.reader; import java.sql.connection; import org.apache.e org.apache.ibatis.session.SqlSessionFactoryBuilder; clase pública myBatisUtil {private static staticLocal <sqlSession> ThreadLocal = new ThreadLocal <SqlSession> (); Public Static sqlSessionFactory sqlSession SqlSession; // Método de construcción de construcción privado MyBatiLil () src /mybatis.cfg.xmlStatic {try {lector lector = recursos.getResourCeAsreader ("mybatis.cfg.xml"); sqlSessionFactory = new SqlSessessionFactoryBuilder (). Build (Reader);} Catch (IoException e) {E.PrintStacktRace ();} SqlSession* @return*/public static sqlSession getSqlSession () {// get sqlsession del objeto del actual ThreadSqlSession sqlsession = threadlocal.get (); if (sqlsession == null) {if (sqlsessionFactory está unido al actual ThreadThreadLocal.set (SQLSession);}} return sqlSession;}/*** Cerrar SqlSession y separarse del hilo actual*/public static void ClosesqlSession () {// Objeto SqlSessession del hilo actual SqlSession sqlSession = ThreadLocal.get (); /// Si el objeto SqlSession if (sqlsession! = null) {// cierra el objeto sqlsession sqlsession.close (); // separa la relación entre el hilo actual y sqlsession threadlocal.remove ();}} // prueba public static void main (string [] args) {sqlSession sqlssession = mybatisutil.getSqlSession () sqlsession.getConnection (); system.out.println (Conn! = NULL? "Conexión exitosa": "Falló de conexión");}}archivo mybatis.cfg.xml
<? xml versión = "1.0" encoding = "utf-8"?> < default = "mysql_developer"> <!-Connect MySQL Información del entorno-> <entorno id = "mysql_developer"> <!-myBatis usa JDBC Transaction Manager-> <TransActionManager type = "JDBC"/> <!-MyBatis usa Counsing de conexión para obtener ObjectS de conexión-> <Datasource Type = "Poured" <!-; with the database --><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value = "mysqladmin"/> <dataSource> </entorno> <!-Conexy Oracle Englain Information-> <Environment id = "oracle_developer"> <!-myBatis usa JDBC Transaction Manager-> <TRANSACTIONMANAGER TIPO = "JDBC"/> <!-MyBatis utiliza la agrupación de conexión para obtener objetos de conexión-> <Dataurce TypeCe Typee = "" JDBC "/> <!--MyBatis usa la agrupación de conexión para obtener objetos de conexión-> <Dataurce TypeCe Typee =" "JDBC"/> <!-MyBatis usa la combinación de conexión para obtener objetos de conexión-> <Dataurce typeCe Typee = "" JDBC "/> <!--MyBatis usa la agred Propiedades para interactuar con bases de datos -> <propiedad name = "controlador" valor = "oracle.jdbc.driver.oracledriver"/> <propiedad name = "url" value = "jdbc: oracle: oracle: delgada:@127.0.0.1: 1521: orcl"/> <name de propiedad = "user" valor = "scott"/> <nombre de propiedad = "contraseña" contraseña " value = "Tiger"/> </shasource> </entorno> </entornos> <!-Cargando el archivo de mapa-> <mappers> <mapper resource = "one2one/cardmapper.xml"/> <mapper resource = "one2one/studentmapper.xml"/> </mappers> </formuatese>
Card.java y estudiante.java
paquete one2One; import java.io.Serializable;/*** Id Card*@author Administrator **/ @supressWarnings ("serial") tarjeta de clase pública implementa serializable {private entero cid; private string num; public integer getcid () {return cid;} public void setcid (intenger cid) {this.cid = cid;}; {return num;} public void setNum (string num) {this.num = num;}} paquete one2One; import java.io.Serializable;/*** Student*@Author Administrator **/ @supressWarnings ("Serial") Public Class Student Implements serializable {Private integer sid; private Caded Card; Public Integer getsid () {) setSid (Integer sid) {this.sid = sid;} public String getSname () {return sname;} public void setSname (string sname) {this.sname = sname;} tarjeta public getCard () {Tarjeta de retorno;} public void setCard (tarjeta de tarjeta) {this.Card = tarjeta;}}Archivo de asignación de Card.Java CardMapper.xml Archivo
<? xml versión = "1.0" encoding = "utf-8"?> < type = "One2One.card" id = "Cardmap"> <id columna = "cid" propiedad = "cid"/> <resultado columna = "num" propiedad = "num"/> <resultmap> </mapper>
El archivo de asignación correspondiente al archivo student.java class studentMapper.xml
<? xml versión = "1.0" encoding = "utf-8"?> < type = "one2One.student" id = "studentmap"> <id columna = "sid" propiedad = "sid"/> <resultado column = "sname" propiedad = "sname"/> <!-Introducir información de asignación en CardMapper.xml Propiedad de archivo representa las propiedades asociadas de estudiante-> <Propiedad de asociación = "Card" ResultMap = "Cardnamespace.cardMap"/> </> <Resultados asociados parametertype = "entero" resultmap = "studentmap"> select s.sid, s.sname, c.cid, c.num from student s, tarjeta cwwhere s.sid = c.cid y s.sid = #{sid} </select> <select id = "findByName" parametType = "string" resultmap = "studentmap"> select s.sid, s.sname, c.dyname "parametertype =" string "resultmap =" studentmap "> seleccionar s.sid, s.sname, c.c.c.cade, string string" stringmap = "studentmap"> select s.sid, s.sname, c.c.c.cade, string string "stringmap =" studentMap " s.scid = c.cid y s.sname = #{sname} </select> </mapper>Clase de capa de persistencia estudiante estudiantecarddao.java clase
paquete one2one; import org.apache.ibatis.session.sqlsession; import org.junit.test; import util.mybatisutil;/*** Persistence Layer*@author Administrator **/public student studentCarddao {/*** Información de la tarjeta de la tarjeta del estudiante No. 1 de la consulta* Excepción {sqlSession sqlsession = null; try {sqlsession = myBatisUtil.getSqlSession (); return sqlsession.selectone ("studentNamespace.findById", id);} Catch (Exception e) {E.PrintStackTrace (); shower e;} Finalmente {mybatisutil.clossqlSession ();}}/*** consulta "jaja" información de la tarjeta de identificación* @param name* @return* @throws excepcion*/public student findByName (name de cadena) lanza excepción {sqlSession sqlSession = null; sqlsession.selectone ("StudentNamespace.FindByName", name);} Catch (Exception e) {E.PrintStackTrace (); Throw E;} Finalmente {myBatisUtil.ClossqlSession ();}} // Test Student No. 1 La información de la tarjeta de identificación @TestpPublicVeDBINDBYID () Shows Exception {StudentDa StudentCardDao (); Student Student = dao.findbyid (1); System.out.println (student.getSid ()+":"+student.getsname ()+":"+student.getCard (). GetNum ());} // Información de la tarjeta estudiantil "Haha" New StudentCarddao (); Student Student = dao.findbyname ("jaja"); system.out.println (student.getsid ()+":"+student.getsname ()+":"+student.getcard (). getNum ();}}Lo anterior es el primer tutorial sobre mapeo uno a uno MyBatis presentado por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!