1. [代码] mybatis 全局配置文件
<ปลั๊กอิน> <ปลั๊กอิน interceptor = "com.has.core.page.paginationInterceptor" /> </plugins>
2. [文件] PaginationInterceptor.java
@Intercepts ({@signature (type = staสวน handler. class, method = "เตรียม", args = {การเชื่อมต่อ. คลาส})}) คลาสสาธารณะ paginationinterceptor ใช้ interceptor {@overridepublic วัตถุ (การเรียกใช้การเรียกใช้ คำชี้แจง handler.getBoundSql (); metaObject metastatementhandler = metaobject.forobject (attementhandler); Rowbounds Rowbounds = (Rowbounds) MetastatementHandler.getValue ("Delegate.rowbounds"); ถ้า (Rowbounds == Null | การเรียกใช้งาน. proceed ();} การกำหนดค่าการกำหนดค่า = (การกำหนดค่า) MetastatementHandler.getValue ("Delegate.Configuration"); Dialect.type Databasetype = null; ลอง {databasetype = Dialect.type.valueof (การกำหนดค่า (ข้อยกเว้น e) {} if (databasetype == null) {โยน runtimeException ใหม่ ("ค่าของคุณสมบัติภาษาถิ่นใน configuration.xml ไม่ได้กำหนด:"+ configuration.getVariables () GetProperty ("Dialect")); mysql5dialect (); break; case oracle: dialect = new oracledialect (); break;} สตริง riginalsql = (string) metastatementhandler.getValue ("delegate.boundsql.sql"); rowbounds.getOffset (), rowbounds.getLimit ())); metastatementhandler.setValue ("Delegate.rowbounds.offset", rowbounds.no_row_offset); metastatementhandler.setValue rachation.proceed ();}@ปลั๊กอิน OverridePublic Object (เป้าหมายวัตถุ) {return plugin.wrap (เป้าหมาย, สิ่งนี้);}@overridepublic void setProperties (คุณสมบัติคุณสมบัติ) {}}}}3. [文件] Dialect.java
/*** 数据库方言定义 **/บทคัดย่อระดับนามธรรมสาธารณะ {ประเภท enum คงที่สาธารณะ {mysql, oracle} สตริงนามธรรมสาธารณะ getLimitString (สตริง sql, int skipresults, int maxresults);};4. [文件] mysql5dialect.java
/*** mysql 方言分页类*/คลาสสาธารณะ mysql5dialect ขยายภาษาถิ่น {สตริงสุดท้ายที่ได้รับการป้องกัน sql_end_delimiter = ";" ; สตริงสาธารณะ getLimitString (สตริง SQL, บูลีน hasoffset) {return mysql5pagehepler.getLimitstring (sql, - 1, - 1);} public String getLimitstring (String sql, int Offset, int) supportslimit () {return true;}}5. [文件] oracledialect.java
แพ็คเกจ com.chyjr.has.core.page.dialect;/*** oracel 方言分页**/คลาสสาธารณะ oracledialect ขยายภาษาถิ่น {สตริงสาธารณะ getlimitstring (สตริง sql, int rotbet, int) {// toDo 未实现 return "";}}}}}6. [文件] mysql5pagehepler.java
นำเข้า java.util.regex.matcher; นำเข้า java.util.regex.pattern;/*** mysql 分页工具类*/คลาสสาธารณะ mysql5pagehepler {/*** 得到查询总数的 sql*/สตริงคงที่สาธารณะ getCountString getLaStOrderInsertpoint (querySelect); int formIndex = getAfterFormInsertPoint (querySelect); String select = querySelect.SubString (0, formIndex); // 如果เลือก中包含 countif ที่แตกต่างกัน {ส่งคืน StringBuffer ใหม่ (querySelect.length ()). ผนวก ("เลือกนับ (1) นับจาก (") .append (querySelect.SubString (0, orderIndex)) ผนวก (") t") ) .append (queryselect.substring (formindex, orderindex)). toString ();}}/*** 得到最后一个สั่งซื้อโดย的插入点位置 ** @return 返回最后一个ลำดับโดย插入点的位置*/ส่วนตัวคงที่ intlastorderintpoint ||! isbracketcanpartnership (queryselect.substring (OrderIndex, querySelect.length ()))) {โยน runtimeException ใหม่ ("SQL ของฉัน分页必须要有สั่งซื้อ语句!"); getLimitString (string querySelect, int offset, int limit) {querySelect = getLinesQl (querySelect); // string sql = querySelect.replaceall ("[^// s,] + //.", "") + "จำกัด " sql;}/*** 将 sql 语句变成一条语句, 并且每个单词的间隔都是 1 个空格 ** @param sql* sql 语句* @return 如果 sql 是 null 返回空, 否则返回转化后的 sql*/สตริงคงที่ส่วนตัว getLinesql (สตริง sql) {return sql.replaceall ( "// s {2,}", "");}/*** 得到 sql 第一个正确的จาก的的插入点*/ส่วนตัวคงที่ int getafterforminsertpoint (String querySelect) {string regex = "// s+จาก // s+" รูปแบบ = pattern.compile (matcher.find ()) {int fromstartindex = matcher.start (0); สตริงข้อความ = queryselect.substring (0, fromstartindex); ถ้า (isbracketcanpartnership (ข้อความ)) {กลับจากสตาร์ททินด์;如果匹配返回 true, 否则返回 False*/Private Static Boolean IsbracketCanPartnership (ข้อความสตริง) {ถ้า (text == null || (getIndexofCount (ข้อความ, '(')! = getIndexofcount (ข้อความ, ')'))) getIndexofCount (ข้อความสตริง, ถ่าน ch) {int count = 0; สำหรับ (int i = 0; i <text.length (); i ++) {count = (text.charat (i) == ch)? นับ + 1: count;} count return count;}}2. [图片] mybatis.jpg