加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:03:41 所属栏目:百科 来源:网络整理
导读:packagecom.xqi.webs.data.sql;importjava.util.Arrays;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.apache.log4j.Logger;importcom.xqi.common.util.HString;importcom.xqi.webs.bean.XWhere;/***通用sql语句生成实现类*
packagecom.xqi.webs.data.sql;

importjava.util.Arrays;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;

importorg.apache.log4j.Logger;

importcom.xqi.common.util.HString;
importcom.xqi.webs.bean.XWhere;

/**
*通用sql语句生成实现类
*
*@authormike<br>
*2015年6月10日
*/
@SuppressWarnings({"unchecked","rawtypes"})
publicclassBaseSqlProviderimplementsIBaseSqlProvider{

privatestaticLoggerlog=Logger.getLogger(BaseSqlProvider.class);

@Override
publicStringgetPageXDataSql(Map<String,Object>params){
StringBuffersb=newStringBuffer(params.get(PARAM_SQL).toString());

StringorderBy=(String)params.get(PARAM_ORDER_BY);
Stringorder=(String)params.get(PARAM_ORDER);
Longstart=(Long)params.get(PARAM_START);
Longlen=(Long)params.get(PARAM_LEN);

XWherexwhere=(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);
returnsb.toString();
}

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

/**
*拼装where条件的方法
*
*@paramxwhere
*@return
*/
staticStringBuffergetWhere(XWherexwhere){
StringBuffersb=newStringBuffer(SQL_WHERE);
for(Iterator<String>iterator=xwhere.keySet().iterator();iterator.hasNext();){
Stringkey=iterator.next();
if(WHERE_LIKE.equals(xwhere.getWby(key)))
sb.append(key+WHERE_LIKE+"CONCAT('%',#{where."+key+"},'%')");
elseif(WHERE_IN.equals(xwhere.getWby(key)))
sb.append(key+WHERE_IN+"("+getInOrNotIn(xwhere.get(key))+")");
elseif(WHERE_NOT_IN.equals(xwhere.getWby(key)))
sb.append(key+WHERE_NOT_IN+"("+getInOrNotIn(xwhere.get(key))+")");
elseif(WHERE_IS_NULL.equals(xwhere.getWby(key)))
sb.append(key+WHERE_IS_NULL);
elseif(WHERE_IS_NOT_NULL.equals(xwhere.getWby(key)))
sb.append(key+WHERE_IS_NOT_NULL);
elseif(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());
returnsb;
}

/**
*in跟notin返回的
*
*@paramobjArr
*@return
*/
staticStringgetInOrNotIn(ObjectobjArr){
Stringstr="";
if(objArrinstanceofList){
Listlist=(List)objArr;
if(list.get(0)instanceofString){
for(inti=0;i<list.size();i++){
str+="'"+list.get(i)+"',";
}
str=str.substring(0,str.length()-1);
}else{
str=list.toString().replace("[","").replace("]","");
}
}elseif(objArr.getClass().isArray()){
Listlist=null;
if(objArr.getClass().toString().contains("String")){
String[]strArr=(String[])objArr;
list=Arrays.asList(strArr);

for(inti=0;i<list.size();i++){
str+="'"+list.get(i)+"',str.length()-1);
}else{
Number[]strArr=(Number[])objArr;
list=Arrays.asList(strArr);
str=list.toString().replace("[","");
}
}
returnstr;
}

}


IObjectMapper中的写法

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


Service中的写法

publicLonggetCount(Map<String,Object>params){
returnobjectMapper.getCount(params);
}

publicXPagegetPage(XPagepage,XWherewhere,StringorderBy,Stringorder){
Map<String,Object>params=newHashMap<String,Object>();
params.put(IBaseSqlProvider.PARAM_WHERE_KEY,where);
params.put(IBaseSqlProvider.PARAM_ORDER_BY,orderBy);
params.put(IBaseSqlProvider.PARAM_ORDER,order);
Stringsql="select*fromt_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);
returnpage;
}


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读