เมื่อเร็ว ๆ นี้ฉันได้พัฒนาตัวอย่างของการเขียนเกี่ยวกับบรรจุภัณฑ์ในเวลาว่างจากนั้นจัดเรียงอันก่อนหน้านี้
คลาสสาธารณะที่ใช้ <t> {Connection conn; PreparedStatement st; Resultetet rs; jdbcutil jdbcutil = ใหม่ jdbcutil (); int result = 0; คลาสส่วนตัว <t> persistentClass; @suppresswarnings ("unchecked") (parameterizedType) getClass (). getGenericsuperClass (); persistentClass = (คลาส <t>) type.getActualTuterguments () [0];} /** * บันทึก * @param เอนทิตี * @return * /public int entity.getClass (). getSimplename (). toLowerCase () +"("; รายการ <method> list = this.matchpojomethods (เอนทิตี "รับ"); iterator <เมธอด> iter = list.iterator (); object obj [] ในขณะที่ (iter.hasnext ()) {วิธีการ = iter.next (); HH: MM: SS "); obj [i] = sbf.format (method.invoke (เอนทิตี, วัตถุใหม่ [] {})); } else {obj [i] = method.invoke (เอนทิตี, วัตถุใหม่ [] {}); } i ++; } // ลบอันสุดท้าย, สัญลักษณ์แทรกแทรกลงในชื่อตาราง (id, ชื่อ, อีเมล) ค่า (sql = sql.substring (0, sql.lastindexof (","))+") ค่า ("; // ประกอบ j = int) {SQL + = "?,"; ลอง {st = conn.prepareStatement (SQL); ผลลัพธ์;}/** * ลบ * @param Object * @return * @throws sqlexception */public int deleteId (วัตถุวัตถุ) โยนข้อยกเว้น {string sql = "ลบออกจาก" + persistentClass.getSimplename () toLowerCase () + "; ตัวอย่างเช่นพื้นฐาน <t> นั่นคือรับประเภทเฉพาะของ t. entity = persistentClass.newInstance (); // วัตถุวิธีการที่เก็บคีย์หลักของ pojo (หรือตารางที่ดำเนินการ) เมธอด idmethod = null; รายการ <method> list = this.matchpojomethods (เอนทิตี, "set"); Iterator <method> iter = list.iterator (); // กรองวัตถุเมธอดในขณะที่ (iter.hasnext ()) {วิธีการ tempmethod = iter.next (); if (tempmethod.getName (). indexof ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {idmethod = tempMethod; } อื่นถ้า ((entity.getClass (). getSimplename () + "id"). equalsignorecase (tempmethod.getName (). substring (3))) {idmethod = tempMethod; }} // ตัวอักษรตัวแรกถูกแปลงเป็นตัวพิมพ์เล็ก sql += idmethod.getName (). substring (3,4) .toLowerCase () +idMethod.getName (). substring (4) +"=?"; System.out.println (SQL); st = conn.preparestatement (SQL); // ตัดสินประเภทของ ID ถ้า (วัตถุอินสแตนซ์ของจำนวนเต็ม) {st.setint (1, (จำนวนเต็ม) วัตถุ); } else if (object instance string) {st.SetString (1, (สตริง) วัตถุ); } result = stexecuteUpdate (); jdbcutil.getClose (rs, st, conn); return result;}/** * แก้ไข * @param Entity * @return * @throws Exception */การอัปเดตสาธารณะ = this.matchpojomethods (เอนทิตี, "รับ"); // การโหลดพารามิเตอร์วัตถุ obj [] = วัตถุใหม่ [list.size ()]; int i = 0; // วัตถุวิธีการชั่วคราวซึ่งรับผิดชอบในการทำซ้ำวัตถุวิธีแฟชั่น วิธีการ tempMethod = null; // เนื่องจากไม่จำเป็นต้องแก้ไข ID ระหว่างการแก้ไขการเพิ่มพารามิเตอร์ตามลำดับควรย้าย ID ไปยังจุดสิ้นสุด วิธี idmethod = null; Iterator <method> iter = list.iterator (); ในขณะที่ (iter.hasnext ()) {tempMethod = iter.next (); // ถ้าชื่อเมธอดมีสตริง ID และความยาวคือ 2 ถือว่าเป็น ID if (tempmethod.getName (). lastIndexof ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {obj [list.size () -1] = tempmethod.invoke // บันทึกวัตถุของฟิลด์ ID ลงในตัวแปรและลบออกในชุด idMethod = tempMethod; iter.remove (); // ถ้าชื่อวิธีการถูกลบออกและสตริงชุด/รับเข้ากันไม่ได้กับ pojo + "id" (กรณีที่ไม่รู้สึก) มันถือว่าเป็น id} อื่นถ้า ((entity.getClass (). getSimplename () + "id"). equalsignorecase (tempmethod.getName () tempmethod.invoke (เอนทิตี, วัตถุใหม่ [] {}); idMethod = tempMethod; iter.remove (); }} // ย้ายตัวชี้วนซ้ำไปยังตำแหน่งแรก iter = list.iterator (); ในขณะที่ (iter.hasnext ()) {tempMethod = iter.next (); sql + = tempmethod.getName (). substring (3) .toLowerCase () + "=?,"; obj [i] = tempmethod.invoke (เอนทิตี, วัตถุใหม่ [] {}); i ++; } // ลบอันสุดท้ายสัญลักษณ์ sql = sql.substring (0, sql.lastindexof (",")); // เพิ่มเงื่อนไข sql + = "โดยที่" + idmethod.getName (). substring (3) .toLowerCase () + "=?"; // sql splicing เสร็จสมบูรณ์, พิมพ์คำสั่ง SQL System.out.println (SQL); st = conn.prepareStatement (SQL); สำหรับ (int j = 0; j <obj.length; j ++) {st.setObject (j+1, obj [j]);} ผลลัพธ์ = stexecuteUpdate (); jdbcutil.getClose (RS, ST, Conn); ผลการส่งคืน;} สาธารณะ t findById (วัตถุวัตถุ) พ่นข้อยกเว้น {String SQL = "SELECT * จาก" + PersistentClass.getSimplename (). TOLOWERCASE () + "โดยที่"; // ใช้ตัวสร้างของคลาสย่อยเพื่อให้ได้ประเภทเฉพาะของพารามิเตอร์ ตัวอย่างเช่นพื้นฐาน <t> นั่นคือรับประเภทเฉพาะของ t entity = persistentClass.newInstance (); // วัตถุวิธีการที่เก็บคีย์หลักของ pojo (หรือตารางที่ดำเนินการ) เมธอด idmethod = null; รายการ <method> list = this.matchpojomethods (เอนทิตี, "set"); Iterator <method> iter = list.iterator (); // กรองวัตถุเมธอดในขณะที่ (iter.hasnext ()) {วิธีการ tempmethod = iter.next (); if (tempmethod.getName (). indexof ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {idmethod = tempMethod; } อื่นถ้า ((entity.getClass (). getSimplename () + "id"). equalsignorecase (tempmethod.getName (). substring (3))) {idmethod = tempMethod; }} // ตัวอักษรตัวแรกถูกแปลงเป็นตัวพิมพ์เล็ก sql += idmethod.getName (). substring (3,4) .toLowerCase () +idMethod.getName (). substring (4) +"=?"; System.out.println (SQL); st = conn.preparestatement (SQL); // ตัดสินประเภทของ ID ถ้า (วัตถุอินสแตนซ์ของจำนวนเต็ม) {st.setint (1, (จำนวนเต็ม) วัตถุ); } else if (object instance string) {st.SetString (1, (สตริง) วัตถุ); } rs = stexecuteQuery (); // ชี้ตัวชี้ไปที่บรรทัดแรกของตัววนซ้ำ iter = list.iterator (); // encapsulate ในขณะที่ (rs.next ()) {ในขณะที่ (iter.hasnext ()) {method method = iter.next (); if (method.getParameterTypes () [0] .getSimplename (). indexof ("string")! = -1) {// เพราะในชุดรายการลำดับของวัตถุวิธีการที่จะดึงข้อมูลไม่สอดคล้องกับลำดับของฐานข้อมูล this.setstring (วิธีการ, เอนทิตี, rs.getString (method.getName (). substring (3) .ToLowerCase ())); } อื่นถ้า (method.getParameterTypes () [0] .getSimplename (). indexof ("วันที่")! = -1) {this.setDate (วิธีการ, เอนทิตี, rs.getDate (method.getName (). substring (3). } else {this.setint (วิธีการ, เอนทิตี, rs.getInt (method.getName (). substring (3) .toLowerCase ())); }}} jdbcutil.getClose (rs, st, conn); return entity;}/*** กรองวัตถุวิธีการทั้งหมดที่มีสตริงขาเข้าในคลาส POJO ปัจจุบันและส่งคืนรายการรายการ */รายการส่วนตัว <method> matchpojomethods (t entity, string methodname) {// รับเมธอดวิธีการ POJO เมธอดปัจจุบันทั้งหมด [] เมธอด = entity.getClass (). getDeclaredMethods (); // รายการคอนเทนเนอร์จัดเก็บวัตถุวิธีการทั้งหมดด้วย Get String List <เมธอด> list = new ArrayList <Mething> (); // กรองวัตถุวิธีการทั้งหมดที่มีสตริง Get ในคลาส POJO ปัจจุบันและจัดเก็บไว้ในรายการคอนเทนเนอร์สำหรับ (int index = 0; index <methods.length; index ++) {ถ้า (วิธี [index] .getName (). indexof (methodName)! = -1) {list.add }} รายการส่งคืน; } / ** * เมื่อประเภทพารามิเตอร์คือสตริงให้ตั้งค่าพารามิเตอร์สำหรับฟิลด์เอนทิตีซึ่งสอดคล้องกับการตั้งค่า * / สตริงสาธารณะ setstring (วิธีการ, เอนทิตี t, สตริง arg) โยนข้อยกเว้น {return (string) method.invoke (เอนทิตี, วัตถุใหม่ [] {arg}); } / ** * เมื่อประเภทพารามิเตอร์คือวันที่ให้ตั้งค่าพารามิเตอร์สำหรับฟิลด์เอนทิตีซึ่งสอดคล้องกับการตั้งค่า * / วันที่สาธารณะ setDate (วิธีการ, t เอนทิตี, วันที่ arg) โยนข้อยกเว้น {return (วันที่) เมธอด. } / ** * เมื่อประเภทพารามิเตอร์เป็นจำนวนเต็มหรือ int ให้ตั้งค่าพารามิเตอร์สำหรับฟิลด์เอนทิตีซึ่งสอดคล้องกับชุด * / public integer setint (วิธีการ, เอนทิตี t, integer arg) โยนข้อยกเว้น {return (จำนวนเต็ม) method.invoke (เอนทิตี, วัตถุใหม่ [] {arg}); -บทความข้างต้นที่ใช้ (รหัสตัวอย่าง) ที่ห่อหุ้มโดย JDBC เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น