สถานการณ์ความต้องการ: เมื่อข้อมูลบางส่วนที่บันทึกไว้ในฐานข้อมูลจำเป็นต้องเข้ารหัสและต้องแสดงหน้าเว็บตามปกติ สิ่งนี้ต้องการให้เราปรับแต่งตัวแปลงประเภท เมื่อ MyBatis ดำเนินการ SQL เพื่อรับผลลัพธ์ถ่านหรือ VARCHAR2 จะถูกเข้ารหัสและถอดรหัสผ่านตัวแปลงประเภทที่กำหนดเอง รหัส Java มีดังนี้:
/** custom typehandler <br/> * 1 แทรกฐานข้อมูล, เข้ารหัส * 2 แบบสอบถาม, decrypt * @author administrator * */คลาสสาธารณะ crypttypehandler ใช้ typeHandler <crypttype> {public crypttype getResult CryptType V = ใหม่ cryptType (ค่า); value = rs.getString (ชื่อคอลัมน์); if (value! = null) {value = decrypt (value.toString ()); V.SetValue (ค่า); } return v; } สาธารณะ cryptType getResult (Resultset RS, int columnIndex) พ่น sqlexception {ค่าสตริง = ""; CryptType V = ใหม่ cryptType (ค่า); value = rs.getString (columnindex); if (value! = null) {v.setValue (ค่า); } return v; } สาธารณะ crypttype getResult (callablestatement cs, int columnindex) พ่น sqlexception {ค่าสตริง = ""; CryptType V = new CryptType (); value = cs.getString (columnindex); if (value! = null) {v.setValue (ค่า); } return v; } โมฆะสาธารณะ setParameter (PreparedStatement PS, int i, พารามิเตอร์ cryptType, jdbctype arg3) พ่น sqlexception {ค่าสตริง = ""; if (พารามิเตอร์! = null && parameter.toString ()! = null) {value = encrypt (parameter.toString ()); } ps.setstring (i, value.toString ()); } / ** แทรกฐานข้อมูล*@param ค่า*@return* / การเข้ารหัสสตริงส่วนตัว (ค่าสตริง) {value = cryptutils.encrypt (ค่า); ค่าส่งคืน; } / ** อ่านจากฐานข้อมูล* @param value* @return* / Decrypt สตริงส่วนตัว (ค่าสตริง) {value = cryptutils.decrypt (ค่า); ค่าส่งคืน; -ประเภทที่กำหนดเอง
นำเข้า java.io.serializable; / ** * ประเภทที่กำหนดเอง * แอตทริบิวต์เอนทิตีที่กำหนดเป็นประเภทนี้จะถูกเข้ารหัสและถอดรหัสโดย crypttypehandler.java * * @author yy * */ คลาสสาธารณะ mystring ใช้ serializable, charsequence, เทียบเท่า <string> {ส่วนตัวคงที่ ค่าสตริงส่วนตัว สาธารณะ mystring () {} cryptType สาธารณะ (ค่าสตริง) {this.value = value; } สตริงสาธารณะ getValue () {ค่าคืน; } โมฆะสาธารณะ setValue (ค่าสตริง) {this.value = value; } public int compereto (String arg0) {// todo วิธีการที่สร้างอัตโนมัติ stub return 0; } ถ่านสาธารณะ Charat (int arg0) {// todo วิธีการที่สร้างอัตโนมัติ stub return 0; } ความยาว int สาธารณะ () {// todo วิธีการที่สร้างอัตโนมัติ stub return 0; } ต่อมา charsequence สาธารณะ (int arg0, int arg1) {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub return null; } @Override สตริงสาธารณะ toString () {ค่าส่งคืน; -การกำหนดค่าประเภทที่กำหนดเอง MyBatis
<!-ประเภทที่กำหนดเอง-> <typeHandlers> <typeHandler javatype = "com. ***. mystring" handler = "com. ***. mytypehandler"/> </ypehandlers>
ใช้ในหน่วยงาน
Public Class Loanenterprise {ชื่อส่วนตัว mystring; // หมายเหตุ: // หากหน้ามีเงื่อนไขการสืบค้นและยังเข้ารหัสด้วยการตัดสินตามเงื่อนไขใน MyBatis SQL จะไม่ตรงกัน วิธีแก้ปัญหาชั่วคราวคือการใช้ crypttype สาธารณะ getName () {ถ้า (ชื่อ! = null && name.getValue (). เท่ากับ ("")) {return null; } else {return name; }} โมฆะสาธารณะ setName (ชื่อ cryptType) {this.name = name; -ด้านบนเป็นตัวแปลงประเภท MyBatis Custom ที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!