A continuación, el artículo anterior "Javaweb Practical Mall Project Development (II)" implementa principalmente la base general de base.java y usa resultados de resultados para mapear objetos relacionados.
1. General BasedAo.java
Como todos necesitan usarlo, se usan genéricos. El problema a tener en cuenta es que los códigos como user.getClass (). GetName () deben modificarse. El método de modificación es pasarlo con la clase de parámetro TC, y luego usar tc.getName ().
Código completo:
paquete com.dao; import com.model.pager; import com.util.sessionutil; import com.util.systemContext; import org.apache.ibatis.session.sqlsession; import java.util.hashmap; import java.util.list; import java.util.map;/*** creado por nl101 en 2016. */public class BasedAo <t> {/** * Saque un tipo t basado en id * @param id para eliminar la identificación del tipo t * @return */public t load (class <t> tc, int id) {sqlsession session = sessionUtil.getSession (); T t = nulo; intente {t = session.selectone (tc.getName ()+". Load", id); } Finalmente {sessionUtil.clossession (sesión); } return t; } / *** Agregar un tipo t* @param t t tipo para agregar* @return true exitoso* / public boolean add (t t) {int isAdd = 0; Sqlsession session = sessionUtil.getSession (); intente {isAdd = session.insert (t.getClass (). getName ()+". Agregar", t); session.commit (); // commit} catch (excepción e) {session.rollback (); // rolle si el envío falla} finalmente {sessionUtil.clossessession (sesión); } return isAdd> 0; } / *** Eliminar t de tipo basado en id* @param ID para eliminar la identificación de t* @return true exitoso* / public boolean delete (class <t> t, int id) {int isDelete = 0; Sqlsession session = sessionUtil.getSession (); intente {isDelete = session.delete (t.getName ()+". delete", id); session.commit (); } catch (Exception e) {session.rollback (); // falló return System.out.println ("Eliminar fallido"); E.PrintStackTrace (); } Finalmente {sessionUtil.clossession (sesión); } return isDelete> 0; } / *** Update t tipo* @param t user para actualizarse* @return true exitoso* / public boolean actualización (t t) {int isUpdate = 0; Sqlsession session = sessionUtil.getSession (); Pruebe {isUpdate = session.delete (t.getClass (). getName ()+". Update", t); session.commit (); } catch (Exception e) {session.rollback (); // falló de retorno system.out.println ("actualizar fallido"); E.PrintStackTrace (); } Finalmente {sessionUtil.clossession (sesión); } return isupdate> 0; }/*** consulta de paginación basada en condiciones especificadas* @param maps Especificar la colección de condición* @return*/public Pager <T> find (class <t> t, map <string, object> maps) {int pAgestart = systemContext.getPaGeStart (); // Page int int PageSize = SystemContext.getPageSize (); // Page size pager <t> PageS <t> PAGES <t> PAGES =; maps.put ("PagStart", PAGESTART); maps.put ("PageSize", PageSize); Sqlsession session = sessionUtil.getSession (); List <t> dataS = null; intente {datas = session.selectList (t.getName ()+". Find", maps); // Obtener el registro pagers.setDatas (datos); Pagers.SetPageSize (PageSize); Pagers.SetPageStart (PAGESTART); int totalRecord = session.selectone (t.getName ()+". findCount", maps); // Obtenga el número total de registros pagers.settotalRecord (totalCord); pagers.setPageIndex (pagStart/PageSize+1); } Finalmente {sessionUtil.clossession (sesión); } Pagers de retorno; } / *** Obtener parte de los datos de acuerdo con las condiciones especificadas* @param mapas Especifique el conjunto de condiciones* @return* / public Pager <T> list (clase <t> t, map <string, object> maps) {Pager <T> Page = new Pager <> (); Sqlsession session = sessionUtil.getSession (); List <t> dataS = null; Pruebe {datas = session.selectList (t.getName ()+". List", maps); // Obtener registro pagers.setDatas (datos); pagers.settotalRecord (dataS.size ()); } Finalmente {sessionUtil.clossession (sesión); } Pagers de retorno; }}El mismo usuario.java también requiere modificaciones correspondientes
Public Class UserDAO extiende a BededAO <Serem> { / ** * Eliminar un usuario basado en la ID * @param ID para eliminar la ID * @return * / Public User Load (int id) {return super.load (user.class, id); }/* Otras funciones no se publican una por una, todas están escritas de manera similar*/}2. Mapeo de ResultMap
En pocas palabras, cuando la información de campo en la base de datos es inconsistente con los atributos del objeto, es necesario mapear a través de ResultMap.
Por ejemplo: hay una clase de entidad de usuario en la propiedad de dirección, de la siguiente manera
dirección de clase pública {private int id; nombre de cadena privada; Teléfono de cadena privada; Código postal de cadena privada; // Cierre el objeto de usuario directamente en lugar del usuario de usuario privado user_id; `` `` `` `` ``}Luego queremos sacar una dirección y también sacar a su usuario correspondiente. Sin embargo, estos son dos objetos, y ambos tienen atributos de identificación, por lo que MyBatis se confundirá al llamar al método establecido para establecer propiedades. El propósito de usar ResultMap es eliminar este caos.
Escribir carga sql
<!-Cargue una dirección-> <!-La conexión de la tabla se requiere aquí y se elimina el usuario. La conexión también se requiere para asegurarse de que la dirección recuperada no esté vacía, y alias la ID de atributo duplicada-> <select id = "load" parametertype = "int" resultmap = "direccionalmap"> select *, t1.id como 'a_id' de la dirección t1 right unir el usuario t2 en (t1.user_id = t2.id) donde t1.id =#{id}; </select>Aquí usamos ResultMap para mapear, el nombre de este resultemap es DirectSmap.
direcciones map
<resultmap id = "direccionalmap" type = "dirección" automape de automático = "true"> <!-Mapeo de la A_ID en el resultado como id, y otros automáticamente true = verdadero coincidirán automáticamente-> <id columna = "a_id" propiedad = "id"/> <!-Propiedades asociadas-> <Propiedad de asociación = "Usuario" Javatype = "Usuario"> <!-Mapeador de usuario Propiedad = "id"/> <resultado columna = "username" propiedad = "username"/> <resultado columna = "Nickname"/> <resultado columna = "Nickname"/> <resultado columna = "Nickname"/> <resultado columna = "type" Property = "type"/> </asociación> </sultmap>>
Después de completar la configuración anterior, al buscar, MyBatis llamará automáticamente su método de conjunto correspondiente y establecerá los atributos a la clase Entity.
prueba
paquete com.dao; import com.model.address; public class DirectDao extiende a base de basada <dirección> {public static void main (string [] args) {direccionalDao direccional = new DirectDao (); Dirección dirección = direccióndao.load (1); System.out.println (direcciones.toString ()); } / *** Cargue una dirección* @param ID La identificación de la dirección que se cargará* @return devuelve la dirección que se cargará, y null no puede cargar* / la dirección pública cargando (int id) {return super.load (dirección.class, id); }} Como se puede ver en las representaciones, siempre y cuando se tomen los atributos de mapeo, todos los que no están asignados son nulos.
Sigue esta idea para completar otras funciones
Código XML:
<? 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.dtdd"> <mapperspace = "com.modelsress" La información en la base de datos es inconsistente con los atributos del objeto, debe asignarla a través de ResultMap-> <resultmap id = "direccionalmap" type = "dirección" automape de automapacidad = "true"> <!-Map a_id en el resultado como id, otra automatización = true se combinará automáticamente-> <Id columna = "a_id" = "id"/> <!-fetch las propiedades asociadas-<asociación de la asociación javatype = "user"> <!-map user_id a la identificación del usuario-> <id columna = "user_id" propiedad = "id"/> <resultado columna = "username" propiedad = "username"/> <resultado columna = "apodo" propiedad = "apodo"/> <resultado columna = "Nickname"/> <resultado column = "type" type = "type"/> </asociación </asociación> </d./d. <!-La conexión de la tabla se requiere aquí y se saca el usuario. La conexión garantiza que la dirección recuperada no esté vacía y la aliase para la ID de atributo duplicada -> <select id = "load" parametertype = "int" resultmap = "directionmap"> select *, t1.id como 'a_id' de la dirección t1 right unir el usuario t2 en (t1.user_id = t2.id) donde t1.id =#{id}; </select> <!--Add an address --> <insert id="add" parameterType="Address"> insert into address values (null,#{name},#{phone},#{postcode},${user_id}) </insert> <!--Delete an address--> <delete id="delete" parameterType="int"> DELETE FROM address WHERE id=#{id} </delete> < Como 'a_id' desde la dirección T1 Right Unir el usuario T2 en (t1.user_id = t2.id) donde t1.user_id =#{user_id} </select> </ mapper>Código Java:
paquete com.dao; import com.model.address; import com.model.pager; import java.util.hashmap; import java.util.map;/*** creado por NL101 el 23/21/23. */public class DirectDao extiende a BasedAo <dirección> {public static void main (string [] args) {direccionalDao direccionalDao = new DirectDao (); Pager <Diring> PAGERS = DIRECKDAO.LIST (1); System.out.println (pagers.getDatas (). Size ()); } / ** * Cargue una dirección * @param ID La identificación de la dirección que se cargará * @return devuelve la dirección que se cargará, y nulo falla * / dirección pública carga (int id) {return super.load (dirección.class, id); } / *** Agregue una dirección* @param la dirección que se agregará* @param user_id el user_id correspondiente a la dirección que se agregará* @return true exitoso* / dirección booleana public (dirección de dirección, int user_id) {userdao userDao = new UserDao (); if (userdao.load (user_id) == null) {return false; } return super.Add (dirección); } / *** Eliminar una dirección* @param ID para eliminar la ID correspondiente a la dirección* @return true delete correctamente* / public boolean delete (int id) {return super.delete (direcciones.class, id); } / *** Actualizar una dirección* @param Dirección La dirección que se actualizará* @return actualización verdadera con éxito* / publicidad public boolean (dirección de dirección) {return super.update (dirección); } / *** Actualizar una dirección* @param Dirección La dirección que se actualizará* @return actualización verdadera con éxito* / publicidad public boolean (dirección de dirección) {return super.update (dirección); } / ** * Saque todas las direcciones del usuario en función de la ID de usuario * @param user_id * @return * / public Pager <dirección> list (int user_id) {map <string, object> maps = new HashMap <> (); maps.put ("user_id", user_id); return super.list (dirección.class, mapas); }}Si la capa ADO está escrita de esta manera, no habrá ningún problema.
Lo anterior se trata de este artículo. Se trata del desarrollo de todo el proyecto Javaweb Mall. Espero que sea útil para su aprendizaje.