反正讨厌配置各种xml,于是我自己添加了mybatis的sql生成

package com.xqi.webs.data.sql;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.xqi.common.util.HString;
import com.xqi.webs.bean.XWhere;

/**
 * 通用sql语句生成实现类
 * 
 * @author mike <br>
 *         2015年6月10日
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
public class BaseSqlProvider implements IBaseSqlProvider {

    private static Logger log = Logger.getLogger(BaseSqlProvider.class);

    @Override
    public String getPageXDataSql(Map<String, Object> params) {
        StringBuffer sb = new StringBuffer(params.get(PARAM_SQL).toString());

        String orderBy = (String) params.get(PARAM_ORDER_BY);
        String order = (String) params.get(PARAM_ORDER);
        Long start = (Long) params.get(PARAM_START);
        Long len = (Long) params.get(PARAM_LEN);

        XWhere xwhere = (XWhere) params.get(PARAM_WHERE_KEY);
        if (!HString.isEmpty(xwhere)) {
            sb.append(getWhere(xwhere));
        }

        if (HString.isEmpty(orderBy))
            orderBy = SQL_COLUMN_PK;
        sb.append(SQL_ORDER_BY + orderBy);
        if (HString.isEmpty(order))
            order = SQL_ORDER_DESC;
        sb.append(order);
        if (HString.isEmpty(start))
            start = 0l;
        sb.append(SQL_LIMIT + start);
        if (HString.isEmpty(len) || len == 0l)
            len = 20l;
        sb.append("," + len);
        log.debug("getPageXData:" + sb);
        return sb.toString();
    }

    @Override
    public String getPageCountSql(Map<String, Object> params) {
        StringBuffer sb = new StringBuffer(SQL_SELECT_COUNT + "(" + params.get(PARAM_SQL).toString());
        XWhere xwhere = (XWhere) params.get(PARAM_WHERE_KEY);
        if (!HString.isEmpty(xwhere)) {
            sb.append(getWhere(xwhere));
        }
        sb.append(") pagetable ");
        log.debug("getPageCountSql:" + sb);
        return sb.toString();
    }

    /**
     * 拼装where条件的方法
     * 
     * @param xwhere
     * @return
     */
    static StringBuffer getWhere(XWhere xwhere) {
        StringBuffer sb = new StringBuffer(SQL_WHERE);
        for (Iterator<String> iterator = xwhere.keySet().iterator(); iterator.hasNext();) {
            String key = iterator.next();
            if (WHERE_LIKE.equals(xwhere.getWby(key)))
                sb.append(key + WHERE_LIKE + "CONCAT('%',#{where." + key + "},'%') ");
            else if (WHERE_IN.equals(xwhere.getWby(key))) 
                sb.append(key + WHERE_IN + "(" + getInOrNotIn(xwhere.get(key)) + ") ");
            else if (WHERE_NOT_IN.equals(xwhere.getWby(key))) 
                sb.append(key + WHERE_NOT_IN + "(" + getInOrNotIn(xwhere.get(key)) + ") ");
            else if (WHERE_IS_NULL.equals(xwhere.getWby(key)))
                sb.append(key + WHERE_IS_NULL);
            else if (WHERE_IS_NOT_NULL.equals(xwhere.getWby(key)))
                sb.append(key + WHERE_IS_NOT_NULL);
            else if (WHERE_NOT_EQ_1.equals(xwhere.getWby(key)) || WHERE_NOT_EQ_2.equals(xwhere.getWby(key)))
                sb.append(key + WHERE_NOT_EQ_2 + "#{where." + key + "} ");
            else
                sb.append(key + WHERE_EQ + "#{where." + key + "} ");
            sb.append(xwhere.getWlk(key));
        }
        sb.delete(sb.length() - 4, sb.length());
        return sb;
    }

    /**
     * in 跟 not in 返回的
     * 
     * @param objArr
     * @return
     */
    static String getInOrNotIn(Object objArr) {
        String str = "";
        if (objArr instanceof List) {
            List list = (List) objArr;
            if (list.get(0) instanceof String) {
                for (int i = 0; i < list.size(); i++) {
                    str += "'" + list.get(i) + "',";
                }
                str = str.substring(0, str.length() - 1);
            } else {
                str = list.toString().replace("[", "").replace("]", "");
            }
        } else if (objArr.getClass().isArray()) {
            List list = null;
            if(objArr.getClass().toString().contains("String")){
                String [] strArr = (String[]) objArr;
                list = Arrays.asList(strArr);
                
                for (int i = 0; i < list.size(); i++) {
                    str += "'" + list.get(i) + "',";
                }
                str = str.substring(0, str.length() - 1);
            } else {
                Number [] strArr = (Number[]) objArr;
                list = Arrays.asList(strArr);
                str = list.toString().replace("[", "").replace("]", "");
            }
        }
        return str;
    }

}


IObjectMapper 中的写法

@SelectProvider(type = BaseSqlProvider.class, method = "getPageXDataSql")
    @Options(useCache = true, flushCache = false, timeout = 10000)
    public List<XData> getPageData(Map<String, Object> params);


Service中的写法

public Long getCount(Map<String, Object> params) {
    return objectMapper.getCount(params);
}

public XPage getPage(XPage page, XWhere where, String orderBy, String order) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put(IBaseSqlProvider.PARAM_WHERE_KEY, where);
        params.put(IBaseSqlProvider.PARAM_ORDER_BY, orderBy);
        params.put(IBaseSqlProvider.PARAM_ORDER, order);
        String sql = "select * from t_sys_user";
        params.put(IBaseSqlProvider.PARAM_SQL, sql);
        if (HString.isEmpty(page.getTotalResult()) || page.getTotalResult() <= 0) {
            page.setTotalResult(objectMapper.getCount(params));
            page.setCurrentResult(0l);
            page.setCurrentPage(1l);
        }
        params.put(IBaseSqlProvider.PARAM_START, page.getCurrentResult());
        params.put(IBaseSqlProvider.PARAM_LEN, page.getShowCount());
        List<XData> list = objectMapper.getPageData(params);
        page.setRows(list);
        return page;
    }


测试类中的写法
            XWhere xwhere = new XWhere();
//            List<String> names = new ArrayList<String>();
//            names.add("admin8");
//            names.add("admin2");
//            names.add("admin5");
//            List<Object> ids = new ArrayList<Object>();
//            ids.add(11);
//            ids.add(12);
//            ids.add(14);
            String [] names = new String[]{"admin8","admin2","admin5"};
            Integer [] ids = new Integer[]{11,12,14};
            xwhere.put("login_name", names, WHERE_IN);
            xwhere.put("id", ids, WHERE_IN, SQL_WLK_OR);
            ObjectService objService = applicationContext.getBean(ObjectService.class);
            XPage page = new XPage();
            page = objService.getPage(page, xwhere, "login_name", SQL_ORDER_DESC);
            List<XData> list = page.getRows();
            for (XData map : list) {
                System.out.println(map);
            }


你可能感兴趣的:(反正讨厌配置各种xml,于是我自己添加了mybatis的sql生成)