MyBatis เป็นกรอบการคงอยู่ของเลเยอร์ที่รองรับการสืบค้น SQL ทั่วไปขั้นตอนที่เก็บไว้และการทำแผนที่ขั้นสูง
MyBatis กำจัดการตั้งค่าด้วยตนเองของรหัส JDBC เกือบทั้งหมดและพารามิเตอร์และการค้นหาการห่อหุ้มของชุดผลลัพธ์
MyBatis สามารถใช้ XML อย่างง่ายหรือคำอธิบายประกอบสำหรับการกำหนดค่าและการแมปดั้งเดิมการแมปอินเทอร์เฟซและ Pojo ของ Java (วัตถุ Java เก่าธรรมดา) ลงในบันทึกในฐานข้อมูล
แอปพลิเคชัน MyBatis แต่ละตัวใช้อินสแตนซ์ของวัตถุ SQLSessionFactory เป็นแกนกลาง
ตัวอย่างของวัตถุ SQLSessionFactory สามารถรับได้ผ่านวัตถุ SQLSessionFactoryBuilder วัตถุ SQLSessionFactoryBuilder สามารถสร้างได้ผ่านไฟล์การกำหนดค่า XML หรือจากอินสแตนซ์คลาสการกำหนดค่าที่เตรียมไว้ในการจัดการการใช้งานก่อนหน้านี้
DataSource DataSource = BlogDataSourceFactory.getBlogDataSource (); TransactionFactory TransactionFactory = ใหม่ JDBCTransactionFactory (); // สภาพแวดล้อมสภาพแวดล้อม = สภาพแวดล้อมใหม่ ("การพัฒนา", TransactionFactory, DataSource) การกำหนดค่าการกำหนดค่า = การกำหนดค่าใหม่ SQLSessionFactory = ใหม่ SQLSessionFactoryBuilder (). build (การกำหนดค่า);โปรดทราบว่าในกรณีนี้การกำหนดค่าคือการเพิ่มคลาส Mapper คลาส Mapper เป็นคลาส Java ซึ่งมีคำอธิบายประกอบของคำสั่งการแมป SQL เพื่อหลีกเลี่ยงการพึ่งพาในไฟล์ XML แต่การแมป XML ยังคงต้องใช้ในการแมปขั้นสูงที่สุด (เช่นการแมปเข้าร่วมซ้อนกัน)
ด้วยเหตุผลนี้หากมีไฟล์การกำหนดค่า XML MyBatis จะค้นหาและโหลดไฟล์ XML เพียร์โดยอัตโนมัติ (ในกรณีนี้ขึ้นอยู่กับชื่อคลาสของ BlogMapper.class คลาสภายใต้เส้นทางของคลาสแล้ว BlogMapper.xml จะโหลดด้วยตนเอง
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd <!-มันสามารถแก้ปัญหาที่ชื่อคุณสมบัติโมเดลไม่สอดคล้องกับชื่อคอลัมน์ในตารางข้อมูล jdbctype ต้องเป็นตัวพิมพ์ใหญ่-> <resultmap type = "user" id = "usermap"> <id property = "id" คอลัมน์ = "id" javatype = "int" jdbcType jdBcType = "varchar"/> <property result = "age" คอลัมน์ = "อายุ" javatype = "int" jdbctype = "จำนวนเต็ม"/> </resultmap> <!- หมายเหตุผลลัพธ์ที่นี่ ถ้าคอลัมน์ == คุณสมบัติคุณสามารถส่งคืนวัตถุ Java โดยตรง หากชื่อแอตทริบิวต์ไม่สอดคล้องกับชื่อคอลัมน์โซลูชันจะมีดังนี้: 1. ใช้ resultmap; 2. กลับ Hashmap; 3. ใช้นามแฝงสำหรับคำสั่ง Query-> <select id = "getUser" parameterType = "int" resultmap = "usermap"> เลือก * จาก t_user โดยที่ id =#{id} </select> <delete id = "deleteuser" update} parameterType = "ผู้ใช้"> อัปเดต t_user set username =#{ชื่อ}, อายุ =#{อายุ} โดยที่ id =#{id} </update> <แทรก id = "insertuser" parameterType = "ผู้ใช้"> insert ลงใน t_user (username, อายุ) คอลัมน์ (ชื่อผู้ใช้) ดังนั้นผลลัพธ์จึงใช้ USERMAP -> <SELECT id = "getUsers" resultMap = "USERMAP"> เลือก * จาก t_user </select> </mapper> ลงทะเบียนไปยัง mybatis.xml [เมื่อรวมกับสปริงไฟล์กำหนดค่านี้จะไม่จำเป็น]
ไฟล์กำหนดค่า MyBatis
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! การกำหนดค่า doctype สาธารณะ "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd กำหนดค่านามแฝงคลาสเอนทิตี-> <typealiases> <!-<typealias type = "com.web.model.user" alias = "ผู้ใช้"/>-> <package name = "com.web.model"/> </typealiases> <! <dataSource type = "pooled"> <property name = "driver" value = "$ {driver}" /> <property name = "url" value = "$ {url}" /> <property name = "username" value = "$ {username}" Resource = "com/web/mapper/usermapper.xml"/> <mapper resource = "com/web/mapper/ordermapper.xml"/> <mapper/> </mappers> </การกำหนดค่า>ที่นี่เราใช้ไฟล์ XML เพื่อรับ SQLSessionFactory และ SQLSession
สาธารณะ sqlsessionfactory getFactory () {/*flow src dir*/string resource = "mybatis.xml";/*mybatisutils.class.getResourceasstream (ทรัพยากร) ---- มันผิด !!! * โปรดแยกความแตกต่างทั้งสองขึ้นและลง * */inputstream inputstream = mybatisutils.class.getClassloader (). getResourceasstream (ทรัพยากร); SQLSessionFactory Factory = SQLSessionFactoryBuilder () 1. factory.opensession (จริง); 2.Session.Commit (); - /*ใช้ SQL XML ไม่ใช่คำอธิบายประกอบ*/@ทดสอบโมฆะสาธารณะ testadd () {sqlsession session = mybatisutils.getFactory (). opensession (); คำสั่งสตริง = "com.web.mapper.usermapper.insertuser";/*ส่งคืนเอฟเฟกต์ commit*/session.Commit (true); session.close (); system.out.println ("แถวเอฟเฟกต์ .. "+แทรก);}@ทดสอบโมฆะสาธารณะ testSelect () {/*ตั้งค่าอัตโนมัติซึ่งเท่ากับด้านบน*/sqlsession session = myBatisutils.getFactory () "com.web.mapper.usermapper.getUser";/*ส่งคืนแถวเอฟเฟกต์*/ผู้ใช้ผู้ใช้ = session.selectone (คำสั่ง, 3); system.out.println ("แถวเอฟเฟกต์ .. "+ผู้ใช้);}@ทดสอบโมฆะสาธารณะ "com.web.mapper.usermapper.updateUser";/*ส่งคืนแถวเอฟเฟกต์*/int update = session.update (คำสั่งผู้ใช้ใหม่ (3, "tom4", 13)); system.out.println ("เอฟเฟกต์แถว" = "com.web.mapper.usermapper.deleteuser";/*ส่งคืนแถวเอฟเฟกต์*/int delete = session.delete (คำสั่ง, 6);/*กระทำด้วยตัวเอง*/เซสชัน. commit (); system.out.println ("เอฟเฟกต์ MyBatisutils.getFactory (). opensession (); string statement = "com.web.mapper.usermapper.getUsers";/*ส่งคืนรายการ <user>*/รายการ <user> users = session.sextlist (คำสั่ง); session.commit (); system.out.println (ParameterType และ ResultType คือ HASHMAP:
<select id = "getUserFormap" parameterType = "hashmap" resultType = "hashmap"> เลือก * จาก c_user โดยที่ id =#{id}; </เลือก> @Test โมฆะสาธารณะ getUserFormap () {SQLSESSION SESSION = MYBATISUTILS.GETFACTORY (). OPENSESSION (); คำสั่งสตริง = "com.web.mapper.usermapper.getUserFormap"; hashmap <string, object> map = new hashmap <string, object> () session.selectone (คำสั่ง, แผนที่);/*ค่าเริ่มต้นไม่ใช่ Auto PISTIC*/SESSION.COMMIT (จริง); Session.close (); System.out.println ("แถวเอฟเฟกต์ .. "+selectone+", คลาส:" selectone.getClass ());}; แถวเอฟเฟกต์ .. {id = 1, อายุ = 12, ชื่อ = luli}, คลาส: คลาส java.util.hashmapโดยสรุปจะเห็นได้ว่า mybatis จะแยกวิเคราะห์และห่อหุ้มโดยอัตโนมัติตามประเภทพารามิเตอร์และประเภทผลลัพธ์
<select id = "getListPage" parameterType = "hashmap" resultmap = "siteextendDaomap"> เลือก id, site_id, site_name, site_number, จังหวัด, เมือง, พื้นที่, ที่อยู่, ภายใน _number, ลองจิจูด, ละติจูด test = "checkState! = null และ checkState! = ''"> และ check_state = #{checkState, jdbcType = จำนวนเต็ม} </ถ้า> <ถ้าทดสอบ = "siteid! = null และ siteid! sitename! = '' "> และ site_name ชอบ concat ('%', #{sitename}, '%') </ถ้า> <ถ้า test =" sitenumber! = null และ sitenumber! = '' '> และ site_number ชอบ concat ('%', #{sitenumber},'%') concat ('%', #{sitenumber}, '%') </ถ้า> <ถ้า test = "จังหวัด! = null และจังหวัด! = '' '> และจังหวัด = #{จังหวัด} </ถ้า> <ถ้าทดสอบ =" เมือง! </if> </trim>-จัดเรียง <ถ้า test = "sortName! = null และ sortName! = '' และ SortOrder! = null และ sortorder! = null และ sortorder! = ''"> สั่งซื้อโดย $ {sortName} $ {SortOrder} </if>หากพารามิเตอร์คือ Pojo, mybatis จะได้รับ ID จากวัตถุโดยอัตโนมัติ
<delete id = "delete" parameterType = "ผู้ใช้"> ลบจาก tb_user โดยที่ id = #{id} </ลบ> <ลบ id = "deleteById" parameterType = "ยาว"> ลบจาก tb_user โดยที่ id = #{id} <delete id = "deleteByIds"> ลบออกจาก tb_user โดยที่ id ใน -ใช้ foreach <foreach collection = "list" item = "id" open = "(" separator = "," close = ")"> #{id} </foreach> </delete>มักจะใช้ร่วมกับ getListPage
<select id = "getRows" parameterType = "hashmap" resultType = "ยาว"> เลือกนับ (*) จาก tb_sys_role <ถ้า test = "keysylole! = null"> <trim prefix = "prefixoverrides =" </if> <ถ้า test = "keysyrole.name! = null และ keysyrole.name! = ''"> และ name = #{keysyrole.name} </ถ้า> <test = "keysyrole.available! </ถ้า> </select>ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับ mybatis โดยใช้ XML สำหรับการวิเคราะห์รหัส ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!