Ensuite, l'article précédent "Javaweb Practical Mall Project Development (II)" met principalement en œuvre le général basé basé sur la base et utilise le résultat pour cartographier des objets associés.
1. General Basedao.java
Étant donné que tout le monde doit l'utiliser, des génériques sont utilisés. Le problème à noter est que les codes comme user.getClass (). GetName () doivent être modifiés. La méthode de modification consiste à le passer avec la classe de paramètres TC, puis à utiliser tc.GetName ().
Code complet:
package 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; / ** * créé par nl101 sur 2016/23. * / public class Basedao <T> {/ ** * Sortez un type t basé sur ID * @param id pour supprimer l'ID de T type * @return * / public t charge (class <T> tc, int id) {sqlSession session = sessionUtil.getSession (); T t = null; essayez {t = session.selectone (tc.GetName () + ". Load", id); } enfin {sessionUtil.closeSESSE (session); } return t; } / ** * Ajouter un type t * @param t T T T T à ajouter * @return true réussi * / public boolean add (t t) {int isadd = 0; SQLSession Session = SessionUtil.getSession (); essayez {isadd = session.insert (t.getClass (). getName () + ". Add", t); session.Commit (); // commit} catch (exception e) {session.rollback (); // Rolle Back si la soumission échoue} enfin {sessionUtil.closeSESSE (session); } return isadd> 0; } / ** * supprimer le type T basé sur ID * @param id pour supprimer l'ID de T * @return True réussi * / public boolean delete (class <t> t, int id) {int isdelete = 0; SQLSession Session = SessionUtil.getSession (); try {isdelete = session.delete (t.getName () + ". Delete", id); session.Commit (); } catch (exception e) {session.rollback (); // a échoué System.out.println ("Delete a échoué"); e.printStackTrace (); } enfin {sessionUtil.closeSESSE (session); } return isdelete> 0; } / ** * Update T Type * @param t Utilisateur à mettre à jour * @return true réussi * / public boolean update (t) {int isupdate = 0; SQLSession Session = SessionUtil.getSession (); essayez {isupdate = session.delete (t.getClass (). getName () + ". Update", t); session.Commit (); } catch (exception e) {session.rollback (); // a échoué return System.out.println ("Mise à jour échoué"); e.printStackTrace (); } enfin {sessionUtil.closeSESSE (session); } return isUpdate> 0; } / ** * Recherche de pagination basée sur des conditions spécifiées * @param cartes spécifier la collection de conditions * @return * / public pager <t> find (class <t> t, map <string, object> maps) {int pagerstart = systemContext.getPageStart (); // page start int pagesize = systemContex. Maps.put ("Pagestart", Pagestart); MAPS.PUT ("PageSize", PageSize); SQLSession Session = SessionUtil.getSession (); List <t> dataS = null; essayez {datas = session.selectList (t.getName () + ". find", maps); // obtient l'enregistrement pagerrs.setDatas (datas); pagerrs.setPageSize (pagesize); pagerrs.setpagestart (pagestart); int totalRecord = session.Selectone (t.getName () + ". findCount", maps); // obtient le nombre total de pagers .setTotalRecord (totalRecord); pagerrs.setPageIndex (PAGRESTART / PAGESIZE + 1); } enfin {sessionUtil.closeSESSE (session); } return les téléperges; } / ** * Répondre partie des données en fonction des conditions spécifiées * @param cartes Spécifiez l'ensemble des conditions * @return * / public Pager <T> List (class <T> T, map <String, Object> Maps) {Pager <T> pages = new Pager <> (); SQLSession Session = SessionUtil.getSession (); List <t> dataS = null; essayez {datas = session.selectList (t.getName () + ". list", maps); // obtenir des pagers enregistrés.setDatas (datas); pagerrs.setTotalRecord (datas.size ()); } enfin {sessionUtil.closeSESSE (session); } return les téléperges; }}Le même userdao.java nécessite également des modifications correspondantes
classe publique UserDao étend Basedao <User> {/ ** * Supprimer un utilisateur en fonction de l'ID * @param ID pour supprimer l'ID de l'utilisateur * @return * / Utilisateur public Load (int id) {return super.load (user.class, id); } / * D'autres fonctions ne sont pas publiées une par une, elles sont toutes écrites de manière similaire * /}2. Mappage de ResultMap
Autrement dit, lorsque les informations sur le champ dans la base de données sont incompatibles avec les attributs de l'objet, il est nécessaire de mapper via ResultMap.
Par exemple: il existe un cours d'entité utilisateur dans la propriété d'adresse, comme suit
Adresse de classe publique {private int id; nom de chaîne privé; téléphone de chaîne privé; Code postal de chaîne privée; // merde l'objet utilisateur directement au lieu de l'utilisateur privé user_id; `` `` `` ``}Ensuite, nous voulons retirer une adresse et également éliminer son utilisateur correspondant. Cependant, ce sont deux objets, et les deux ont des attributs d'ID, donc MyBatis sera confus lors de l'appel de la méthode définie pour définir les propriétés. Le but de l'utilisation du résultat est d'éliminer ce chaos.
Écrire un chargement SQL
<! - Chargez une adresse -> <! - La connexion du tableau est requise ici, et l'utilisateur est retiré. La connexion est également requise pour s'assurer que l'adresse récupérée n'est pas vide et alias l'ID d'attribut en double -> <select id = "charger" ParameterType = "int" resultMap = "AddressMap"> SELECT *, t1.id en tant que 'a_id' à partir d'adress t1 Right Join User T2 sur (t1.user_id = t2id) où t1.id = # {id}; </lect>Ici, nous utilisons ResultMap pour mapper, le nom de ce résultat ResultMap est AddressMap.
adresse d'adresse
<resultMap id = "adressemap" type = "adresse" automappant = "true"> <! - mappage de l'A_ID dans le résultat en tant qu'ID, et autres automappy = true correspond automatiquement -> <id column = "a_id" propriété = "id" /> <! - Fetch the Associated Properties -> <association propriété = "User" Javaty colonnes = "user_id" propriété = "id" /> <résultat chronn = "username" propriété = "username" /> <résultat chronny = "nickname" /> <result Column = "nickname" /> <result chronnk = "nickname" /> <résultat column = "type" property = "type" /> </ association> </ resultMap>
Une fois la configuration ci-dessus terminée, lors de la recherche, MyBatis appellera automatiquement sa méthode de définition correspondante et définira les attributs sur la classe d'entité.
test
package com.dao; import com.model.address; public class AddressDao étend Basedao <adress> {public static void main (String [] args) {AddressDao AddressDao = new AddressDao (); Adresse Address = adressedao.load (1); System.out.println (adresse.toString ()); } / ** * Chargez une adresse * @param id L'ID de l'adresse à charger * @return Renvoie l'adresse à charger, et Null ne charge pas * / Adresse publique Load (int id) {return super.load (adresse.class, id); }} Comme on peut le voir dans les rendus, tant que les attributs de cartographie sont retirés, tous ceux qui ne sont pas cartographiés sont nuls.
Suivez cette idée pour remplir d'autres fonctions
Code XML:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis.addred" Dans la base de données, est incompatible avec les attributs de l'objet, vous devez le mapper via resultMap -> <resultMap id = "AddressMap" type = "Address" Automaping = "true"> <! - map a_id Dans le résultat en tant qu'id, autre automappage = true correspond automatiquement -> <id column = "a_id" Property = "id" /> <! - Réfert de la propriété Associate javatype = "user"> <! - map user_id to user's id -> <id column = "user_id" propriété = "id" /> <result Column = "username" Property = "username" /> <result Column = "nickname" Property = "Nickname" /> <Result Column = "Nickname" /> <result Column = "Type" Property = "Type" /> </ Association> </ Result Column = "Type" Property = » Une adresse -> <! - La connexion du tableau est requise ici et l'utilisateur est retiré. La connexion garantit que l'adresse récupérée n'est pas vide et la alimentant pour l'ID d'attribut en double -> <select id = "charger" ParameterType = "int" resultMap = "AddressMap"> SELECT *, t1.id en tant que 'a_id' à partir d'adress t1 Right Join User T2 sur (t1.user_id = t2id) où t1.id = # {id}; </lect> <! - Ajouter une adresse -> <insert id = "add" ParameterType = "Address"> Insérer dans les valeurs d'adresse (null, # {name}, # {téléphone}, # {postcode}, $ {user_id}) </ insert> <! - supprimer une adresse -> <delete id = "Delete" ParametType = "inin </pellete> <! - Modifier une adresse -> <update id = "update" ParameterType = "Address"> Update Address set name = # {name}, phone = # {phone}, postcode = # {postcode} où id = # {id} </ update> <! - Recherchez toutes les adresses de l'utilisateur spécifié " SELECT *, t1.id en tant que 'a_id' dans l'adresse t1 Right Join User T2 ON (t1.user_id = t2.id) où t1.user_id = # {user_id} </lect> </ mapper>Code Java:
package com.dao; import com.model.address; import com.model.pager; import java.util.hashmap; import java.util.map; / ** * créé par nl101 le 2016/2/23. * / classe publique AddressDao étend Basedao <Address> {public static void main (String [] args) {AddressDao AddressDao = new AddressDao (); Pager <Address> Pagers = AddressDao.List (1); System.out.println (pagers.getDatas (). Size ()); } / ** * Chargez une adresse * @param ID L'ID de l'adresse à charger * @return Renvoie l'adresse à charger, et Null échoue * / chargement publique (int id) {return super.load (adresse.class, id); } / ** * Ajouter une adresse * @param Adresse L'adresse à ajouter * @param user_id L'UTER_ID correspondant à l'adresse à ajouter * @return true réussi * / public booléen adresse (adresse d'adresse, int user_id) {userdao userdao = new UserDao (); if (userdao.load (user_id) == null) {return false; } return super.add (adresse); } / ** * Supprimer une adresse * @param id pour supprimer l'ID correspondant à l'adresse * @return true supprimer avec succès * / public boolean delete (int id) {return super.delete (adresse.class, id); } / ** * Mettre à jour une adresse * @param Adresse L'adresse à mettre à jour * @return True Update avec succès * / public boolean update (adresse d'adresse) {return super.update (adresse); } / ** * Mettre à jour une adresse * @param Adresse L'adresse à mettre à jour * @return True Update avec succès * / public boolean update (adresse d'adresse) {return super.update (adresse); } / ** * Sortez toutes les adresses de l'utilisateur en fonction de l'ID utilisateur * @param user_id * @return * / public pager <adress> list (int user_id) {map <string, object> maps = new hashmap <> (); maps.put ("user_id", user_id); return super.list (adresse.class, maps); }}Si la couche ADO est écrite de cette manière, il n'y aura pas de problème.
Ce qui précède concerne cet article. Il s'agit du développement de l'ensemble du projet Javaweb Mall. J'espère que ce sera utile à votre apprentissage.