一个mybatis分页工具类

1.PagePlugin类

package com.tyro.plugin;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;

import javax.xml.bind.PropertyException;

import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.executor.ExecutorException;
import org.apache.ibatis.executor.statement.BaseStatementHandler;
import org.apache.ibatis.executor.statement.RoutingStatementHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.property.PropertyTokenizer;
import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;

import com.tyro.util.ReflectHelper;
import com.tyro.util.Tools;
/**
 * 
* 类名称:PagePlugin.java
* 类描述: 
* @author fuhang
* 作者单位: 
* 联系方式:
* 创建时间:2014年7月1日
* @version 1.0
 */
@Intercepts({@Signature(type=StatementHandler.class,method="prepare",args={Connection.class})})
public class PagePlugin implements Interceptor {

    private static String dialect = ""; //数据库方言
    private static String pageSqlId = ""; //mapper.xml中需要拦截的ID(正则匹配)
    
    public Object intercept(Invocation ivk) throws Throwable {
        if(ivk.getTarget() instanceof RoutingStatementHandler){
            RoutingStatementHandler statementHandler = (RoutingStatementHandler)ivk.getTarget();
            BaseStatementHandler delegate = (BaseStatementHandler) ReflectHelper.getValueByFieldName(statementHandler, "delegate");
            MappedStatement mappedStatement = (MappedStatement) ReflectHelper.getValueByFieldName(delegate, "mappedStatement");
            
            if(mappedStatement.getId().matches(pageSqlId)){ //拦截需要分页的SQL
                BoundSql boundSql = delegate.getBoundSql();
                Object parameterObject = boundSql.getParameterObject();//分页SQL\n");
                sb.append(" 
  • 跳转
  • \n"); sb.append("
  • 首页
  • \n"); sb.append("
  • 上页
  • \n"); }else{ sb.append("
  • "+totalResult+"
  • \n"); sb.append("
  • \n"); sb.append("
  • 跳转
  • \n"); sb.append("
  • 首页
  • \n"); sb.append("
  • 上页
  • \n"); } int showTag = 5;//分页标签显示数量 int startTag = 1; if(currentPage>showTag){ startTag = currentPage-1; } int endTag = startTag+showTag-1; for(int i=startTag; i<=totalPage && i<=endTag; i++){ if(currentPage==i) sb.append("
  • "+i+"
  • \n"); else sb.append("
  • "+i+"
  • \n"); } if(currentPage==totalPage){ sb.append("
  • 下页
  • \n"); sb.append("
  • 尾页
  • \n"); }else{ sb.append("
  • 下页
  • \n"); sb.append("
  • 尾页
  • \n"); } sb.append("
  • 第"+currentPage+"页
  • \n"); sb.append("
  • 共"+totalPage+"页
  • \n"); sb.append("
  • \n"); sb.append("
  • \n"); sb.append("\n"); sb.append("\n"); } pageStr = sb.toString(); return pageStr; } public void setPageStr(String pageStr) { this.pageStr = pageStr; } public int getShowCount() { return showCount; } public void setShowCount(int showCount) { this.showCount = showCount; } public int getCurrentResult() { currentResult = (getCurrentPage()-1)*getShowCount(); if(currentResult<0) currentResult = 0; return currentResult; } public void setCurrentResult(int currentResult) { this.currentResult = currentResult; } public boolean isEntityOrField() { return entityOrField; } public void setEntityOrField(boolean entityOrField) { this.entityOrField = entityOrField; } public ParameterMap getPm() { return pd; } public void setPm(ParameterMap pd) { this.pd = pd; } }

    3.ReflectHelper类

    package com.tyro.util;
    
    import java.lang.reflect.Field;
    
    /**
     * @author Administrator
     *  反射工具
     *  分页获取到
     */
    public class ReflectHelper {
        /**
         * 获取obj对象fieldName的Field
         * @param obj
         * @param fieldName
         * @return
         */
        public static Field getFieldByFieldName(Object obj, String fieldName) {
            for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass
                    .getSuperclass()) {
                try {
                    return superClass.getDeclaredField(fieldName);
                } catch (NoSuchFieldException e) {
                }
            }
            return null;
        }
    
        /**
         * 获取obj对象fieldName的属性值
         * @param obj
         * @param fieldName
         * @return
         * @throws SecurityException
         * @throws NoSuchFieldException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         */
        public static Object getValueByFieldName(Object obj, String fieldName)
                throws SecurityException, NoSuchFieldException,
                IllegalArgumentException, IllegalAccessException {
            Field field = getFieldByFieldName(obj, fieldName);
            Object value = null;
            if(field!=null){
                if (field.isAccessible()) {
                    value = field.get(obj);
                } else {
                    field.setAccessible(true);
                    value = field.get(obj);
                    field.setAccessible(false);
                }
            }
            return value;
        }
    
        /**
         * 设置obj对象fieldName的属性值
         * @param obj
         * @param fieldName
         * @param value
         * @throws SecurityException
         * @throws NoSuchFieldException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         */
        public static void setValueByFieldName(Object obj, String fieldName,
                Object value) throws SecurityException, NoSuchFieldException,
                IllegalArgumentException, IllegalAccessException {
            Field field = obj.getClass().getDeclaredField(fieldName);
            if (field.isAccessible()) {
                field.set(obj, value);
            } else {
                field.setAccessible(true);
                field.set(obj, value);
                field.setAccessible(false);
            }
        }
    }
    
    

    4.Tool类

    package com.tyro.util;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Random;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Tools {
        
        /**
         * 随机生成六位数验证码 
         * @return
         */
        public static int getRandomNum(){
             Random r = new Random();
             return r.nextInt(900000)+100000;//(Math.random()*(999999-100000)+100000)
        }
        
        /**
         * 检测字符串是否不为空(null,"","null")
         * @param s
         * @return 不为空则返回true,否则返回false
         */
        public static boolean notEmpty(String s){
            return s!=null && !"".equals(s) && !"null".equals(s);
        }
        
        /**
         * 检测字符串是否为空(null,"","null")
         * @param s
         * @return 为空则返回true,不否则返回false
         */
        public static boolean isEmpty(String s){
            return s==null || "".equals(s) || "null".equals(s);
        }
        
    
        /**
         * 写txt里的单行内容
         * @param filePath  文件路径
         * @param content  写入的内容
         */
        public static void writeFile(String fileP,String content){
            String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))+"../../";  //项目路径
            filePath = (filePath.trim() + fileP.trim()).substring(6).trim();
            if(filePath.indexOf(":") != 1){
                filePath = File.separator + filePath;
            }
            try {
                OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(filePath),"utf-8");      
                BufferedWriter writer=new BufferedWriter(write);          
                writer.write(content);      
                writer.close(); 
    
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        /**
          * 验证邮箱
          * @param email
          * @return
          */
         public static boolean checkEmail(String email){
          boolean flag = false;
          try{
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
           }catch(Exception e){
            flag = false;
           }
          return flag;
         }
        
         /**
          * 验证手机号码
          * @param mobiles
          * @return
          */
         public static boolean checkMobileNumber(String mobileNumber){
          boolean flag = false;
          try{
            Pattern regex = Pattern.compile("^(((13[0-9])|(15([0-3]|[5-9]))|(18[0-9]))\\d{8})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$");
            Matcher matcher = regex.matcher(mobileNumber);
            flag = matcher.matches();
           }catch(Exception e){
            flag = false;
           }
          return flag;
         }
         
         
        /**
         * 读取txt里的单行内容
         * @param filePath  文件路径
         */
        public static String readTxtFile(String fileP) {
            try {
                
    //          String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))+"../../";  //项目路径
                String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""));   //项目路径
                filePath = filePath.replaceAll("file:/", "");
                filePath = filePath.replaceAll("%20", " ");
                filePath = filePath.trim() + fileP.trim();
                if(filePath.indexOf(":") != 1){
                    filePath = File.separator + filePath;
                }
                String encoding = "utf-8";
                System.out.println("filePath:"+filePath);
                File file = new File(filePath);
                if (file.isFile() && file.exists()) {       // 判断文件是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file), encoding);   // 考虑到编码格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while ((lineTxt = bufferedReader.readLine()) != null) {
                        return lineTxt;
                    }
                    read.close();
                }else{
                    System.out.println("找不到指定的文件,查看此路径是否正确:"+filePath);
                }
            } catch (Exception e) {
                System.out.println("读取文件内容出错");
            }
            return "";
        }
        
    }
    
    

    留着笔记,码农专用。。。。。。。。。。

    你可能感兴趣的:(一个mybatis分页工具类)