Este artículo es el conocimiento sobre la clase de entidad y los problemas de mapeo de mesa en mybatis que le trae el editor. Aprender este tutorial puede ayudarnos rápidamente a resolver el problema de conflicto de diferentes nombres de atributos de clase de campo y clase de entidad. Amigos que lo necesitan, ¡echemos un vistazo!
1. Prepare las tablas y datos que se utilizarán para la demostración
Crear órdenes de tabla (Order_id int
2. Definir clases de entidad
paquete me.gacl.domain;/*** @author gacl*Defina la clase de entidad correspondiente a la tabla de órdenes*/orden de clase pública {/*** Crear órdenes de tabla (Order_id int // id ===> Order_idPrivate String OrderNo; // OrderNo ===> Order_Noprivate Float Price; // precio ===> Order_PricePublic int getId () {return id;} public void setid (int id) {this.id = id;} public String getOrderNo () {return NOdNO;} public void setOrderNo (string orderNo) {this.OrderNo = Orderno;} public float getPrice () {return Price;} Public VoidPreePrice (Flat) {this.price = precio;}@overridePublic string toString () {return "orden [id =" + id + ", ordenno =" + ordenno + ", precio =" + precio + "]";}}3. Escribir código de prueba
3.1. Escribe un archivo de asignación SQL XML
1. Cree un archivo OrderMapper.xml. El contenido de OrderMapper.xml es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtddddd. El valor del espacio de nombres se establece convencionalmente en el nombre del paquete + Nombre del archivo de mapeo SQL, de modo que el valor del espacio de nombres se pueda garantizar que sea único
Por ejemplo, Namespace = "me.gacl.mapping.orderMapper" es me.gacl.mapping (nombre del paquete) + OrderMapper (OrderMapper.xml archivo para eliminar el sufijo)
-> <mapper namespace = "me.gacl.mapping.ordermapper"> <!-Obtenga un objeto de pedido basado en la consulta de identificación. Usar esta consulta no puede consultar el resultado que queremos. Esto se debe principalmente a que el nombre del atributo de la clase de entidad no corresponde al nombre de campo de la base de datos, por lo que no se puede consultar el registro correspondiente-> <select id = "getOrderByid" parametertype = "int" resulttype = "me.gacl.domain.order"> Seleccionar * de Orders donde ordene_id =#{id} </select> <! Usando esta consulta, normalmente podemos consultar el resultado que queremos. Esto se debe a que le daremos a la consulta un alias con el mismo alias que el nombre del atributo de la clase de entidad, de modo que el nombre del atributo de la clase de entidad y el nombre de campo en el resultado de la consulta puede corresponder a uno por uno-> <select id = "selecterder" parametertype = int "dentype =" me.gacl.domain.order "> seleccionar orden_id, orden_no ordyno, orden_prepe de orden de los ordenadores de los ordenadores de los ordenadores de los ordenadores de los ordenadores de los ordenadores de los ordenadores de los ordenadores de los ordenes Order_id =#{id} </select> <!- Obtenga un objeto de pedido basado en la consulta de ID. Usando esta consulta, podemos consultar el resultado que queremos normalmente. Esto se debe a que asignamos la correspondencia uno a uno entre el nombre del atributo de clase de entidad y el nombre de campo de la tabla a través de <ResultMap> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- columna = "orden_id"/> <!-Use el atributo de resultado para mapear campos de clave no primos-> <resultado propiedad = "ordenno" column = "order_no"/> <resultado propiedad = "precio" columna = "orden_price"/> <resultado propiedad = "precio" columna = "order_price"/> <pentemap> </mepper>2. Registre el archivo de asignación OrderMapper.xml en el archivo conf.xml
<Mappers> <!- Registre el archivo OrderMapper.xml. OrderMapper.xml se encuentra en el paquete me.gacl.mapping, por lo que el recurso se escribe como me/gacl/mapping/ordenmapper.xml-> <mapper resource = "me/gaCl/maping/ordenmapper.xml"/> </ppers>
3.2. Escribir código de prueba unitario
paquete me.gacl.test; import me.gacl.domain.order; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlsession; import org.junit.test; public class test2 {@testpublicpublic void testGeterLeByid () {sqlsession sqlsession = = Mybatisutil.getSqlSession ();/*** La cadena de identificación para asignar SQL,* me.gacl.mapping.OrderSpersper es el valor del atributo de espacio de nombres de la etiqueta mapper en el archivo ordenmapper.xml,* getOrderByid es el valor de atributo de identificación de la etiqueta SELECT. A través del valor de atributo de identificación de la etiqueta Seleccionar, puede encontrar que el SQL se ejecutará*/String Declaration = "me.gacl.mapping.orderMapper.getOrderByid"; // Mapeo de la cadena de identificación de SQL // Ejecutar la operación de consulta y encapsular automáticamente el resultado de la consulta en un objeto de orden y devolver el orden de orden de orden de orden de orden con el orden de orden de orden con el orden de orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de la orden con el orden de orden básico con el orden de orden eléctrico con el orden de orden eléctrico con el orden de orden eléctrico con el orden de orden eléctrico con el orden electrónico sobre el orden electrónico sobre el orden de orden eléctrico eléctrico. Tabla // Después de usar SQLSession Ejecutar SQL, debe cerrar SQLSessionsqlSession.close (); System.out.println (orden); // Imprima el resultado: NULL, es decir, no se encontró ningún registro correspondiente} @TestPublic Void testgetOrderById2 () {sqlSession sqlsession = myBATIsUtil.getSqlSession ();/*** Map SQL Identification String,* me.gacl.mappe.mapping. OrderMapper.xml File, * Selectorder es el valor de atributo de identificación de la etiqueta Seleccionar. A través del valor de atributo de ID de la etiqueta Seleccionar, puede encontrar que el SQL se ejecutará utilizando el valor de atributo de ID de la etiqueta selecta*/string statcle = "me.gacl.mapping.ordermapper.selectorder"; // asignando el sql Identity String // ejecutar la operación de consulta y encapsular automáticamente el resultado de la consulta en un objeto de orden y devolver el orden de orden = sqSession.session.selectone (sellEnt, 1//////////////QUYA DE SELLECTURA; Registre con ID 1 En la tabla de órdenes // Después de ejecutar SQL usando SQLSession, debe cerrar SQLSessionsQLSession.Close (); System.out.println(order);//Print result: Order [id=1, orderNo=aaaa, price=23.0]}@Testpublic void testGetOrderById3(){SqlSession sqlSession = MyBatisUtil.getSqlSession();/*** Map SQL Identification String, * me.gacl.mapping.orderMapper is the value of the namespace attribute de la etiqueta MAPPER en el archivo OrderMapper.xml, * SelectorDResultMap es el valor de atributo de identificación de la etiqueta SELECT. A través del valor de atributo de identificación de la etiqueta SELECT, el SQL que se ejecutará se puede encontrar*/String Declaration = "me.gacl.mapping.orderMapper.SelectorDerResultMap"; // asignando la cadena de identidad SQL // ejecutar la operación de consulta, y encapsular automáticamente el resultado de la consulta en un objeto de orden y regresar orden de orden = sqlsession.selectone (declaración, 1); Tabla de pedidos // Después de usar SQLSession para ejecutar SQL, debe cerrar SQLSessionsqlSession.close (); System.out.println (orden); // Imprime resultado: orden [id = 1, ordenno = aaaa, precio = 23.0]}}Resultados de la ejecución de pruebas unitarias:
1. El método TestGetOrderByid devuelve un NULL después de ejecutar la consulta.
2. Después del método TestGetLoRorderById2 y TestGetOrderByid3 Ejecute la consulta, puede obtener el resultado deseado normalmente.
4. Resumen
El código de prueba anterior demuestra el problema de que cuando el nombre del atributo en la clase de entidad y el nombre de campo en la tabla son inconsistentes, los resultados correspondientes no se pueden consultar al usar myBatis para operaciones de consulta, y se adoptan dos métodos para el problema:
Solución 1: Defina el alias del nombre de campo en la instrucción SQL de consulta, de modo que los alias del nombre del campo sean consistentes con el nombre del atributo de la clase de entidad, de modo que el nombre de campo de la tabla pueda corresponder uno por uno al nombre de atributo de la clase de entidad. Este método resuelve la relación de mapeo entre el nombre del campo y el nombre del atributo definiendo alias en la instrucción SQL.
Solución 2: Mapee la correspondencia uno a uno entre los nombres de los nombres de campo y la clase de entidad los nombres de los atributos mediante la asignación. Este método utiliza la solución proporcionada por MyBatis para resolver la relación de mapeo entre los nombres de campo y los nombres de atributos.