Die Beziehungen, die wir heute hauptsächlich lernen, sind Einzelbeziehungen und eins-zu-viele-Beziehungen.
1. Eins-zu-Eins-Beziehung
Lassen Sie es uns anhand von Beispielen erklären. (Eine Frau entspricht einem Ehemann).
1) Datenbankinformationen
TABLE T_WIFE erstellen (ID int Primary Key Auto_increment, wife_name varchar (), fk_husband_id int); erstellen table t_husband (id int primary key auto_increment, hussten_name varchar (); in t_husband -Werte einfügen (null, 'hello');
2) entsprechender Javabäercode
Obwohl es in der Datenbank nur eine fremde Schlüsseln gibt, die von einer Partei konfiguriert werden, ist diese Einzelbeziehung eine Zwei-Wege-Beziehung.
Ehemann.java
Paket com.cy.mybatis.beans; Import Java.io.Serializable;/*** Eins zu einem*@author acer **/Public Class Ehemann implementiert serialisierbar {private statische endgültige lange lange Serialversionuid = l; private integer id; private string name; private haubean id hipewan; {super (); this.id = id; this.name = name; this.wife = wife;} public Integer getId () {return id;} public void setid (Integer id) {this.id = id;} public String getName () {return name;} public void setname (starken name) {this.name = name; setwife (wifeBean Frau) {this.wife = Frau;}@overridePublic String toString () {return "hussten [id =" + id + ", name =" + name + ", wife =" + wife + "]";}} WifeBean.java
Paket com.cy.mybatis.beans; Import Java.io.Serializable;/*** Eins zu eins*@author acer **/Public Class HifeBean implementiert serialisierbar {private statische endgültige lange long serialversionuid = l; private integer id; private string name; privat hussten. {Super (); this.id = id; this.name = name; this.husband = hussten;} public Integer getId () {return id;} public void setId (Integer id) {this.id = id;} public String getName () {return name;} public void setname () {this.name; void Sethusband (Ehemann Ehemann) {this.husband = hussten;}@oversidepublic String toString () {return "Frau [id =" + id + ", name =" + name + ", husse =" + husse + "]";}}} 3) Geben Sie als nächstes zwei Schnittstellen fest, Hemdmapper und Wifemapper.
Ehemann
Paket com.cy.mybatis.mapper; import com.cy.mybatis.beans.husbandbean; public interface ohemmapper {/*** query hussten Informationen basierend auf id*@param id* @return*@throws Exception*/public husse -selecthus bandby (int id) löscht Ausnahme. selecthusbandandwife (int id) löst Ausnahme aus;} 4) Definieren Sie die Datei von Ehemannmapper.xml
<? xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"><Mapper namespace =" com.cy.mybatis.mapper.husbandmapper "> <resultmapMap type =" hussten javatype = "java.lang.Ineger"/> <result properation = "name" column = "name" javatype = "java.lang.String"/> <!- Assoziation Ein komplexer Typ Assoziation; Viele Ergebnisse werden in diese Art eingebettetes Ergebnis -Map -Assoziation verpackt oder beziehen sich auf eine Spalte = "ID". Die hier bezieht sich auf die primäre Schlüssel -ID aus der T_WIFE -Tabelle. Diese Abfragefrau, also gibt es eine Methode in der Frau Mapper-> <Association Property = "Frau" column = "id" javatype = "wifeBean" select = "com.cy.mybatis.mapper -> <select id = "selecthusbandById" resultType = "hushenbean"> select * von t_husband wob Gibt eine Sammlung zurück. -> <select id = "selecthusbandandwife" resultmap = "husstenandwife"> select * von t_husband wob
Es gibt eine Methode in Wifemapper.xml
<? xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"><Mapper namespace =" com.cy.mybatis.mapper.Wifemapper "> <select id =" selectWiFyBandId "resultTtype =" whiseBean "> aus T_WIFE, wobei fk_husband_husing =" | </mapper>
5) Schreiben Sie eine Implementierung
Paket com.cy.mybatis.service; import org.apache.ibatis.session.sqlSession; import com.cy.mybatis.beans.husbandbean; {selecthusbandandwife ();} private statische void selecthusbandandwife () {SQLSession Session = DBTOOLS.GetSession (); Ehemannmapper hm = session.getMapper (Ehemannmapper.Class); try {Ehemann Ehemann = hm.selecthus und). e) {e.printstacktrace ();}}} HINWEIS: Die Werkzeugklasse wurde im vorherigen Kapitel geschrieben, was der auf gestrigen Basis festgelegten.
Beachten:
MyBatis arbeitet tatsächlich auf XML. Alle unsere Methoden sind direkt in XML definiert. Das Schreiben einer Schnittstelle bedeutet nur, uns unserem dreischichtigen Denken besser anzupassen. Wenn Sie keine Schnittstelle schreiben, können Sie die Methoden in XML direkt durch die Sitzung bedienen.
Solange es in XML Methoden gibt, kann es verwendet werden, und die Aufrufmethode lautet: Namespace+ Method -Name;
Stellen Sie bei der Verwendung von Ergebnistypen für Ausnahme sicher, dass Ihr Attributname dem Feldnamen übereinstimmt.
Wenn es nicht dasselbe ist, verwenden Sie Ergebnismap.
2. Eins-zu-Viele-Beziehung
Lassen Sie es uns anhand von Beispielen erklären. (Ein Schloss entspricht mehreren Schlüssel).
2.1) In den Datenbankinformationen werden hier keine Daten hinzugefügt. Wir verwenden Batch, um Daten hinzuzufügen
TABLE CREATE T_KEY (ID int Primary Key Auto_increment, Key_Name varchar (), fk_lock_id int); Tabelle erstellen t_lock (ID int Primärschlüssel Auto_increment, lock_name varchar ());
2.2) Entitätsklasse
Keybean.java
Paket com.cy.mybatis.beans; import Java.io.Serializable;/*** ManyToone***/öffentliche Klasse Keybean implementiert serialisierbar {private statische endgültige long serialversionuid = l; private Ganzzahl id; {super();this.id = id;this.key = key;this.lock = lock;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public LockBean getLock() {return lock;}public void setLock (lockbean lock) {this.lock = lock;}@overridePublic String toString () {return "keybean [id =" + id + ", key =" + key + ", lock =" + lock + "]";}} lockbean.javapackage com.cy.mybatis.beans; java.util.list;/*** onetomany***/public class lockbean implementiert serialisierbar {private statische endgültige long serialversionuid = l; id; this.lock = lock; this.keys = keys;} public Integer getId () {return id;} public void setId (Integer id) {this.id = id;} public String getLock () {return lock;} public void setStlock (String Lock) {this.lock =} öffentlicher Lock -Lock -lock -lock -lock; setKeys (list <KeyBean> Schlüssel) {this.keys = keys;}@oversidepublic String toString () {return "lockbean [id =" + id + ", keys =" + keys + ", lock =" + lock + ";}}}}}}}}}}}}}} 2.3) eine Schnittstelle herstellen
Keymapper.javapackage com.cy.mybatis.mapper; import java.util.list; batchsavekeys (@param ("keys") liste <keyBean> keys);} lockMapper.javapackage com.cy.mybatis.mapper; Savelock (@param ("Lock") Lockbean Lock);/*** Abfragen Sie die Informationen der Sperre basierend auf der ID* @param id* @return*/public lockBean findlockbyid (int id);/*** Fragen Sie die Informationen der Sperre und Key basierend auf der ID* @param id* @return*/public LockBean Findlock und Id) (int id) (int id) (int id). 2.4) Erstellen Sie eine XML -Datei
Keymapper.xml
<? xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"><mapper namespace="com.cy.mybatis.mapper.KeyMapper"><resultMap id="keyMap" type="KeyBean"><id property="id" column="id" javaType="java.lang.Integer"/><result Property = "Key" Column = "KEY_NAME" javatype = "java.lang.String"/> </resultmap> <!-Die Sammlung ist ein Element, das für das Traversal verwendet wird (erforderlich), unterstützende Arrays, List, festgelegt-> <!-Element repräsentiert den Alias, wenn jedes Element in der Sammlung iteriert wird. -> <!-Der Trennzeichen gibt an, welches Symbol als Trennzeichen zwischen jeder Iteration verwendet wird. --><insert id="batchSaveKeys">insert into t_key values <foreach collection="keys" item="key" separator=",">(null,#{key.key},#{key.lock.id})</foreach></insert><select id="findKeysByLockId" resultMap="keyMap">select * from t_key where fk_lock_id = #{id} </select> </minkper> lockMapper.xml <xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"><Mapper namespace =" com.cy.mybatis.mapper.lockmapper "> <!-Custom Return Type-> <resultmap id =" lockmap "type" lockbean "> <id orient =" id ". javatype = "java.lang.Ineger"/> <result properation = "lock" column = "lock_name" javatype = "java.lang.String"/> <resulting property = "lock" column = "lock_name" javatype = "java.lang.string"/> <collection probioel select = "com.cy.mybatis.mapper.keymapper.findkeysByLockid"> </collection> </resultmap> <einfügen id = "savelock"> in t_lock -Werte einfügen (null,#{lock.lock}) </einfügen> <select id = "findLockbyId" resultmap = "lockmap"> aus t_ "findLockByid" resultmap = "lockmap"> aus t_ "findLockby" wob #{id} </select> <select id = "findLockandkeys" resultMap = "lockandKeysmap"> ausgewählt * von t_lock wobei id = #{id} </select> </mapper> 2.5) Implementierung
Paket com.cy.mybatis.service; import Java.util.ArrayList; Import Java.util.List; import org.apache.ibatis.session.sqlSession; import com.cy.mybatis.beans.keybean; importcy.mybatis.maper. com.cy.mybatis.mapper.lockmapper; import com.cy.mybatis.tools.dbtools; öffentliche Klasse OnetomanyService {public static void main (String [] args) {// savelock (); // batchsavekeys (); findLockandkeys ();} private statische void findLockandkeys () {SQLSession Session = dbtools.getSession (); lockMapper lm = session.getMapper (lockMapper.class); lockbean lock = lm.findLockandkeys (); system.println (lock)}; = Dbtools.getSession (); lockMapper lm = session.getMapper (lockMapper.Class); Keymapper km = session.getMapper (Keymapper.ClASS); Keybean (null, "key"+i, lock); keys.add (key);} km.batchsavekeys (keys); session "Lock", null); lm.savelock (lock); Sitzung.Commit ();}} Die Ergebnisse zeigen:
3. Batchbetrieb und Pagination
Hier werde ich den Benutzer aus dem vorherigen Kapitel verwenden und den Hauptcode schreiben.
Definieren Sie zuerst das Paging -Objekt.
Paket com.cy.mybatis.beans; importieren java.util.list;/*** ein Paginierungsobjekt** @Autor**/public class Pager {private int pageno; // aktuelle Seitenzahl privat int pagetotal pagetotal; // Total Page -Nr. Data Set public int getPageno () {return pageno;} public void setpageno (int pageno) {this.pageno = pageno;} public int getPagetotal () {return pagetotal;} öffentlicher void setpagetotal (int pagetotal) ththtotal {pagetotal = ththtotal) this.pagetotal = Pagetotal (pagetotal) thtaTotal {return rowStotal;} public void setRowStotal (int rowstotal) {this.rowstotal = rowStotal; pagetotal = rowstotal % pageSize ==? rowsTotal / pageSize : rowsTotal / pageSize + ;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public List<?> getList() {return list;}public void setList(List<Object> list) {this.list = list;}@Overridepublic String toString() {return "pager [pageno =" + pageno + ", pagetotal =" + pagetotal + ", rowStotal =" + rowstotal + ", pageSize =" + pageSize + ", list =" + list + "]"}} usermapper.java Schnittstelle. Paket com.cy.mybatis.mapper; import Java.util.List; import Java.util.map; user) throws Exception;/*** Use * @param user* @param id* @return* @throws Exception*/public int updateUser (@Param("u")UserBean user,@Param("id")int id) throws Exception;/*** Exception* @param id* @return* @throws Exception*/public int deleteUser(int id) throws Exception;/*** Query user information based on id* @param id* @return* @throws Exception*/public UserBean selectUserById(int id) throws Exception;/*** Query all user information* @return* @throws Exception*/public List<UserBean> selectAllUser() throws Exception;/*** Batch Add* @param user* @return* @throws Exception*/public int batchInsertUser(@Param("users")List<UserBean> user) throws Exception;/*** Batch Delete* @param list* @return* @throws Exception*/public int batchDeleteUser(@Param("list")List<Integer> list) throws Exception;/*** Paging query data* @param parma* @return* @throws Exception*/public List<UserBean> pagerUser(Map<String, Object> parmas) throws Exception;/*** * Pagination Statistics* @param parma* @return* @throws Exception*/public int countUser (map <string, object> parma) löst eine Ausnahme aus;} XML -Datei <xml Version = ".". coding = "utf-"?> <! docType mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"><Mapper namespace =" com.cy.mybatis.mapper.usermapper "> <!-benutzerdefinierte Rückkehrergebnisse-> <resultmap id =" usermap type "usermaper" userbean "id" <id "<id '. javatype = "java.lang.Ineger"> </id> <resulting Property = "userername" column = "userername" javatype = "java.lang.String"> </result> <resulting Eigenschaft = "Passwort" column = "password" javatype javatype = "java.lang.double"> </result> </resultmap> <! Die ParameterType-Eigenschaft gibt den bei der Abfragung verwendeten Parametertyp an, und die von der Abfrage zurückgegebene Ergebnis-Set-Art-> <!-UseGeneratedKeys: (Es ist nur nützlich für einfügen) Dies gibt MyBatis an, um die Methode von JDBCs GetgeneratedKeys zu verwenden, um das interne Schlüssel zu verwenden. SQLSERVER). Standardwert: Falsch. -> <!-KeyProperty: (nur für den Einfügen nützlich) Markieren Sie eine Eigenschaft. MyBatis setzt seinen Wert durch GetGeneratedKeys oder über das Element Child Element der SelectKey der Insert -Anweisung. Standard: Nicht gesetzt. -> <!-#{} Inhalt ist ein Platzhalter. Wenn der Parameter ein Javabean ist, zeigt er den Eigenschaftswert des bean-Objekts an-> <Insert id = "InsertUser" useGeneratedKeys = "true" keyProperty = "user.id"> in T_USER (Benutzername, Passwort, Konto) Werte ({user. id = "updateUser"> aktualisieren t_user username =#{u.username}, password = {u.password}, account =#{U.account} wob parameterType = "int" resultMap = "usermap"> select * von t_user wob T_USER -Werte <foreach collection = "Benutzer" item = "Benutzer" separator = ","> (null,#{user.username},#{user. separator = ",">#{id} </foreach>) </delete> <!-Die Sammlung ist ein Element, das für Traversal verwendet wird (erforderlich), unterstützende Arrays, List, Set-> <!-Das Element repräsentiert den Alias, wenn jedes Element im Satz iteriert wird. -> <!-Separator repräsentiert, welches Symbol als Trennzeichen zwischen jeder Iteration verwendet wird. -> <select id = "pagerUser" parameterType = "java.util.map" resultMap = "usermap"> select * von t_user wobei = <if test = "username! parameterType = "java.util.map" resultType = "int"> select count (*) von t_user wobei = <if test = "Benutzername! $ Bei der Generierung von SQL werden Zitate nicht zusammengestellt. Es kann für Parameter -Assemblierungstestklassen wie die Reihenfolge nach Paket com.cy.mybatis.service; import Java.util.arrayList; Import Java.util.hashMap; Import Java.util.List; Import Java.util.Map; Import org. com.cy.mybatis.tools.DBTools;import com.cy.mybatis.mapper.UserMapper;public class UserService {/*** @param args*/public static void main(String[] args) {// insertUser();// deleteUser();// updateUser();// selectUserById();// selectAllUser();// batchInsertUser();// batchDeleteUser();// countUser();pagerUser();}private static void countUser() {SqlSession session = DBTools.getSession();UserMapper mapper = session.getMapper(UserMapper.class);Map<String,Object> params = new HashMap <String, Object> (); params.put ("Benutzername", "Kitty"); int index =; params.put ("index", index); // von welcher Seite zu starten. MySQL startet mit Params.put ("pageSize",); // Die Anzahl der Datenstreifen pro Seite int County; try {count = mapper.countuser (params); DBTOOLS.GetSession (); UsMapper mapper = session.getMapper (userMapper.class); map <String, Objekt> params = new Hashmap <String, Object> (); Params.put ("Benutzername", "Kitty"); Params.put ("Index",); // von der Seite. MySQL startet mit params.put ("pageSize",); // Die Anzahl der Datenstreifen pro Seite try {list <BenerBean> u = mapper.pagerUser (Params); für (userBean userBean: u) {system.out.println ("----------"+userBean);}} catch (Ausnahme E) {E.printstacktrace ();}} Private Static void batchDeleteUser () {SQLSession Session = dBtools.getSession () usenmaper mapper = usenmaper mapper = Session.GetMapper (UsMapper.Class); Liste <Integer> ids = new ArrayList <Integer> (); für (int i =; i <; i ++) {ids.add (i);} try {mapper.batchDeleteuser (Ids); Session.commit (); batchInsertuser () {SQLSession Session = DBTOOLS.GetSession (); UsMapper Mapper = Session.getMapper (UsMapper.ClASS); LIST <UserBean> user = new ArrayList <UserBean> (); für (int i =; i <; .); users.add (user);} try {mapper.batchInsertUser (Benutzer); session.commit ();} catch (Ausnahme E) {E.printstacktrace ();}}/*** Neue Benutzer*/private static void Insertuser () {SQLSession Session = DBTOOLS. Session.GetMapper (UsMapper.Class); userBean user = new UserBean ("yi", "",.) try {mapper.insertuser (user); static void deleteUser () {SQLSession Session = DBTOOLS.GetSession (); UsMapper mapPer = Session void updateUser () {SQLSession Session = DBTOOLS.GetSession (); UsMapper mapper = session.getMapper (userMapper.class); userBean user = new UserBean ("xiao ming", "", {e.printstacktrace (); session.rollback ();}}/*** user von id*/privat static void selectUserById () {SQLSession Session = DBTOOLS.GetSession (); UsMaper mapper = session.getMapper (userMaper.class); try {{{{userBean ebern) = {{{{{userBean ebern) = {{{{userBean user = mapper.SelectUserById (); System.out.println (user.toString ()); session.commit ();} catch (Ausnahme E) {e.printstacktrace (); session.rollback ();}}/*** Query*/private static void selectalluser () {) {) {sqlSession Session mapper = session.getMapper (userMapper.class); try {list <userBean> user = mapPer.SelectAlluser (); System.out.println (user.toString ()); session.commit ();} catch (Ausnahme E) {E.printStacktrace (); Schauen Sie sich das Gesamtprojekt an:
Alles muss beharrlich!