บทความก่อนหน้านี้ "การพัฒนาโครงการห้างสรรพสินค้า Javaweb ปฏิบัติ (I)" ได้สร้างคลาสเอนทิตีและเครื่องมือการแบ่งหน้า บทความนี้ใช้ mybatis เพื่อสร้างเลเยอร์ DAO
นอกจากนี้เอกสาร MyBatis API สามารถใช้เป็นข้อมูลอ้างอิงได้
1. การใช้ mybatis
1. แนะนำแพ็คเกจชั้นวาง
ที่นี่ฉันแนะนำแพ็คเกจ mybatis และ mysql เป็น lib
2. เขียน config.xml เพื่อกำหนดค่าสภาพแวดล้อมฐานข้อมูล
โพสต์รหัสก่อนจากนั้นอธิบายทีละตัว
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd <typealiases> <package name = "com.model"/> </typealiases> <environment default = "การพัฒนา"> <environment id = "การพัฒนา"> <transactionManager type = "jdbc"/> <dataSource type = "pooled"> <property name = "value" name = "username" value = "$ {username}"/> <property name = "รหัสผ่าน" value = "$ {password}"/> </dataSource> </environment> <!-สภาพแวดล้อมที่สอง-> <environment id = "publish">ขั้นตอนแรกคือการแนะนำรูปแบบไฟล์ XML นั่นคือ DTD ซึ่งจำเป็นต้องคัดลอกโดยตรงจากเทมเพลตที่จัดทำโดย MyBatis
<! doctype การกำหนดค่าสาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
คำถามที่ 1
ฟังก์ชั่น คุณสมบัติ คือการกำหนดค่าไฟล์คุณสมบัติที่เกี่ยวข้องทรัพยากรระบุเส้นทางที่เกี่ยวข้องและเราสามารถกำหนดค่าไดรเวอร์ฐานข้อมูล URL ชื่อผู้ใช้รหัสผ่าน ฯลฯ ในไฟล์คุณสมบัติ อ้างถึงสิ่งต่อไปนี้ ด้วยวิธีนี้ MyBatis จะอ่านพารามิเตอร์ต่อไปนี้โดยอัตโนมัติและคุณสามารถใช้ $ {} เพื่ออ้างอิงใน XML
driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/ร้านค้าชื่อผู้ใช้ = รูทรหัสผ่าน = 123456
คำถามที่ 2
Typealiases กำหนดค่านามแฝงภายใต้เส้นทางที่ระบุ เราสามารถกำหนดค่าชื่อนามแฝงเดียว <typealias type = "com.model.user" alias = "ผู้ใช้"/>> ด้วยวิธีนี้ com.model.user ถูกเปลี่ยนเป็นผู้ใช้นามแฝง ไม่จำเป็นต้องเขียนชื่อทั้งหมดในภายหลัง คุณต้องการให้ผู้ใช้แทนที่การดัดแปลงแบตช์ <package name = "com.model"/> ด้วยวิธีนี้คุณสามารถแก้ไขคลาสทั้งหมดของแพ็คเกจและนามแฝงเริ่มต้นคือชื่อคลาสเอนทิตี
คำถามที่ 3
สภาพแวดล้อมใช้เพื่อกำหนดค่าสภาพแวดล้อมฐานข้อมูลและสามารถกำหนดค่าสภาพแวดล้อมที่หลากหลายเช่นสภาพแวดล้อมการพัฒนาและสภาพแวดล้อมการเปิดตัวค่าเริ่มต้นหมายถึงสภาพแวดล้อมเริ่มต้น
โปรดทราบว่าไม่มี s ในสภาพแวดล้อมซึ่งแสดงถึงสภาพแวดล้อมภายใต้สภาพแวดล้อม มันมีความโดดเด่นด้วย ID ดังนั้น ID จะต้องไม่ซ้ำกัน
TransactionManager แสดงประเภทฐานข้อมูลการเชื่อมต่อ JDBC เชื่อมต่อกับ Java
DataSource กำหนดค่าโหมดแหล่งข้อมูล Pooled เป็นโหมดการเชื่อมต่อพูล สำหรับโหมดอื่น ๆ คุณสามารถไปที่เอกสารอย่างเป็นทางการเพื่อตรวจสอบและเลือกตามความต้องการของคุณ
คุณสมบัติคือการกำหนดค่าการเชื่อมต่อฐานข้อมูล อย่าย้ายชื่อแก้ไขค่า = "ไดรเวอร์" นี่คือการใช้ {} เพื่ออ่านการกำหนดค่าในไฟล์คุณสมบัติด้านบน ให้ความสนใจกับการจับคู่ชื่อเพื่ออ่าน
3. คำสั่ง SQL Mapping Mapper เขียน Mapper
ที่นี่ฉันเขียนวิธีการโหลด UserDao นั่นคืออ่านผู้ใช้ตาม ID รหัสต่อไปนี้เทียบเท่ากับฟังก์ชั่นการโหลดผู้ใช้สาธารณะ (ID) สำหรับ MyBatis มีการเปลี่ยน #{} สองประเภทจะถูกยกมาโดยอัตโนมัติตามประเภทเช่นประเภทสตริง #{ชื่อ} แทนที่ด้วย 'ชื่อ' อีกอันคือการเปลี่ยน $ {} ซึ่งถูกแทนที่โดยตรงในรูปแบบดั้งเดิมและจะไม่เพิ่มสิ่งอื่น ๆ
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" resultType = "ผู้ใช้"> เลือก * จากผู้ใช้โดยที่ id =#{id} </select> </mapper>ขั้นตอนแรกคือการแนะนำไฟล์ส่วนหัว DTD และกำหนดกฎสำหรับไฟล์ XML
เลือกแท็กซึ่งระบุว่าปัจจุบันเป็นคำสั่ง SELECT
แอตทริบิวต์ id นั้นเทียบเท่ากับชื่อฟังก์ชันที่อ้างอิงโดย ID
แอตทริบิวต์พารามิเตอร์ซึ่งแสดงถึงประเภทพารามิเตอร์ที่เข้ามาสามารถระบุประเภทพื้นฐานหรือประเภทที่กำหนดเอง หากเป็นประเภทที่กำหนดเองวิธีการรับจะถูกเรียกโดยอัตโนมัติเพื่อให้ได้แอตทริบิวต์
คุณสมบัติ ResultType ประเภทค่าส่งคืนสามารถปรับแต่งประเภทได้โดยตรงและจะเรียกใช้วิธีการตั้งค่าโดยอัตโนมัติเพื่อตั้งค่าพารามิเตอร์แบบสอบถามและใช้คุณสมบัติเพิ่มเติมในบทความที่ตามมา
4. แผนที่แผนที่
ก่อนโทรคุณต้องกำหนดค่าการแมปใน config.xml ก่อน โปรดทราบว่า XML ที่กำหนดค่าไว้ที่นี่คือเส้นทางไฟล์
<Mappers> <mapper resource = "com/model/user.xml"/> </apers>
จากนั้นเขียนคลาสทดสอบ
โมฆะสาธารณะคงที่หลัก (สตริง [] args) {ลอง {inputstream คือ = resources.getResourceasstream ("config.xml"); // อ่านไฟล์การกำหนดค่า SQLSessionFactory โรงงาน = SQLSessionFactoryBuilder () Build (IS); // ใช้ไฟล์กำหนดค่า session.selectone (user.class.getName ()+". load", 1); // เรียกฟังก์ชั่นโหลดฟังก์ชั่น System.out.println (user.getNickName ()); // output ชื่อเล่น Session.close (); // ปิดเซสชัน} - ผลลัพธ์:
5. ระดับเครื่องมือ SQLSESSION
การเขียนคลาสทดสอบเช่นเดียวกับที่อยู่ข้างต้นเป็นปัญหาเกินไปดังนั้นฉันจึงห่อหุ้ม SQLSession เพื่ออำนวยความสะดวกในการใช้เลเยอร์ DAO
แพ็คเกจ com.util; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.apache.ibatis.session.sqlsessionfactory; นำเข้า org.apache.ibatis.session.sqlsession java.io.ioException; นำเข้า java.io.InputStream;/*** สร้างโดย NL101 เมื่อปี 2016/2/23 */คลาสสาธารณะ SessionUtil {ส่วนตัว SQLSessionFactory โรงงาน = NULL; Static {ลอง {inputStream คือ = resources.getResourceasstream ("config.xml"); // อ่านไฟล์การกำหนดค่าโรงงาน = ใหม่ SQLSessionFactoryBuilder (). สร้าง (IS); // สร้างโรงงานโดยใช้ไฟล์กำหนดค่า} catch (iOexception e) }} / ** * รับเซสชัน * @return * / สาธารณะ sqlsession getSession () {return factory.opensession (); } / ** * ปิดเซสชัน * @param เซสชัน * / โมฆะคงที่สาธารณะปิด (เซสชัน sqlsession) {ถ้า (เซสชัน! = null) เซสชัน. close (); เซสชัน = null; -ด้านบนคือการใช้ mybatis ขั้นพื้นฐานและตอนนี้มันเริ่มห่อหุ้มชั้น Dao
2. ห่อหุ้ม dao
1.Userdao.java
ผู้ใช้สาธารณะโหลด (ID ID) รับผู้ใช้ตาม ID
มันถูกเขียนไว้ด้านบน
บูลีนสาธารณะเพิ่ม (ผู้ใช้ผู้ใช้) เพิ่มผู้ใช้
รหัส XML
<!-เพิ่มผู้ใช้-> <insert id = "เพิ่ม" parameterType = "ผู้ใช้"> แทรกลงในค่าผู้ใช้ (null,#{ชื่อผู้ใช้},#{รหัสผ่าน},#{ชื่อเล่น},#{type}) </insert>รหัส Java
/** /*** เพิ่มผู้ใช้* @param ผู้ใช้ผู้ใช้ที่จะเพิ่ม* @return ความสำเร็จที่แท้จริง* /บูลีนสาธารณะเพิ่ม (ผู้ใช้ผู้ใช้) {int isadd = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isadd = session.insert (user.class.getName ()+". เพิ่ม", ผู้ใช้); session.commit (); // subment} catch (Exception e) {session.rollback (); // roLleback หากการส่งล้มเหลว} ในที่สุด {sessionUtil.losesession (เซสชัน); } system.out.println (isadd); return isadd> 0; } บูลีนสาธารณะลบ (ID int) ลบผู้ใช้รหัส XML
<!-ลบผู้ใช้-> <ลบ id = "ลบ" พารามิเตอร์ = "int"> ลบจากผู้ใช้โดยที่ id =#{id} </ลบ>รหัส Java
/ ** * ลบผู้ใช้ตาม ID * @param ID เพื่อลบ ID ของผู้ใช้ * @return ความสำเร็จที่แท้จริง */ Public Boolean DELETE (ID int) {int iSdelete = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isdelete = session.delete (user.class.getName ()+". ลบ", id); session.commit (); } catch (exception e) {session.rollback (); // ล้มเหลวส่งคืน system.out.println ("ลบผู้ใช้ล้มเหลว"); E.PrintStackTrace (); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } return iSdelete> 0; } อัปเดตบูลีนสาธารณะ (ผู้ใช้ผู้ใช้) อัปเดตผู้ใช้รหัส XML
<!-แก้ไขผู้ใช้-> <อัปเดต id = "อัปเดต" parameterType = "ผู้ใช้"> อัปเดตตั้งค่าผู้ใช้ชื่อผู้ใช้ =#{ชื่อผู้ใช้}, รหัสผ่าน =#{รหัสผ่าน}, ชื่อเล่น =#{ชื่อเล่น}, พิมพ์ =#{type}รหัส Java
/ *** อัปเดตผู้ใช้* @param ผู้ใช้ผู้ใช้จะได้รับการอัปเดต* @return True Success*/ Public Boolean Update (ผู้ใช้ผู้ใช้) {int isUpdate = 0; SQLSession Session = SessionUtil.getSession (); ลอง {isUpdate = session.delete (user.class.getName ()+". อัปเดต", ผู้ใช้); session.commit (); } catch (exception e) {session.rollback (); // ล้มเหลวส่งคืน system.out.println ("การอัปเดตล้มเหลว"); E.PrintStackTrace (); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } return isUpdate> 0; } การเข้าสู่ระบบของผู้ใช้สาธารณะ (ชื่อผู้ใช้สตริงรหัสผ่านสตริง) กำหนดว่าผู้ใช้มีอยู่จริงรหัส XML
<!-การตัดสินการเข้าสู่ระบบของผู้ใช้-> <เลือก id = "เข้าสู่ระบบ" พารามิเตอร์ parameterType = "สตริง" resultType = "ผู้ใช้"> เลือก * จากผู้ใช้ที่ชื่อผู้ใช้ =#{ชื่อผู้ใช้} </elect>รหัส Java
/ *** ตรวจสอบว่าผู้ใช้มีอยู่* @param ชื่อผู้ใช้ชื่อผู้ใช้* @param รหัสผ่านรหัสผ่าน* @return การดำรงอยู่ผู้ใช้ไม่มีอยู่ไม่มีการส่งคืน null*/ การเข้าสู่ระบบของผู้ใช้สาธารณะ (ชื่อผู้ใช้สตริงรหัสผ่านสตริง) {ผู้ใช้ผู้ใช้ = null; SQLSession Session = SessionUtil.getSession (); ลอง {user = session.sextone (soapbinding.use.class.getName ()+". เข้าสู่ระบบ" ชื่อผู้ใช้); // เมื่อรหัสผ่านไม่ถูกต้องตั้งค่าผู้ใช้เป็น null ถ้า (! user.getPassword (). เท่ากับ (รหัสผ่าน)) {user = null; }} ในที่สุด {SessionUtil.Closesession (เซสชัน); } return user; } publ รหัส XML:
SQL แบบไดนามิกถูกใช้ที่นี่ เกี่ยวกับ SQL แบบไดนามิกมันคือการใช้แท็กเช่นที่ไหนถ้าเลือก ฯลฯ คุณสามารถอ้างถึงเอกสารอย่างเป็นทางการ นอกจากนี้ใน mybatis แนวคิดของ null ไม่มีอยู่ ตัวอย่างเช่นคุณผ่าน user = null แต่เมื่อเปลี่ยนจะถูกแทนที่ด้วยสตริง "null" หากค่านี้ไม่พร้อมใช้งานมันเป็นโมฆะ
<!-รหัส pagination-> <select id = "ค้นหา" parameterType = "map" resultType = "ผู้ใช้"> เลือก * จากผู้ใช้ <ถ้า test = "ชื่อ! = null"> ที่ไหน <!-จำนวนทั้งหมดของบันทึกหน้า-> <select id = "findCount" parameterType = "map" resultType = "int"> เลือกนับ (*) จากผู้ใช้ <ถ้า test = "name! = null"> โดยที่ (ชื่อผู้ใช้เช่น #{ชื่อ} หรือชื่อเล่นเช่น #{ชื่อ})Java Code: โดยรวมแล้วมันยังคงขึ้นอยู่กับการปนเปื้อนที่ออกแบบโดยบทความก่อนหน้า
/*** การสืบค้นหน้าเว็บตามเงื่อนไขที่ระบุ* @param ชื่อการสืบค้นชื่อ, null แสดงถึงเงื่อนไขการเรียงลำดับการเรียงลำดับ @param, null แสดงถึงการเรียงลำดับโดย id* @param เงื่อนไขการเรียงลำดับการเรียงลำดับ null หมายถึงลำดับจากน้อยไปมาก* @return*/Public Page SystemContext.getPagesize (); // เพจเจอร์ขนาดหน้า <ผู้ใช้> pagers = เพจเจอร์ใหม่ <> (); แผนที่ <string, Object> maps = new hashmap <> (); if (name! = null &&! name.equals ("")) {name = "%"+name+"%"; maps.put ("ชื่อ", ชื่อ); } if (sort == null || sort.equals ("")) {sort = "id"; // จัดเรียงตาม id ตามค่าเริ่มต้น} ถ้า (order == null || order.equals ("")) {order = "asc"; // การเรียงลำดับเริ่มต้น} maps.put ("เรียงลำดับ" maps.put ("order", order); maps.put ("pagestart", pagestart); Maps.put ("PageSize", PageSize); SQLSession Session = SessionUtil.getSession (); รายการ <user> datas = null; ลอง {dataS = session.selectList (user.class.getName ()+". ค้นหา", แผนที่); // รับเร็กคอร์ด Pagers.setDatas (DATAS); Pagers.setPageSize (Pagesize); Pagers.SetPagestart (Pagestart); int totalRecord = session.selectone (user.class.getName ()+". findCount", แผนที่); // รับจำนวนทั้งหมดของบันทึกการบันทึก SettotalRecord (TotalRecord); Pagers.SetPageIndex (Pagestart/Pagesize+1); } ในที่สุด {SessionUtil.Closesession (เซสชัน); } หน้าคืน; - โครงสร้างโครงการปัจจุบัน
ในบทความถัดไปฉันจะเขียนพื้นฐานทั่วไปเพื่ออำนวยความสะดวกในการเขียนรหัส และเรียนรู้การใช้คุณสมบัติอื่น ๆ ของ mybatis ต่อไป ขอบคุณสำหรับการอ่าน