En el desarrollo del proyecto, a menudo encontramos situaciones en las que los nombres de campo en la tabla y los nombres de atributos de las clases de entidad correspondientes de la tabla pueden no ser exactamente los mismos. El siguiente editor le demostrará cómo resolver el problema de conflicto de diferentes nombres de campo y clases de entidad en este caso. Los amigos interesados aprenderán juntos.
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 = "." encoding = "utf-"?> <! Doctype mapper público "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis-mapper.dtd"><!-- Especifique un espacio de nombres único para este mapeador. El valor del espacio de nombres se establece convencionalmente en el nombre del archivo del mapa del paquete + SQL Nombre del archivo, de modo que el valor del espacio de nombres pueda ser garantizado para ser único. Por ejemplo, Namespace = "me.gacl.mapping.orderMapper" es me.gacl.mapping (nombre del paquete) + OrderMapper (ordenmapper.xml sufijo de eliminación de archivos)-> <mapper namespace = "me.gacl.mapping.ordermapper"> <!-!
Se obtiene un objeto de pedido en función de 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" denttype = "me.gacl.domain.order"> select * de órdenes donde ordene_id =#{id} </select> <!-------- Se obtiene un objeto de pedido en función de la consulta de identificación. Usando esta consulta, normalmente podemos consultar el resultado que queremos.
Esto se debe a que le daremos al alias de consulta con el mismo nombre del atributo 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 puedan corresponder uno a uno a uno.
-> <select id = "selecterder" parametertype = "int" resultType = "me.gacl.domain.order"> seleccione Order_id Id, Order_No Orderno, Order_Price Price de Orders Where Order_id =#{id} </select> <! Según la consulta de identificación, podemos obtener un objeto de pedido. Usando esta consulta, podemos consultar el resultado que queremos normalmente. Esto se debe a que mapeamos 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 <virmap>->
<select id = "selectroDergesultMap" parametertype = "int" dulteMap = "OrderResultMap"> SELECT * de órdenes donde ordene_id =#{id} </select> <!-Mapeo de la correspondencia entre el nombre de la clase de la clase de entidad y el nombre de campo de la tabla a través de <sultMap>-Mapeo de la correspondencia entre la clasificación de la entidad Atributa y el nombre de campo de la tabla <Resultado <Resultado de la Tabla MAPEMAP campo usando la propiedad ID-> <id propiedad = "id" columna = "orden_id"/> <!-Mapeo del campo Clave no primario usando la propiedad de resultados-> <resultado de resultado = "ordenno" columna = "orden_no"/> <resultado propiedad = "precio" columna = "orden_price"/> </sultMap> </mper> </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; prueba de clase pública {@testpublic Void testgeterDerLoByid () {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 ID de la etiqueta Seleccionar, puede encontrar que el SQL se ejecutará*/String Declaration = "me.gacl.mapping.orderMapper.getOrderByById"; // Mapeo de 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 retorno de pedido y return = sqlssion.selectone (declaración,); Ejecutando SQL usando SQLSession, debe cerrar sqlsessionsqlsession.close (); System.out.println (orden); // Imprime el resultado: NULL, es decir, no se encuentra ningún registro correspondiente} @TestPublic Void testgetOrderById () {sqlsession sqlsession = myBATIsUtil.getSqlSession ();/*** Map SQL Identificación de la cadena de identificación,* me.gacl.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 identificación de la etiqueta Seleccionar, puede encontrar el SQL que se ejecutará. */String statcle = "me.gacl.mapping.orderMapper.selectorder"; // map sql identificación string // ejecutar operaciones de consulta, y encapsular automáticamente los resultados de la consulta en un objeto de pedido y devolver el pedido de orden = sqlsession.selectone (declaración,); // consulta el registro con ID en la tabla de órdenes // después de ejecutar sql utilizando sqlsession, es necesario cerrar SqlSessionsqlSession.close (); System.out.println (orden); // Imprima el resultado: orden [id =, ordenno = aaaa, precio =.]}@TestPublic void testGetGetOrderByid () {sqlSession sqlSession = myBatisUtil.getSqlSession ();/*** Mapa de mapa de identificación SQL String,* me.gacl.GaCl.GaCl.Mapping Etiqueta en el archivo OrderMapper.xml. * SelectorDerSultMap es el valor de atributo de identificación de la etiqueta Seleccionar. A través del valor de atributo de identificación de la etiqueta Seleccionar, puede encontrar el SQL que se ejecutará. */String statclein = "me.gacl.mapping.ordermapper.selectorDerSultMap"; // asignando una cadena de identificación de SQL // ejecutar las operaciones de consulta, y encapsular automáticamente los resultados de consulta en un objeto de orden y retorno ordenar orden = sqlSession.selectone (declaración,); // consulta el registro con ID en la tabla de órdenes // después de usar sqlsession a SqlSessionsqlSession.close (); System.out.println (orden); // Imprima el resultado: orden [id =, ordenno = aaaa, precio =.]}} 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 a través de <virmap>. 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 los atributos.
Lo anterior es el tutorial de aprendizaje mybatis presentado por el editor (iv): cómo resolver rápidamente el conflicto entre los nombres de los nombres de campo y la clase de entidad. 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!