مقدمة إلى Ibatis:
Ibatis هو مشروع مفتوح المصدر من Apache وحل رسم الخرائط O/R. أكبر ميزة في Ibatis هي أنها مضغوطة وسريعة للبدء. إذا لم تكن بحاجة إلى الكثير من الوظائف المعقدة ، فإن Ibatis هو أبسط الحلول التي يمكن أن تلبي متطلباتك وتكون مرنة بدرجة كافية. الآن تم إعادة تسمية Ibatis MyBatis.
الموقع الرسمي هو: http://www.mybatis.org/
1. معلمة الإدخال هي قيمة واحدة
<delete id = "com.fashionfree.stat.accesslog.deletmembicAcsLogSbefore" parameterclass = "long" readlet AccessTimestamp = # value # </redent>
2. معلمة الإدخال هي كائن
<insert id = "com.fashionfree.stat.accesslog.memberaccesslog.insert" parameterclass = "com.fashionfree.stat.accesslog.model.memberAccessLog> insert in memberAccessLog (Accesslogid ، memberip ، httpmethod ، actionid ، requesturl ، extred1 ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، تمديده ، #AccessLogid #، #memberid #، #clientip #، #httpmethod #، #actionId #، #requesturl #، #accesstimestamp #، #exted1 #، #extend2 #، #extend3 #) </insert> <insert id = "com.fashionfree.stat.accesslog.memberaccesslog.insert" parameterclass = "com.fashionfree.stat.accesslog.model.memberAccessLog> insert في memberAccessLog (AccessLogid ، MemberId ، clientip ، httpmethod ، actionId ، requesturl ، accessTimestamp ، exted1 ، extend3) القيم ( #Accesslogid #، #medmentid #، #requesturl #، #AccessTimestamp #، #Extend1 #، #Extend2 #، #Extend3 #) </sert>
3. معلمة الإدخال هي java.util.hashmap
<select id = "com.fashionfree.stat.accesslog.selectactionIdandActionNumber" parameterclass = "hashmap" resultmap = "getActionIdandActionNumber"> حدد ActionId ، count (*) كحساب من العضوية antementiD interid = # memberid # و AccessTimeStamp> # start # و count id = "com.fashionfree.stat.accesslog.selectactionIdandActionNumber" parameterclass = "hashmap" resultmap = "getActionIdandActionNumber"
4. تحتوي معلمات الإدخال على صفائف
<insert id = "updatestatusbatch" parameterclass = "hashmap"> تحديث مجموعة أسئلة set status = # status # <dynamic prepend = "where QuestionId in"> <isnotnull property = "actionids"> <Iterate property = "actionids" open = "" close = ") <insert id = "updatestatusbatch" parameterclass = "hashmap"> تحديث مجموعة أسئلة set status = # status # <dynamic prepend = "where QuestionId in"> <isnotnull property = "actionids"> <Iterate property = "actionids" open = "" close = ")
الوصف: Actionids هو اسم الصفيف الذي تم تمريره ؛ استخدم علامة ديناميكية لتجنب أخطاء بناء جملة SQL عندما تكون الصفيف فارغة ؛ استخدم علامة isnotnull لتجنب أخطاء تحليل Ibatis عندما تكون الصفيف لاغية
5. معلمات المرور تحتوي على صفيف واحد فقط
<select id = "com.fashionfree.stat.accesslog.model.StatMemberAction.SelectActionIdsOfModule" resultclass = "hashmap"> select moduleId ، actionId من statmemberAction <dynamic prepend = "where moduleId in"> <Iderate Open = "(" elut = ") </select> <select id = "com.fashionfree.stat.accesslog.model.StatMemberAction.SelectactionOctionIdsOfModule" resultclass = "hashmap"> select moduleId ، actionId من statmemberAction </redymic prepend = "where moduleId in"> terate open = " moduleId </select>ملاحظة: لاحظ أنه لا يوجد عنصر parameterclass في علامة تحديد
أيضًا: يمكنك أيضًا وضع الصفيف في hashmap هنا ، لكنه يضيف نقاطًا إضافية ولا ينصح باستخدامه.
6. دع ibatis تحليل المعلمات مباشرة في السلاسل
<select id = "com.fashionfree.stat.accesslog.SelectSumDistInctCountOfAccessMemberNum" parameterclass = "hashmap" resultclass = "int" id = "com.fashionfree.stat.accesslog.SelectSumDistinctCountOfAccessMemberNum" parameterclass = "hashmap" resultclass = "int"
ملاحظة: هناك خطر من حقن SQL عند استخدام هذه الطريقة ، ولا ينصح باستخدامه.
7. Pagedquery
<select id = "com.fashionfree.stat.accesslog.SelectMemberAccessLogby" parameterclass = "hashmap" resultmap = "memberAccessLogMap"> <refid = "selectallsql"/> <refid = "wheresql"/> <refid = "pageql" id = "com.fashionfree.stat.accesslog.SelectMemberAccessLogby.count" parameterclass = "hashmap" resultclass = "int"> <refid = "countsql"/> <refid = "wheresql"/> </select> <sql id = "selectallsql" requesturl ، AccessIttimestamp ، exted1 ، extend2 ، exted3 من memberAccessLog </sql> <sql id = "wheresql"> AccessTimestamp <= # accesstimestamp # </sql> <sql id = "counttsql"> تحديد COUNT (*) من memberAccessLog </sql> <sql> </sql> <sql id = "wheresql"> AccessIttimestamp <= # accessTimestamp # </sql> <sql id = "countsql"> تحديد العد (*) من عدادات العضوية </sql> <sql id = "pagesql" # startIndex # ، # pagesize # </isnotnull> </isnotnull> </mynamic> </sql> <select id = "com.fashionfree.stat.accesslog.selectMemberAccesslogby" parameterclass = "hashmap" resultmap = "memberAccesslogmap" refid = "wheresql"/> <refid = "pagesql"/> </select> <select id = "com.fashionfree.stat.accesslog.selectMemberAccessLogby.count ID = "SelectAllSql"> حدد AccessLogid ، MemberId ، Clientip ، httpmethod ، ActionId ، requesturl ، AccessIttimestamp ، Extend1 ، Extend3 ، extens3 من memberAccessLog </sql> <sql id = "wheresql"> AccessIttimeStamp < # accessTimeStamp #/sql> </sql> <sql id = "pagesql"> <Daminic> <isNotnull property = "startIndex"> <isnotnull property = "pagesize"
ملاحظة: في هذا المثال ، يجب أن يكون الرمز:
hashmap hashmap = new hashmap () ؛ hashmap.put ("AccessTimestamp" ، SomeValue) ؛ Pagedquery ("com.fashionfree.stat.accesslog.SelectMemberAccessLogby" ، HashMap) ؛تبحث طريقة pagedquery أولاً عن بيان تم تعيينه اسمه com.fashionfree.stat.accesslog.selectmemberAccessLogby.count لأداء استعلام SQL ، وبالتالي الحصول على عدد من سجلات com.fashionfree.stat.accesslog.selectmemberaccesslogby ، ثم تنفيذ المسح القطر المطلوب SQL SQL (com.fashionfree.stat.accesslog.SelectMemberAccessLogby). للعملية المحددة ، يرجى الرجوع إلى الكود ذي الصلة في فئة UTILS.
8. يحتوي عبارة SQL على أكبر من العلامة> وأقل من العلامة <1. اكتب أكبر من العلامة وأقل من علامة:> <على سبيل المثال:
<delete id = "com.fashionfree.stat.AccessLog.DeletMemberAccessLogSbefore" parameterClass = "long" redlete from memberAccessLog حيث AccessIttimestamp <= # value # </delete> xml code <delete id = MemberAccessLog حيث AccessTimestamp <= # value # </delete>
ضع شخصيات خاصة في منطقة CDATA في XML:
<delete id = "com.fashionfree.stat.AccessLog.DeletMembicAcsLogSbefore" parameterclass = "long"> <! <!
يوصى باستخدام الطريقة الأولى ، اكتبها على أنها <و> (لا تقوم XML بتحليل المحتوى في CDATA ، لذلك إذا كانت CDATA تحتوي على علامات ديناميكية ، فلن تعمل)
9. تضمين وعلامات SQL تنظم عبارات SQL المشتركة معًا لمشاركة سهولة:
<sql id = "selectbasicsql"> حدد samplingtimestamp ، onlinenum ، السنة ، الشهر ، الأسبوع ، اليوم ، ساعة من onlinemmednum </sql> <sql id = "wheresqlbefore id = "com.fashionFree.AccessLog.SelectOnlineMemberNumSbeforesAmplingTimestamp" parameterclass = "hashmap" resultclass = "onlinemmednum"> <refid = "selectbasicsql" /> samplingTimestamp,onlineNum,year, month,week,day,hour from OnlineMemberNum </sql> <sql id="whereSqlBefore"> where samplingTimestamp <= #samplingTimestamp# </sql> <select id="com.fashionfree.accesslog.selectOnlineMemberNumsBeforeSamplingTimestamp" parameterclass = "hashmap" resultclass = "onlinemmednum"> <refid = "selectBasicsQl" /> <refid = "wheresqlbefore" /> </select>
ملاحظة: لا يمكن استخدام علامات SQL إلا للرجوع إليها ولا يمكن اعتبارها عبارات تم تعيينها. كما في المثال أعلاه ، هناك عنصر SQL يسمى SelectBasicsQL ، ومن الخطأ محاولة استخدامه كبيان SQL لتنفيذ:
sqlmapclient.queryforlist ("selectBasicsQl") ؛ ×10. حدد السجلات بشكل عشوائي
<sql id = "randomsql"> order by rand () limit # number # </sql>
حدد سجلات الأرقام بشكل عشوائي من قاعدة البيانات (فقط لـ MySQL)
11. غرزة حقول في مجموعة SQL من خلال التجميع
<sql id = "selectGroupBy> حدد categoryName من إجابة respererCategory A ، QuestionCategory Q حيث a.questionCategoryId = q.questionCategoryId Group by A.AnswererId order by a.answerercategoryid </sql> <sql id = "selectgroupby> select A.AnswererCategoryId ، A.Correctnum ، A.Answerseconds ، A. createdtimestamp ، A.LastQuestionApprovedTimestamp ، A.LastModified ، group_concat (Q.CategoryName) كفئة من Group andererCateRiDED <squateRiD <squestoriD <questioncategoryid = q.questioncategoryid by
ملاحظة: يتم استخدام وظيفة Group_Concat الخاصة بـ MySQL في SQL
12. فرز بالترتيب في
①mysql:
<sql id = "groupbyinarea"> حدد moduleId ، modulename ، الحالة ، lastModierId ، lastModifiedName ، modmodified من statmodule حيث moduleId في (3 ، 5 ، 1) ترتيب instr ('، 3،5،1 ،' ، '،'+ltrim (moduleid)+'،') </sql> Modulename ، status ، lastModierId ، lastModifiedName ، lastmodified من statmodule حيث moduleId في (3 ، 5 ، 1) ترتيب instr ('، 3،5،1 ،' ، '،'+ltrim (moduleId)+'،') </sql>②sqlserver:
<sql id = "groupbyinarea"> حدد moduleId ، modulename ، الحالة ، lastModierId ، lastModifiedName ، modtmodified من statmodule حيث moduleId في (3 ، 5 ، 1) ترتيب charindex ('،'+ltrim (moduleId)+'،' ، '، 3 ،') moduleId ، modulename ، status ، lastModifierId ، lastModifiedName ، lastModified من statmodule حيث moduleId في (3 ، 5 ، 1) ترتيب charindex ('،'+ltrim (moduleId)+'،' ، '، 3،5،1 ،') </sql>الوصف: سيتم إرجاع نتائج الاستعلام بترتيب ModuleId في القائمة (3 ، 5 ، 1).
MySQL: Instr (Str ، Sentstr)
SQLServer: يقوم Charindex (Sentstr ، STR) بإرجاع الموضع الأول للحدوث في السلسلة الفرعية في السلسلة str ltrim (str) لإرجاع String str ، يتم حذف حرفته (اليسار)
13. ResultMap Resultmap هي المسؤولة عن تعيين قيم أعمدة SQL SEDS في قيم سمة من Java Beans
<resultmap id = "getActionIdandActionNumber"> <result column = "actionId" property = "actionId" jdbctype = "bigint" javatype = "long"/> <result column = "count" property = "count" jdbctype = "int" javatype = "int"/> column = "actionId" property = "actionId" jdbctype = "bigint" javatype = "long"/> <result column = "count" property = "count" jdbctype = "int" javatype = "int"/>
يسمى استخدام ResultMap برسم خرائط للنتيجة الصريحة ، والذي يتوافق مع Resultclass (تعيين النتيجة المضمّنة). أكبر ميزة لاستخدام Resultclass هي أنها بسيطة ومريحة. لا يتطلب عرض النتيجة المحددة. يحدد Ibatis القرار القائم على التفكير. يمكن أن توفر ResultMap مصادقة تكوين أكثر صرامة من خلال تحديد JDBCType و Javatype.
14.Tepealias
<typealias alias = "yegronlineduration" type = "com.fashionfree.stat.accesslog.model.memberonlininguration" /> <Typealias>
اسمح لك بتحديد الاسم المستعار لتجنب المدخلات المتكررة للأسماء الطويلة المفرطة
15.REMAP
<select id = "testforremap" parameterclass = "hashmap" resultclass = "hashmap" remapResults = "true"> حدد userId <isequal property = "tag" comparevalue = "1"> ، username </isequal> <isequal property = "comparevalue =" 2 " id = "testforremap" parameterclass = "hashmap" resultclass = "hashmap" remapResults = "true"> select userid <isequal property = "tag"
في هذا المثال ، سيتم الحصول على مجموعات نتائج مختلفة وفقًا لقيمة علامة المعلمة. إذا لم يكن هناك سمة remapresults = "true" ، فسيقوم iBatis بتخزين النتائج التي تم تعيينها خلال الاستعلام الأول. لن يتم تنفيذ تعيين مجموعة النتائج في المرة التالية (يجب أن يكون في العملية) ، ولكن سيتم استخدام مجموعة النتائج المخزنة مؤقتًا.
لذلك ، إذا كان remapresult في المثال أعلاه هو الخاصية الخاطئة الافتراضية ، ويتم كتابة البرنامج مثل هذا:
hashmap <string ، integer> hashMap = new hashmap <string ، integer> () ؛ hashmap.put ("tag" ، 1) ؛ sqlclient.queryforlist ("testforremap" ، hashmap) ؛ hashmap.put ("tag" ، 2) ؛ sqlclient.queryforlist ("testforremap" ، hashmap) ؛ كود جافا
hashmap <string ، integer> hashMap = new hashmap <string ، integer> () ؛ hashmap.put ("tag" ، 1) ؛ sqlclient.queryforlist ("testforremap" ، hashmap) ؛ hashmap.put ("tag" ، 2) ؛ sqlclient.queryforlist ("testforremap" ، hashmap) ؛سيقوم البرنامج بالإبلاغ عن خطأ عند تنفيذ استعلام الاستعلام الأخير. والسبب هو أن Ibatis يستخدم مجموعة النتائج من الاستعلام الأول ، وأن مجموعات النتائج من المرتين الأول والأخير تختلف: (UserD ، اسم المستخدم) و (UserD ، userPassword) ، مما يؤدي إلى خطأ. إذا تم استخدام خاصية remapresults = "true" ، فسيقوم iBatis بإجراء تعيين مجموعة النتائج في كل مرة يتم تنفيذ الاستعلام ، وبالتالي تجنب الأخطاء (سيكون هناك الكثير من النفقات العامة).
16. تتم إضافة السمة المسبقة للعلامة الديناميكية كبادئة لمحتوى النتيجة. عندما يكون محتوى النتيجة للتسمية فارغًا ، لن تعمل السمة المسبقة.
عندما توجد سمة prepend في العلامة الديناميكية ، سيتم تجاهل السمة الأولى المسبقة لترجماتها المتداخلة. على سبيل المثال:
<sql id = "wheresql"> <dynamic prepend = "where"> <isnotnull property = "userid" prepend = "bogus"> userId = # userid # </isnotnull> <isnotempty property = "username" prepend = "و" username = # username #/isnotempty> </sql> <sql> id = "wheresql"> <dynamic prepend = "where"> <isnotnull property = "userId" prepend = "bogus"> userId = # userid # </isnotnull> <isnotempty property = "username" prepend = "> username = # username #/isnotempty> </sql>
في هذا المثال ، تحتوي العلامة الديناميكية على اثنين من اللاعبين الفرعيين <isnotnull> و <isnotempty>. وفقًا للمبادئ الموضحة أعلاه ، إذا كانت السمة الخاطئة prepend = "bogus" ليست في علامة <Snotnull> لإزالة الديناميكية ، وسيتم تجاهل علامة <SeNotempty> ، مما يسبب أخطاء بناء جملة SQL.
ملاحظة: عندما لا تحتوي العلامة الديناميكية على سمة مسبقة ، لا يتم تجاهل السمة الأولى المسبقة لعلامة طفلها تلقائيًا.
ما سبق هو 16 عبارات SQL التي يستخدمها Ibatis لتقديمها لك. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!