ถัดไปบทความก่อนหน้านี้ "Javaweb Practical Mall Project Development (II)" ส่วนใหญ่ใช้การใช้งานทั่วไปที่ใช้งานทั่วไปและใช้ MAP Resultsmap กับแผนที่ที่เกี่ยวข้อง
1. อิงจากทั่วไป
เนื่องจากทุกคนต้องการใช้มันจึงมีการใช้ยาสามัญ ปัญหาที่ควรทราบคือรหัสเช่น user.getClass (). getName () ต้องได้รับการแก้ไข วิธีการปรับเปลี่ยนคือการส่งผ่านด้วยคลาสพารามิเตอร์ TC จากนั้นใช้ tcetName ()
รหัสสมบูรณ์:
แพ็คเกจ com.dao; นำเข้า com.model.pager; นำเข้า com.util.sessionutil; นำเข้า com.util.systemcontext; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า java.util.hashmap; นำเข้า Java.util.list; */คลาสสาธารณะที่ใช้ <t> {/** * นำประเภท t ออกจาก ID * @param id เพื่อลบ ID ของ t type * @return */public t โหลด (คลาส <t> tc, int id) {sqlsession session = sessionUtil.getSession (); t t = null; ลอง {t = session.selectone (tc.getName ()+". load", id); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } return t; } / *** เพิ่ม t type* @param t t typ typ typ typ type* @@return true ประสบความสำเร็จ* / บูลีนสาธารณะเพิ่ม (t t) {int isadd = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isadd = session.insert (t.getClass (). getName ()+". เพิ่ม", t); session.commit (); // commit} catch (Exception e) {session.rollback (); // rolle กลับถ้าการส่งล้มเหลว} ในที่สุด {sessionutil.losesession (เซสชัน); } return isadd> 0; } / *** ลบประเภท t ตาม ID* @param ID เพื่อลบ ID ของ t* @return จริงที่ประสบความสำเร็จ* / บูลีนสาธารณะลบ (คลาส <t> t, int id) {int iSdelete = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isdelete = session.delete (t.getName ()+". ลบ", id); session.commit (); } catch (exception e) {session.rollback (); // ล้มเหลวส่งคืน system.out.println ("ลบล้มเหลว"); E.PrintStackTrace (); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } return iSdelete> 0; } / *** อัปเดต t Type* @param t ผู้ใช้ที่จะอัปเดต* @return True สำเร็จ* / Public Boolean Update (T T) {int isUpdate = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isUpdate = session.delete (t.getClass (). getName ()+". อัปเดต", t); session.commit (); } catch (exception e) {session.rollback (); // ล้มเหลวส่งคืน system.out.println ("การอัปเดตล้มเหลว"); E.PrintStackTrace (); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } return isUpdate> 0; }/*** การสืบค้นเพจพายตามเงื่อนไขที่ระบุ* @param แผนที่ระบุเงื่อนไขการรวบรวมเงื่อนไข* @return*/เพจจ์สาธารณะ <t> ค้นหา (คลาส <t> t, แผนที่ <สตริง, วัตถุ> แผนที่) {int pagestart = SystemContext.getPageStart () maps.put ("pagestart", pagestart); Maps.put ("PageSize", PageSize); SQLSession Session = SessionUtil.getSession (); รายการ <t> datas = null; ลอง {dataS = session.selectList (t.getName ()+"ค้นหา", แผนที่); // รับเร็กคอร์ด pagers.setDatas (data); Pagers.setPageSize (Pagesize); Pagers.SetPagestart (Pagestart); int totalRecord = session.selectone (t.getName ()+". findCount", แผนที่); // รับจำนวนทั้งหมดของบันทึกบันทึก SettotalRecord (TotalRecord); Pagers.SetPageIndex (Pagestart/Pagesize+1); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } ส่งคืน } / *** ดึงข้อมูลส่วนหนึ่งของข้อมูลตามเงื่อนไขที่ระบุ* @param Maps ระบุชุดของเงื่อนไข* @return* / Public Pager <t> รายการ (คลาส <t> t, แผนที่ <สตริง, วัตถุ> แผนที่) SQLSession Session = SessionUtil.getSession (); รายการ <t> datas = null; ลอง {datas = session.selectList (t.getName ()+". list", แผนที่); // รับ Record Pagers.setDatas (DATAS); Pagers.settotalRecord (dataS.Size ()); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } ส่งคืน -userdao.java เดียวกันยังต้องการการแก้ไขที่สอดคล้องกัน
คลาสสาธารณะ UserDao ขยายพื้นฐาน <ผู้ใช้> { / ** * ลบผู้ใช้ตาม ID * @param ID เพื่อลบ ID ของผู้ใช้ * @return * / ผู้ใช้สาธารณะโหลด (ID int) {return super.load (user.class, id); }/* ฟังก์ชั่นอื่น ๆ ไม่ได้โพสต์ทีละรายการพวกเขาทั้งหมดเขียนด้วยวิธีที่คล้ายกัน*/}2. การทำแผนที่ของผลลัพธ์
พูดง่ายๆเมื่อข้อมูลฟิลด์ในฐานข้อมูลไม่สอดคล้องกับแอตทริบิวต์ของวัตถุมันจำเป็นต้องแมปผ่านผลลัพธ์
ตัวอย่างเช่น: มีคลาสเอนทิตีของผู้ใช้ในคุณสมบัติที่อยู่ดังต่อไปนี้
ที่อยู่ชั้นเรียนสาธารณะ {ID INT ส่วนตัว; ชื่อสตริงส่วนตัว; โทรศัพท์สตริงส่วนตัว รหัสไปรษณีย์สตริงส่วนตัว; // อึวัตถุผู้ใช้โดยตรงแทนที่จะเป็นผู้ใช้ผู้ใช้ส่วนตัว user_id; -จากนั้นเราต้องการนำที่อยู่ออกมาและนำผู้ใช้ที่เกี่ยวข้องออกมา อย่างไรก็ตามสิ่งเหล่านี้เป็นสองวัตถุและทั้งคู่มีแอตทริบิวต์ ID ดังนั้น mybatis จะสับสนเมื่อเรียกวิธีการตั้งค่าเพื่อตั้งค่าคุณสมบัติ วัตถุประสงค์ของการใช้ผลลัพธ์คือเพื่อกำจัดความวุ่นวายนี้
เขียนโหลด sql
<!-โหลดที่อยู่-> <!-จำเป็นต้องมีการเชื่อมต่อตารางที่นี่และผู้ใช้จะถูกนำออก การเชื่อมต่อนั้นจำเป็นต้องมีเพื่อให้แน่ใจว่าที่อยู่ที่ดึงออกมานั้นไม่ว่างเปล่าและนามแฝงรหัสแอตทริบิวต์ซ้ำ-> <เลือก id = "โหลด" พารามิเตอร์ = "int" resultmap = "addressmap"> เลือก *, t1.id เป็น 'a_id' จากที่อยู่ t1 </เลือก>
ที่นี่เราใช้ ResultMap เพื่อทำแผนที่ชื่อของผลลัพธ์นี้คือที่อยู่
แมปที่อยู่
<resultmap id = "addressmap" type = "address" automapping = "true"> <!-การแมป A_ID ในผลลัพธ์เป็น ID และ Automapping อื่น ๆ = จริงจะจับคู่โดยอัตโนมัติ-> <column id = "a_id" คุณสมบัติ = "id"/> <! column = "user_id" property = "id"/> <result column = "username" คุณสมบัติ = "ชื่อผู้ใช้"/> <result column = "nickname"/> <result column = "nickname"/> <result column = "nickname"/> <result column = "type"
หลังจากการกำหนดค่าข้างต้นเสร็จสมบูรณ์เมื่อทำการค้นหา MyBatis จะเรียกใช้วิธีการตั้งค่าที่สอดคล้องกันโดยอัตโนมัติและตั้งค่าแอตทริบิวต์เป็นคลาสเอนทิตี
ทดสอบ
แพ็คเกจ com.dao; นำเข้า com.model.address; ที่อยู่คลาสสาธารณะที่อยู่ขยายตัวขยาย Agemase <dront> {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {addressdao addressdao = new addressDao (); ที่อยู่ = addressDao.load (1); System.out.println (address.toString ()); } / *** โหลดที่อยู่* @param id รหัสของที่อยู่ที่จะโหลด* @return return ที่อยู่ที่จะโหลดและ null ไม่สามารถโหลด* / ที่อยู่สาธารณะโหลด (ID int) {return super.load (address.class, id); - ดังที่เห็นได้ในการเรนเดอร์ตราบใดที่คุณลักษณะการทำแผนที่ถูกนำออกมาทุกสิ่งที่ไม่ได้แมปจะเป็นโมฆะ
ทำตามแนวคิดนี้เพื่อทำฟังก์ชั่นอื่น ๆ ให้สมบูรณ์
รหัส XML:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd ข้อมูลฟิลด์ในฐานข้อมูลไม่สอดคล้องกับแอตทริบิวต์ของวัตถุคุณต้องแมปผ่านผลลัพธ์-> <resultmap id = "addressmap" type = "address" Automapping = "true"> <!-แผนที่ a_id ในผลลัพธ์เป็น id, Automapping อื่น ๆ javatype = "ผู้ใช้"> <!-แผนที่ user_id ไปยัง ID ของผู้ใช้-> <id column = "user_id" คุณสมบัติ = "id"/> <result column = "username" คุณสมบัติ = "ชื่อผู้ใช้"/> <result column = "nickname" <!-จำเป็นต้องมีการเชื่อมต่อตารางที่นี่และผู้ใช้ถูกนำออกมา การเชื่อมต่อทำให้มั่นใจได้ว่าที่อยู่ที่ดึงมานั้นไม่ได้ว่างเปล่าและนามแฝงสำหรับรหัสแอตทริบิวต์ที่ซ้ำกัน -> <เลือก id = "โหลด" พารามิเตอร์ = "int" resultmap = "addressmap"> เลือก *, t1.id เป็น 'a_id' จากที่อยู่ t1 </select> <!-เพิ่มที่อยู่-> <insert id = "เพิ่ม" parameterType = "address"> แทรกลงในค่าที่อยู่ (null,#{name},#{phone},#{postcode}, $ {user_id}) </แทรก> <! </deLete> <!-แก้ไขที่อยู่-> <อัปเดต id = "อัปเดต" parameterType = "ที่อยู่"> อัปเดตที่อยู่ชื่อ =#{ชื่อ}, โทรศัพท์ =#{โทรศัพท์}, postcode =#{postcode} โดยที่ id =#{id} </update> เลือก *, t1.id เป็น 'a_id' จากที่อยู่ t1 ขวาเข้าร่วมผู้ใช้ t2 on (t1.user_id = t2.id) โดยที่ t1.user_id =#{user_id} </select> </mapper>รหัส Java:
แพ็คเกจ com.dao; นำเข้า com.model.address; นำเข้า com.model.pager; นำเข้า java.util.hashmap; นำเข้า java.util.map;/*** สร้างโดย NL101 ในปี 2016/2/23 */ที่อยู่ระดับสาธารณะที่อยู่ DAO ขยายพื้นฐาน <ที่อยู่> {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {addressDao addressDao = new addressDao (); Pager <dront> pagers = addressDao.list (1); System.out.println (pagers.getDatas (). size ()); } / ** * โหลดที่อยู่ * @param id รหัสของที่อยู่ที่จะโหลด * @return return ที่อยู่ที่จะโหลดและ null ล้มเหลว * / โหลดที่อยู่สาธารณะ (ID int) {return super.load (address.class, id); } / *** เพิ่มที่อยู่* @param ที่อยู่ที่อยู่ที่จะเพิ่ม* @param user_id user_id ที่สอดคล้องกับที่อยู่ที่จะเพิ่ม* @return true ประสบความสำเร็จ* / ที่อยู่บูลีนสาธารณะ (ที่อยู่ที่อยู่ if (userdao.load (user_id) == null) {return false; } return super.add (ที่อยู่); } / *** ลบที่อยู่* @param id เพื่อลบ ID ที่สอดคล้องกับที่อยู่* @return จริงลบออกจริง* / บูลีนสาธารณะลบ (ID int) {return super.delete (address.class, id); } / *** อัปเดตที่อยู่* @Param ที่อยู่ที่อยู่ที่จะอัปเดต* @return การอัปเดตจริงอย่างแท้จริง* / การอัปเดตบูลีนสาธารณะ (ที่อยู่ที่อยู่) {return super.update (ที่อยู่); } / *** อัปเดตที่อยู่* @Param ที่อยู่ที่อยู่ที่จะอัปเดต* @return การอัปเดตจริงอย่างแท้จริง* / การอัปเดตบูลีนสาธารณะ (ที่อยู่ที่อยู่) {return super.update (ที่อยู่); } / ** * นำที่อยู่ทั้งหมดของผู้ใช้ตามรหัสผู้ใช้ * @param user_id * @return * / Public Pager <ที่อยู่> รายการ (int user_id) {แผนที่ <String, Object> Maps = New HashMap <> (); maps.put ("user_id", user_id); return super.list (address.class, Maps); -หากเลเยอร์ ADO ถูกเขียนด้วยวิธีนี้จะไม่มีปัญหา
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ ทั้งหมดนี้เกี่ยวกับการพัฒนาโครงการ Javaweb Mall ทั้งหมด ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของคุณ