java ibatis 执行sql_Ibatis在运行期得到可执行到sql

public classIbatisUtil {/*** @Title getSqlStr

* @Descript :根据xml中的id得到执行时的sql语句

* @date : 2017-08-30 15:07:01

*@param*@returnjava.lang.String

*@throws*@versionV1.0*/

public String getSqlStr(SqlMapClient aqlMapClient, String sqlStatement, ParamMap map)map throwsException {

StringBuffer sqlBuffer=newStringBuffer();

DynamicSql sql=getSql(aqlMapClient,sqlStatement);//得到sql

List list=getChildren(sql);//得到children

String str=getChlidrenStr(list,map);

sqlBuffer.append(str);returnsqlBuffer.toString();

}/*** @Title getSql

* @Descript :得到动态的sql

* @date : 2017-08-30 15:07:45

*@param*@returncom.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql

*@throws*@versionV1.0*/

privateDynamicSql getSql(SqlMapClient aqlMapClient,String sqlStatement) {return(DynamicSql)(((SqlMapClientImpl)aqlMapClient).getDelegate().getMappedStatement(sqlStatement).getSql());

}/*** @Title getChildren

* @Descript :得到对象的私有属性childen的值 该对象只能是 DynamicSql和SqlTag否则返回null

* @date : 2017-08-30 15:13:08

*@param*@returnjava.util.List

*@throws*@versionV1.0*/

private List getChildren(Object obj) throwsNoSuchFieldException, IllegalAccessException {if(!(obj instanceof DynamicSql || obj instanceofSqlTag))return null;

Class classs=obj.getClass();

Field field=classs.getDeclaredField("children");

field.setAccessible(true);return(List)field.get(obj);

}private String getChlidrenStr(List list,ParamMap map) throwsNoSuchFieldException, IllegalAccessException {

StringBuffer sb=newStringBuffer();for(Object obj :list){if(obj instanceofSqlText){

sb.append(getSqlTextStr((SqlText)obj,map));

}else if(obj instanceofSqlTag){

sb.append(getSqlTagStr((SqlTag)obj,map));

}

}returnsb.toString();

}/*** @Title getSqlTextStr

* @Descript :解析SqlText

* @date : 2017-08-30 15:18:38

*@param*@returnjava.lang.String

*@throws*@versionV1.0*/

privateString getSqlTextStr(SqlText sqlText, ParamMap map){

String sqlTemp;

ParameterMapping[] parameterMappings=sqlText.getParameterMappings();

sqlTemp=sqlText.getText().toString();if (parameterMappings != null && parameterMappings.length > 0) {

Object obj;inti;for(ParameterMapping param : parameterMappings) {

i=param.getJdbcType();switch(i){case 0://为定义

obj="'"+map.getAsString(param.getPropertyName())+"'";break;case 4://INTEGER

obj=map.getAsInteger(param.getPropertyName());break;case 12://VARCHAR

obj="'"+map.getAsString(param.getPropertyName())+"'";break;case 93://TIMESTAMP

obj="to_date('yyyy-MM-dd','"+map.getAsString(param.getPropertyName())+"')";break;default:obj="";

}if(ValidateUtil.isEmpty(obj))

obj="";

sqlTemp= sqlTemp.replaceFirst("\\?",obj.toString());

}

}returnsqlTemp;

}/*** @Title getSqlTagStr

* @Descript :解析SqlTag

* @date : 2017-08-30 15:24:29

*@param*@returnjava.lang.String

*@throws*@versionV1.0*/

private String getSqlTagStr(SqlTag sqlTag,ParamMap map) throwsNoSuchFieldException, IllegalAccessException {

StringBuffer sb=newStringBuffer();

List list=getChildren(sqlTag);

String tagName=sqlTag.getName();switch(tagName){case "isNotEmpty":if(ValidateUtil.isEmpty(map.getAsString(sqlTag.getPropertyAttr())))return "";if(ValidateUtil.isNotEmpty(list)){if(ValidateUtil.isNotEmpty(sqlTag.getPrependAttr()))

sb.append(" "+sqlTag.getPrependAttr() +" ");

sb.append(getChlidrenStr(list,map));

}break;case "isEmpty":if(ValidateUtil.isNotEmpty(map.getAsString(sqlTag.getPropertyAttr())))return "";if(ValidateUtil.isNotEmpty(list)){if(ValidateUtil.isNotEmpty(sqlTag.getPrependAttr()))

sb.append(" "+sqlTag.getPrependAttr() +" ");

sb.append(getChlidrenStr(list,map));

}break;

}returnsb.toString();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值