لقد طورت مؤخرًا مثالًا على الكتابة عن التغليف في أوقات فراغي ، ثم فرز تلك السابقة.
الفئة العامة على أساس <t> {connection conn ؛ repartStatement st ؛ resultset rs ؛ jdbcutil jdbcutil = new jdbcutil () (parameterizedType) getClass (). getGenericSuperClass () ؛ perfectClass = (class <t>) type.getActualTyPearguments () [0] ("؛ قائمة <Method> list = this.matchpojomethods (الكيان ،" get ") ؛ iterator <Tear> iter = list.iterator () ؛ object obj [] = new Object [list.size ()] ؛ int i = 0 ؛ method.getName (). substring (3) .ToLowerCase () + "،" ؛ sbf.format (method.invoke (الكيان ، كائن جديد [] {})) ؛ } آخر {obj [i] = method.invoke (الكيان ، كائن جديد [] {}) ؛ } i ++ ؛ }. SQL + = "؟" st = conn.preparestatement (sql) ؛ * delete * param object * return * @throws sqlexception */public int deleteId (كائن كائن) يلقي استثناء {string sql = "delete from" + perfectclass.getSimplename (). على سبيل المثال ، على أساس <t> ، أي ، الحصول على نوع محدد من T. intity = perfectistclass.newinstance () ؛ // كائن الأسلوب الذي يخزن المفتاح الأساسي لـ pojo (أو الجدول الذي يتم تشغيله) طريقة idmethod = null ؛ قائمة <Method> list = this.matchpojomethods (الكيان ، "set") ؛ iterator <Tepray> iter = list.iterator () ؛ // تصفية كائن الطريقة بينما (iter.hasnext ()) {method tempmethod = iter.next () ؛ if (tempmethod.getName (). indexof ("id")! = -1 && tempMethod.getName (). } آخر if ((entity.getClass (). getSimplename () + "id"). equalsIngInoreCase (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) ؛ // upply type of id if (object inteef integer) {st.SetInt (1 ، (integer) object) ؛ } آخر إذا (Object extryof string) {st.SetString (1 ، (string) object) ؛ } النتيجة = St.ExecuteUpdate () ؛ jdbcutil.getClose (RS ، ST ، Conn) ؛ return return ؛}/** * Modify * param Entity * @thrats stisply */public int update (t intity) refressed {string sql = "update" + entity.getClass (). this.matchpojomethods (الكيان ، "get") ؛ // تحميل معلمات كائن OBJ [] = كائن جديد [list.size ()] طريقة tempmethod = null ؛ // نظرًا لأن المعرف غير مطلوب لتعديله أثناء التعديل ، يجب إضافة المعلمات من أجل نقل المعرف إلى النهاية. طريقة idmethod = null ؛ iterator <Tepray> iter = list.iterator () ؛ بينما (iter.hasnext ()) {tempmethod = iter.next () ؛ // إذا كان اسم الطريقة يحتوي على سلسلة معرف وطول 2 ، فإنه يعتبر معرفًا. if (tempmethod.getName (). lastIndexof ("id")! = -1 && tempmethod.getName (). substring (3) .length () == 2) {obj [list.size () -1] = tempmethod.invoke (الكيان ، كائن جديد [] {}) ؛ // احفظ كائن حقل المعرف في متغير وحذفه في المجموعة. idmethod = tempmethod ؛ iter.remove () ؛ // إذا تمت إزالة اسم الطريقة وسلسلة set/get غير متوافقة مع pojo + "id" (الحالة غير حساسة) ، فسيتم اعتبارها معرفًا آخر إذا ((estity.getClass (). getSimplename () + "id"). 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 ، طباعة SQL Dates System.out.println (SQL) ؛ st = conn.preparestatement (SQL) ؛ لـ (int j = 0 ؛ j <obj.length ؛ j ++) {st.SetObject (j+1 ، obj [j]) ؛} النتيجة = St.executeupdate () ؛ jdbcutil.getClose (RS ، ST ، Conn) ؛ return return ؛} t findbyid (كائن كائن) يلقي الاستثناء {string sql = "select * from" + perfectclass.getSimplename (). على سبيل المثال ، على أساس <T> ، أي ، الحصول على نوع محدد من الكيان t = perfectistclass.newinstance () ؛ // كائن الأسلوب الذي يخزن المفتاح الأساسي لـ pojo (أو الجدول الذي يتم تشغيله) طريقة idmethod = null ؛ قائمة <Method> list = this.matchpojomethods (الكيان ، "set") ؛ iterator <Tepray> iter = list.iterator () ؛ // تصفية كائن الطريقة بينما (iter.hasnext ()) {method tempmethod = iter.next () ؛ if (tempmethod.getName (). indexof ("id")! = -1 && tempMethod.getName (). } آخر if ((entity.getClass (). getSimplename () + "id"). equalsIngInoreCase (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) ؛ // upply type of id if (object inteef integer) {st.SetInt (1 ، (integer) object) ؛ } آخر إذا (Object extryof string) {st.SetString (1 ، (string) object) ؛ } rs = st.executequery () ؛ // أوجه المؤشر إلى السطر الأول من iterator iter = list.iterator () ؛ // مغلف بينما (rs.next ()) {بينما (iter.hasNext ()) {method method = iter.next () ؛ if (method.getParameterTypes () [0] .getSimplename (). indexof ("string")! = -1) {// لأنه في مجموعة القائمة ، يكون ترتيب كائن الطريقة المراد استرداده غير متسق مع ترتيب حقل قاعدة البيانات (على سبيل المثال: الطريقة الأولى من القائمة هي setDate ، وتأخذ قاعدة البيانات "123". this.SetString (الطريقة ، الكيان ، Rs.GetString (method.getName (). substring (3) .ToLowerCase ())) ؛ } if if (method.getParameterTypes () [0] .getSimplename (). indexof ("Date")! = -1) {this.setDate (method ، untity ، rs.getDate (method.getName (). substring (3) .tolowercase ())) ؛ } آخر {this.setint (الطريقة ، الكيان ، rs.getInt (method.getName (). substring (3) .ToLowerCase ())) ؛ }}} jdbcutil.getClose (rs ، st ، conn) ؛ إرجاع كيان ؛}/*** تصفية جميع كائنات الطريقة مع السلاسل الواردة في فئة POJO الحالية وإرجاع مجموعة القائمة. */قائمة خاصة <Method> MatchPoJomethods (T intity ، String MethodName) {// الحصول على جميع طريقة كائنات طريقة pojo الحالية [] طرق = entity.getClass (). getDeclaredMethods () ؛ // قائمة الحاوية تخزن جميع كائنات الأسلوب مع الحصول على قائمة السلسلة <Method> list = new ArrayList <Method> () ؛ // تصفية جميع كائنات الأسلوب مع الحصول على سلاسل في فئة pojo الحالية وتخزينها في حاوية القائمة (int index = 0 ؛ index <methods.length ؛ index ++) {if (methods [index] .getName (). indexof (methodName)! = -1) {list.add (methods [index]) ؛ }} قائمة الإرجاع ؛ } / ** * عندما يكون نوع المعلمة عبارة عن سلسلة ، قم بتعيين المعلمات لحقل الكيان ، المقابل ل Set * / public String SetString (طريقة الطريقة ، الكيان ، السلسلة ARG) يلقي الاستثناء {return (سلسلة) method.invoke (الكيان ، كائن جديد [] {arg}) ؛ } / ** * عندما يكون نوع المعلمة هو التاريخ ، قم بتعيين المعلمات لحقل الكيان ، المقابل للمعيين * / تاريخ الموعد العام (طريقة الطريقة ، الكيان ، تاريخ ARG) يرمي الاستثناء {return (date) method.invoke (الكيان ، كائن جديد [] {arg}) ؛ } / ** * عندما يكون نوع المعلمة صحيحًا أو int ، قم بتعيين المعلمات لحقل الكيان ، المقابل للمعرفة * / public integer setInt (طريقة الطريقة ، الكيان ، integer arg) يلقي الاستثناء {return (integer) method.invoke (الكيان ، كائن جديد [] {arg}) ؛ }}المقالة أعلاه على أساس الكود (رمز المثال) المغطاة بواسطة JDBC هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.