Als nächstes implementiert der vorherige Artikel "Javaweb Practical Mall Project Development (ii)" hauptsächlich die allgemeine basierte Basisao.java und verwendet Ergebnismap, um verwandte Objekte zu kartieren.
1. GeneralbaSao.java
Da jeder es verwenden muss, werden Generika verwendet. Das Problem ist zu beachten, dass Codes wie user.getClass (). GetName () geändert werden müssen. Die Modifikationsmethode besteht darin, sie mit der Parameterklasse TC zu übergeben und dann tc.getName () zu verwenden.
Vollständiger Code:
Paket com.dao; import com.model.pager; import com.util.sessionutil; import com.util.SystemContext; import org.apache.ibatis.session.sqlSession; importieren java.util.hashmap; Import Java.util.Il.LIST. */public class -basierte ASO <T> {/** * Nehmen Sie einen t -Typ basierend auf ID * @param -ID heraus, um die ID von t -Typ zu entfernen T t = null; try {t = session.selectone (tc.getName ()+". load", id); } endlich {sessionUtil.closeSession (Sitzung); } return t; } / *** Fügen Sie einen t -Typ hinzu* @param t t -Typ, um hinzugefügt zu werden SQLSession Session = SessionUtil.GetSession (); try {isadd = session.insert (t.getClass (). getName ()+". add", t); Session.Commit (); // comment} catch (Ausnahme E) {session.rollback (); // rolle zurück, wenn die Einreichung fehlschlägt} schließlich {sessionUtil.closeSession (Sitzung); } return isadd> 0; } / *** t Type typen basierend auf id* @param id, um die ID von t* @return true erfolgreich zu löschen SQLSession Session = SessionUtil.GetSession (); try {isdelete = session.delete (t.getName ()+". Delete", id); Session.Commit (); } catch (Ausnahme e) {session.rollback (); // fehlgeschlagener return System.out.println ("Delete fehlgeschlagen"); E. printstacktrace (); } endlich {sessionUtil.closeSession (Sitzung); } return isdelete> 0; } / *** Aktualisieren Sie t Typ* @param t -Benutzer, um aktualisiert zu werden SQLSession Session = SessionUtil.GetSession (); try {isUpdate = session.delete (t.getClass (). getName ()+". Update", t); Session.Commit (); } catch (Ausnahme e) {session.rollback (); // fehlgeschlagener return system.out.println ("Update fehlgeschlagen"); E. printstacktrace (); } endlich {sessionUtil.closeSession (Sitzung); } return isUpdate> 0; }/*** Paging -Abfrage basierend auf angegebenen Bedingungen* @param Maps Geben Sie die Bedingungssammlung an* @return*/public pager <t> find (Klasse <T> T, Map <String, Objekt> Maps) {int pagestart = systemcontext.getPagestart (); // Page Start int pagessize = systemcontexT.GetSize (); // page -pager <pagers: Maps.put ("PageStart", PageStart); Maps.put ("pageSize", pageSize); SQLSession Session = SessionUtil.GetSession (); Liste <T> datas = null; try {datas = session.selectList (t.getName ()+". Find", Maps); // Erhalten Sie die Datensatzpager.SetDatas (datas); Pager.SetPageSize (pageSize); Pager.SetPagestart (PageStart); int TotalRecord = session.selectone (T.GetName ()+". FindCount", Maps); // Erhalten Sie die Gesamtzahl der Rekordpager.SettotalRecord (TotalRecord); Pager.SetPageIndex (Pagestart/pageSize+1); } endlich {sessionUtil.closeSession (Sitzung); } Rückgabepager; } / *** einen Teil der Daten gemäß den angegebenen Bedingungen abrufen SQLSession Session = SessionUtil.GetSession (); Liste <T> datas = null; try {datas = session.selectList (t.getName ()+". Liste", maps); // Record Pager.SetDatas (datas); Pager.SettotalRecord (datas.size ()); } endlich {sessionUtil.closeSession (Sitzung); } Rückgabepager; }}Der gleiche userDao.java erfordert auch entsprechende Änderungen
öffentliche Klasse userDao erweitert basiertao <user> { / ** * einen Benutzer basierend auf der ID * @param -ID entfernen, um die ID des Benutzers zu entfernen * @return * / public Benutzerlade (int id) {return Super.load (user.class, id); }/* Andere Funktionen werden nicht nacheinander veröffentlicht, sie sind alle auf ähnliche Weise geschrieben*/}2. Kartierung von resultmap
Einfach ausgedrückt, wenn die Feldinformationen in der Datenbank nicht mit den Attributen des Objekts nicht übereinstimmen, müssen Sie durch Ergebnismap abgebildet werden.
Zum Beispiel: Es gibt eine Benutzerentitätsklasse in der Adresseigenschaft wie folgt
öffentliche Klasse Adresse {private int id; privater Zeichenfolge Name; privates String -Telefon; private String -Postleitzahl; // das Benutzerobjekt direkt anstelle des privaten Benutzerbenutzers von User_id scheißen; `` `` `` `` ``}Dann möchten wir eine Adresse herausnehmen und ihren entsprechenden Benutzer herausnehmen. Dies sind jedoch zwei Objekte, und beide haben ID -Attribute, sodass MyBatis beim Aufrufen der festgelegten Methode zum Festlegen von Eigenschaften verwirrt ist. Der Zweck der Verwendung von resultmap ist es, dieses Chaos zu beseitigen.
Schreiben Sie laden SQL
<!-Laden Sie eine Adresse-> <!-Die Tabellenverbindung ist hier erforderlich, und der Benutzer wird herausgenommen. Die Verbindung ist auch erforderlich, um sicherzustellen, dass die abgerufene Adresse nicht leer ist, und alias die doppelte Attribut-ID-> <select id = "laden" parameterType = "int" resultMap = "adressMap"> select *, t1.id as 'a_id' von address t1 richtiger Join-Benutzer T2 On (t1.user_id = t2. id) wob </select>
Hier verwenden wir Ergebnismap, um den Namen dieses Ergebnismaps zu karten.
addressmap
<resultMap id="addressMap" type="Address" autoMapping="true"> <!--Mapping the a_id in the result as id, and other autoMapping = true will automatically match --> <id column="a_id" property="id"/> <!--Fetch the associated properties--> <association property="user" javaType="User" > <!--Mapping user_id as user's id--> <id column = "user_id" properation = "id"/> <result column = "userername" properation = "userername"/> <resultal column = "spickname"/> <result column = "spickname"/> <resultal column = "spickname"/> <resultal column = "type" property "property"/> </> </assoziation> </resultName "/assoziiertmap> </> <resulting
Nach Abschluss der obigen Konfiguration wird bei der Suche MyBatis automatisch seine entsprechende Mengenmethode aufgerufen und die Attribute auf die Entitätsklasse festgelegt.
prüfen
Paket com.dao; import com.model.address; public class adresdao erweitert basiertao <adresse> {public static void main (String [] args) {adressDao adressDao = new adressDao (); Adresse Adresse = addressDAO.LOAD (1); System.out.println (address.tostring ()); } / *** eine Adresse laden* @param -ID Die ID der zu geladenen Adresse* @return gibt die zu geladene Adresse zurück, und Null kann nicht geladen werden* / öffentliche Adresse laden (int id) {return Super.load (Adresse.Class, ID); }} Wie in den Renderings zu sehen ist, sind alle, die nicht zugeordnet sind, solange die Mapping -Attribute herausgenommen werden, null.
Folgen Sie dieser Idee, um andere Funktionen zu erfüllen
XML -Code:
<? Informationen in der Datenbank sind mit den Attributen des Objekts nicht überein. javatype = "user"> <!-map user_id to user's id-> <id column = "user_id" property = "id"/> <resultal column = "userername" property = "userername"/> <resultal column = "spickname" property = "fickname"/> <resultal column = "nickname"/> <resultd column = "type" type ". <!-Die Tabellenverbindung ist hier erforderlich, und der Benutzer wird herausgenommen. Die Verbindung stellt sicher, dass die abgerufene Adresse nicht leer ist und sie für die doppelte Attribut -ID -> <select id = "laden" ParameterType = "int" resultMap = "addressmap"> ausgewählt *, t1.id as 'a_id' von address T1 Right Jou -Benutzer T2 auf (t1.user_id = t2. id) wob </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> <!-eine Adresse ändern-> <Update id = "update" parameterType = "address"> address set name = {name}, Telefon =#{Telefon}, postcode =#{postcode} wobei id =#{id} </update> <!-Finden Sie alle Adressen des angegebenen Benutzer-adresses adress. Wählen Sie *, t1.id als 'a_id' aus der Adresse T1 Rechtsanwender Benutzer t2 on (t1.user_id = t2.id) wobei t1.user_id =#{user_id} </select> </mapper>Java -Code:
Paket com.dao; import com.model.address; import com.model.pager; import java.util.hashMap; importieren java.util.map;/*** erstellt von NL101 am 2016/2/23. */public class addressDao erweitert basiertao <adresse> {public static void main (string [] args) {adressDao adressDao = new addressDao (); Pager <adresse> pager = addressDao.list (1); System.out.println (Pager.getDatas (). Size ()); } / ** * eine Adresse laden * @param -ID Die ID der zu geladenen Adresse * @return gibt die zu geladene Adresse zurück, und Null fällt * / öffentliche Adresse Load (int id) {return Super.load (address.class, id); } / *** Fügen Sie eine Adresse hinzu* @Param -Adresse Die zugefügte Adresse* @param user_id die user_id entsprechend der addess zugefügten* if (userDao.load (user_id) == null) {return false; } return super.add (Adresse); } / *** eine Adresse löschen* @param -ID, um die ID zu löschen, die der Adresse entspricht } / *** Aktualisieren Sie eine Adresse* @param -Adresse Die zu aktualisierte Adresse* @return True Update erfolgreich* / public boolean update (Adressadresse) {return Super.UpDate (Adresse); } / *** Aktualisieren Sie eine Adresse* @param -Adresse Die zu aktualisierte Adresse* @return True Update erfolgreich* / public boolean update (Adressadresse) {return Super.UpDate (Adresse); } / ** * Nehmen Sie alle Adressen des Benutzers basierend auf der Benutzer -ID * @param user_id * @return * / public pager <adresse> liste (int user_id) {map <String, Objekt> Maps = new HashMap <> () heraus; Maps.put ("user_id", user_id); return super.list (address.class, maps); }}Wenn die Ado -Ebene auf diese Weise geschrieben ist, wird es kein Problem geben.
Das obige dreht sich alles um diesen Artikel. Hier geht es um die Entwicklung des gesamten Projekts von Javaweb Mall. Ich hoffe, es wird für Ihr Lernen hilfreich sein.