العلاقات التي نتعلمها بشكل أساسي اليوم هي العلاقات الفردية والعلاقات الفردية.
1. علاقة فردية
دعنا نشرح ذلك من خلال أمثلة. (زوجة تتوافق مع زوج).
1) معلومات قاعدة البيانات
قم بإنشاء جدول t_wife (ID int int incl exto_increment ، gife_name varchar () ، fk_husband_id int) ؛ إنشاء table t_husband (id int int in in into_increment ، fair_name varchar () ؛
2) رمز جافابان المقابل
على الرغم من وجود مفاتيح أجنبية واحدة فقط من قبل طرف واحد في قاعدة البيانات ، فإن هذه العلاقة الفردية هي علاقة ثنائية الاتجاه.
زوجي. جافا
package com.my.mybatis.beans ؛ import java.io.serializable ؛/*** واحد إلى واحد* @Author acer **/public class public exeribean يسلسلها {public static final final serialversionuid = l ؛ ed ideger private ؛ {super () ؛ this.id = id ؛ this.name = name ؛ this.wife = evely ؛} integer getid () {return id ؛} public void setId (integer id) {this.id = id ؛} public string getName () {return name ؛} public void setName (name setwife (زوجة الزوجة) {this.wife = givel ؛}@orgridepublic string toString () {return "exeried [id =" + id + " زوجة java
package com.my.mybatis.beans ؛ import java.io.serializable ؛/*** واحد إلى واحد*مؤلف acer **/public class زوجة الأطراف المسلسل {public static static final serialversionuid = l ؛ inte id ideger private ؛ {super () ؛ this.id = id ؛ this.name = name ؛ this.husband = exare ؛} integer getid () {return id ؛} public void setId (integer id) {this.id = id ؛} public string getName () {return name ؛} void sethusband (زوج زوجي) {this.husband = hair ؛}@Overridepublic String toString () {return "زوجة [id =" + id + "، name =" + name + "، expiel =" + fair + "]" ؛}} 3) بعد ذلك ، قم بإنشاء واجهتين ، exiremapper و wifemapper.
exiremapper
package com.my.mybatis.mapper ؛ استيراد com.cy.mybatis.beans.husbandbean ؛ الواجهة العامة exeriedmapper {/*** Query Query Divers SelectHusBandAndWife (INT ID) يلقي استثناء ؛} 4) تحديد ملف exiremapper.xml
<؟ xml الإصدار = "." الترميز = "UTF-"؟> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> namepace =" com.cy.mybatis.mapper.husbandmapper "> <drederMap type =" exameBean "id =" expirtandwife "> <id propert property = "name" column = "name" javatype = "java.lang.string"/> <!- ارتباط ارتباط نوع معقد ؛ سيتم تعبئة العديد من النتائج في هذا النوع من ارتباط خريطة النتائج المدمجة ، أو الرجوع إلى عمود = "معرف" المعرف هنا يشير إلى معرف المفتاح الأساسي من جدول T_Wife. زوجة الاستعلام هذه ، لذلك هناك طريقة في Mapper للزوجة-> <Association property = "زوجة" العمود = "id" javatype = "gifeBean" select = "com.cy.mybatis.mapper.wifemapper.selectwivehusbyhusbandid" </ensivand> </resultmap> <! -> <حدد ID = "selectHusBandById" resultType = "BeaffeBean"> SELECT * من T_HUSBAND حيث ID =#{id} </select> <!-resultmap اسم المراجع الناتجة الخارجية. إرجاع مجموعة. -> <حدد ID = "SelectHusBandAndWife" resultMap = "FairandOndWife"> حدد * من T_HUSBAND حيث id =#{id} </select> </kapper>هناك طريقة في wifemapper.xml
<؟ xml الإصدار = "." الترميز = "UTF-"؟> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> namepace =" com.cy.mybatis.mapper.wifemapper "> <select id =" selectweentbyhusbandid "resulttype =" exelected * </mapper>
5) اكتب تنفيذ
package com.my.mybatis.service ؛ import org.apache.ibatis.session.sqlsession ؛ استيراد com.mybatis.beans.husbandbean ؛ استيراد com.cy.mybatis.mapper.husbandmapper ؛ استيراد com.mybatis.tools.dbtools ؛ {selectHusBandAndWife () ؛} private static void selectHusbandOndWife () {sqlsession session = dbtools.getSession () ؛ eiversemapper hm = session.getMapper (paintmapper.class) ؛ جرب {exameBean exare = hm.selecthusbandwife () ؛ {E.PrintStackTrace () ؛}}} ملاحظة: تمت كتابة فئة الأدوات في الفصل السابق ، وهو مشابه تمامًا لتلك المنشأة على أساس الأمس.
يلاحظ:
يعمل MyBatis فعليًا على XML. يتم تعريف جميع أساليبنا مباشرة في XML. كتابة واجهة هي فقط لتوافق بشكل أفضل مع تفكيرنا من ثلاث طبقات. إذا لم تكتب واجهة ، فيمكنك تشغيل الأساليب مباشرة في XML من خلال الجلسة.
طالما أن هناك طرقًا في XML ، يمكن استخدامها ، وطريقة الاتصال هي: اسم المساحة+ طريقة طريقة ؛
عند استخدام ResultType للاستثناء ، تأكد من التأكد من أن اسم السمة الخاص بك هو نفس اسم الحقل ؛
إذا لم يكن هو نفسه ، فاستخدم ResultMap.
2. العلاقة بين واحد
دعنا نشرح ذلك من خلال أمثلة. (قفل واحد يتوافق مع مفاتيح متعددة).
2.1) لا توجد بيانات تمت إضافتها هنا في معلومات قاعدة البيانات ، نستخدم دفعة لإضافة بيانات
إنشاء Table T_Key (ID int int key ato_increment ، key_name varchar () ، fk_lock_id int) ؛ إنشاء Table T_lock (id int int key ato_increment ، lock_name varchar ()) ؛
2.2) فئة الكيان
keybean.java
package com.my.mybatis.beans ؛ import java.io.serializable ؛/*** manyToOne***/public class keybean تنفذ serializable {private static final long serialversionuid = l ؛ private integer id ، string key ، string key public ؛ public lockbean ؛ {super () ؛ this.id = id ؛ this.key = key ؛ this.lock = lock ؛} integer getId () {return id ؛} public void setId (integer id) {this.id = id ؛ id ؛ قفل) {this.lock = lock ؛}@orgridepublic string toString () {return "keybean [id =" + id + "، key =" + key + "، lock =" + lock + "]" ؛}} lockbean **/تنفّق Lockbean من الفئة العامة {private static static final long serialversionuid = l ؛ integer id الخاص ؛ قفل سلسلة خاصة ؛ قائمة خاصة <KeyBean> مفاتيح ؛ public lockbean () {super () ؛ getId () {return id ؛} public void setId (integer id) {this.id = id ؛} السلسلة العامة getlock () {return lock ؛} public void setlock (string lock) {this.lock = lock ؛ toString () {return "lockbean [id =" + id + "، keys =" + keys + "، lock =" + lock + "]" ؛}} 2.3) إنشاء واجهة
keymapper.javapackage com.cy.mybatis.mapper ؛ import java.util.list ؛ import org.apache.ibatis.annotations.param ؛ استيراد com.cy.mybatis.beans.keybean batchsavekeys (param ("keys") قائمة <KeyBean> مفاتيح) ؛} lockmapper.javapackage com.cy.mybatis.mapper ؛ import org.apache.ibatis.annotations.param Savelock (param ("lock") lockbean lock) ؛/*** استعل عن معلومات القفل بناءً على المعرف* @param id* @return*/public lockbean findlockbyid (int id) ؛/*** Quepy معلومات القفل والمفتاح بناءً على المعرف* onemany* param id*/public lockbean 2.4) إنشاء ملف XML
keymapper.xml
<؟ xml الإصدار = "." الترميز = "UTF-"؟> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> namepace =" com.cy.mybatis.mapper.keymapper "> <drederMap id =" keymap "type =" keybean "> <id propert property = "key" column = "key_name" javatype = "java.lang.string"/> </sromedmap> <!-المجموعة هي عنصر يستخدم للتجارة (المطلوبة) ، المصفوفات الداعمة ، القائمة ، التعيين-> <!-العنصر يمثل الاسم المستعار عندما يتم تكرار كل عنصر في المجموعة. -> <!-يشير الفاصل إلى ما هو الرمز المستخدم كفاصل بين كل تكرار. -> <insert id = "batchsavekeys"> insert في قيم t_key <foreach collection = "keys" item = "key" felearator = "،"> (null ،#{key.key} ،#{key.id}) </foreach> </insert> <select id = "findkyysbylockid #{id} </rection> </papper> lockmapper.xml <؟ xml version = "." الترميز = "UTF-"؟> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> namePace =" com.cy.mybatis.mapper.lockmapper "> <! javatype = "java.lang.integer"/> <result property = "lock" column = "lock_name" javatype = "java.lang.string"/> <result property = "lock" column = "lock_name" javatype = "java.lang.string"/> collection = keys "keys SELECT = "com.cy.mybatis.mapper.keymapper.findkeysbylockid"> </roucky> </resultmap> <insert id = "savelock"> insert في t_lock قيم (null ، #{lock.lock}) </insert> <select id = id = "findlockandkeys" resultmap = "lockandkyysmap"> حدد * من t_lock حيث id = #{id} </select> </mapper> 2.5) التنفيذ
package com.my.mybatis.service ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ import org.apache.ibatis.session.sqlsession ؛ import com.cy.mybatis.beans.keybean ؛ import com.my.mybatis.beans.lockbean ؛ import com com.cy.mybatis.mapper.lockmapper ؛ import com.mybatis.tools.dbtools ؛ public onetomanyservice {public static void main (string [] args) {// savelock () ؛ // batchsavekeys () ؛ findlockandkeys () ؛} private static void bindlockandkeys () {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) ؛ lockbean lock = lm.findlockbyid () ؛ قائمة <Neybean> Keys = new ArrayList <keybean> keybean (null ، "key"+i ، lock) ؛ keys.add (key) ؛} km.BatchSaveKeys (keys) ؛ session.commit () ؛} private static void savavelock () {sqlsession session = newlsbean ؛ "Lock" ، null) ؛ lm.savelock (lock) ؛ session.commit () ؛}} تظهر النتائج:
3. العملية الدُفعات والترقيم ترقيم الصفحات
هنا سأستخدم المستخدم من الفصل السابق وكتابة الرمز الرئيسي.
أولا تحديد كائن الترحيل.
package com.my.mybatis.beans ؛ import java.util.list ؛/*** تحديد كائن تراجع** @مؤلف**/public class pager {private int pageno ؛ // رقم الصفحة الحالية رقم pageTotal pagetotal الخاص ؛ // إجمالي عدد الصفحة الخاصة ؛ مجموعة البيانات التي تم إرجاعها public int getPageno () {return pageno ؛} public void setPageno (int pageno) {this.pageno = pageno ؛} public int getPageTotal () {return pageTotal ؛ getRowStotal () {return rowstotal ؛} public void setRowStotal (int rowstotal) {this.rowstotal = rowstotal ؛ pageTotal = rowstotal ٪ pagesize ==؟ ROWSTOTAL / PAGESIZE: ROWSTOTAL / PAGESISE + ؛} public int getPagesize () {return pagesize ؛} public void setPagesize (int pagesize) {this.pagesize = pagesize ؛} public strup <؟> getList () {return list ؛ "pager [pageno =" + pageno + "، pageTotal =" + pagetotal + "، rowstotal =" + rowstotal + "، pagesize =" + pagesize + "، list =" + list + "]" ؛}} usermapper.java. package com.my.mybatis.mapper ؛ import java.util.list ؛ استيراد java.util.map ؛ استيراد org.apache.ibatis.annotations.param ؛ استيراد com.cy.mybatis.beans.userbean مستخدم) يلقي resws استثناء ؛/*** استخدم* param user* param id* @return* athrows استثناء*/public int updateUser (param ("u" استثناء*/userbean public userbean selecterById (int id) يلقي الاستثناء ؛/*** استعلام جميع معلومات المستخدم* @return* @throws استثناء*/قائمة عامة <userBean> selectalluser () rehrows استثناء ؛/*** batch add* param user* @return* @athrows استثناء*/public Int BatchinSertuser (parparam ("مستخدمين") @return* @throws استثناء*/public int batchdeleteuser (param ("list") list <Integer> list) رمي الاستثناء ؛/*** paging data query data* param parma* @return* athrows استثناء*/قائمة عامة <SetherBean> pagerUser Countuser (MAP <String ، Object> parmas) يرمي استثناء ؛} ملف XML <؟ xml version = "." الترميز = "UTF-"؟> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis--mapper.dtd"> namepace =" com.cy.mybatis.mapper.usermapper "> <!-مجموعة نتائج الإرجاع المخصصة-> javatype = "java.lang.integer"> </id> <result property = "username" column = "username" javatype = "java.lang.String"> </dreg> <result property = "password" column = "password" javatype = "java.lang.string"> javatype = "java.lang.double"> </result> </resultmap> <!- يجب أن تكون سمة المعرف في العلامات المختلفة هي نفس اسم الطريقة في الواجهة ، ويجب أن تكون قيمة سمة المعرف فريدة من نوعها ولا يمكن إعادة استخدامها. تحدد خاصية ParameterType نوع المعلمة المستخدمة عند الاستعلام ، وتحدد خاصية ResultType نوع مجموعة النتائج الذي تم إرجاعه بواسطة الاستعلام-> <!-usegeneratedkeys: (إنه مفيد فقط لإدراج) هذا يخبر MyBatis باستخدام management manage jdbc managements to the maneval explys in-field in-in-inclured inso in-field of date. SQLServer). القيمة الافتراضية: خطأ. -> <!-keyproperty: (مفيد فقط لإدراج) حدد خاصية. ستقوم MyBatis بتعيين قيمتها من خلال getGeneratedKeys أو من خلال عنصر SelecteKey Child في عبارة INSERT. الافتراضي: لم يتم تعيينه. -> <!-#{} المحتوى هو عنصر نائب. عندما تكون المعلمة عبارة عن javabean ، فإنها تشير إلى قيمة خاصية كائن الفول الذي يتم وضعه-> <insert id = "insertuser" usegeneratedKeys = "true" keyproperty = "user.id" id = "updateUser"> تحديث t_user تعيين username =#{U.Username} ، password =#{u.password} ، account =#{u.Account} حيث id =#{id} </update> <delete id = "deleteuser" parametertype = int "> delete from t_user where id = parametertype = "int" resultmap = "usermap"> حدد * من t_user حيث id =#{id} </select> <select id = "selectalluser" resultmap = "usermap"> select * from t_user </select> <! T_USER HABERS <foreach collection = "users" item = "users" seplator = "،> (null ،#{user.username} ،#{users.password} ،#{users.account}) </foreach> </sert> <delete id =" batchdeleteuser "> delete from t_user in in ( فاصل = "،">#{id} </foreach>) </delete> <!-المجموعة عبارة عن عنصر يستخدم للتمرير (مطلوب) ، صفائف دعم ، قائمة ، تعيين-> <!-العنصر يمثل الاسم المستعار عند تكرار كل عنصر في المجموعة. -> <!-يمثل الفاصل ما هو الرمز المستخدم كفاصل بين كل تكرار. -> <select id = "pageruser" parametertype = "java.util.map" resultmap = "usermap"> حدد * من t_user where = <if test = "username! = null"> و username مثل "٪ $ {username} ٪ '</if $ {index} ، $} parametertype = "java.util.map" resultType = "int"> حدد العد (*) من t_user حيث = <if test = "username! = null"> واسم المستخدم مثل '٪ $ {username} ٪' </fare> </select> </mapper> $ عند إنشاء SQL ، لن يتم تجميع الاقتباسات. يمكن استخدامه لفئات اختبار تجميع المعلمة مثل الترتيب بواسطة package com.cy.mybatis.service ؛ import java.util.arraylist ؛ import java.util.hashmap ؛ import java.util.list ؛ import java.util.map com.cy.mybatis.tools.dbtools ؛ استيراد com.cy.mybatis.mapper.usermapper ؛ فئة عامة المستخدمين {/*** param args*/public static void main (string [] args) {// insertuser () ؛ BatchInsertUser () ؛ // batchdeleteuser () ؛ // countuser () ؛ pageruser () ؛} countuser private static void () {sqlsession session = dbtools.getSession () ؛ usermapper mapper = session.getMapper (usermapper.class) HashMap <string ، Object> () ؛ params.put ("اسم المستخدم" ، "Kitty") ؛ int index = ؛ params.put ("index" ، index) ؛ // من أي صفحة للبدء. يبدأ MySQL بـ params.put ("pagesize" ،) ؛ // عدد شرائط البيانات المعروضة لكل صفحة int int ؛ حاول {count = mapper.countuser (params) ؛ system.out.println (count) ؛ dbtools.getSession () ؛ usermapper mapper = session.getMapper (usermapper.class) ؛ map <string ، object> params = new hashmap <string ، object> () ؛ params.put ("username" ، "kitty") ؛ params.put ("index" ،) ؛ // من الصفحة. يبدأ MySQL بـ params.put ("pagesize" ،) ؛ // عدد شرائط البيانات المعروضة لكل صفحة ، جرب {list <Serbean> u = mapper.pageruser (params) ؛ لـ (userbean userbean: u) {system.out.println ("----------"+userbean) ؛}} catch (استثناء e) {e.printstacktrace () ؛}} pratchdeleteuser (sqlsession e.printstack session.getMapper (usermapper.class) ؛ قائمة <integer> ids = new ArrayList <Integer> () ؛ for (int i = ؛ i <؛ i ++) {ids.add (i) ؛ BatchInsertUser () {sqlsession session = dbtools.getSession () ؛ usermapper mapper = session.getMapper (usermapper.class) ؛ قائمة <SeterBean> المستخدمين = new arraylist <userbean> () ؛ for (int i = ؛ i < .) ؛ users.add (user) ؛} جرب {mapper.batchinsertuser (المستخدمين) ؛ session.commit () ؛ session.getMapper (usermapper.class) ؛ userbean user = new userbean ("yi" ، "" ،.) ؛ حاول {mapper.insertuser (user) ؛ system.out.println (user.toString ()) ؛ session.commit () ؛ static void deleteuser () {sqlsession session = dbtools.getSession () ؛ usermapper mapper = session.getMapper (usermapper.class) ؛ حاول {mapper.deleteuser () ؛ session.commit () ؛} catch (استثناء e) {eprintstacktrace () void updateUser () {sqlsession session = dbtools.getSession () ؛ usermapper mapper = session.getMapper (usermapper.class) ؛ userbean user = new userbean ("xiao ming" ، "" ،.) {E.PrintStackTrace () ؛ session.rollback () ؛}}/*** Query user by id*/private static void selecterbyid () {sqlsession session = dbtools.getSession () ؛ usermapper mapper = session.getmapper mapper.selectuserbyid () ؛ system.out.println (user.toString ()) ؛ session.commit () ؛ mapper = session.getMapper (usermapper.class) ؛ حاول {list <Serbean> user = mapper.selectalluser () ؛ system.out.println (user.toString ()) ؛ session.commit () ؛ ألق نظرة على المشروع العام:
كل شيء يجب أن يستمر في!