Mybatis拦截器,解决达梦数据库sql返回类型Mapkey大写问题 Mybatis拦截器,解决达梦数据库sql返回类型Mapkey大写问题拦截器功能点代码介绍拦截器入口接收Mybatis处理的结果自己处理查询结果拦截器功能点代码介绍在代码中有一句invocation.proceed();方法,如果执行了这个方法,就是mybatis自己处理查询结果返给我们用。如果不执行该方法,则我们自己可以拿到结果自己映射到返回类型中去拦截器入口importorg.apache.ibatis.executor.resultset.DefaultResultSetHandler;importorg.apache.ibatis.executor.resultset.ResultSetHandler;importorg.apache.ibatis.mapping.MappedStatement;importorg.apache.ibatis.mapping.ResultMap;importorg.apache.ibatis.plugin.*;importorg.apache.ibatis.reflection.MetaObject;importorg.apache.ibatis.reflection.SystemMetaObject;importorg.springframework.stereotype.Component;importjava.sql.Statement;importjava.util.List;importjava.util.Map;importjava.util.Properties;/***拦截特定接口的返回值,转成Map*/@Component//拦截Executor类的query方法@Intercepts({@Signature(type=ResultSetHandler.class,method="handleResultSets",args={Statement.class})})publicclassMybatisResultInterceptimplementsInterceptor{publicObjectintercept(Invocationinvocation)throwsThrowable{DefaultResultSetHandlerdefaultResultSetHandler=(DefaultResultSetHandler)invocation.getTarget();MetaObjectmetaStatementHandler=SystemMetaObject.forObject(defaultResultSetHandler);MappedStatementmappedStatement=(MappedStatement)metaStatementHandler.getValue("mappedStatement");//获取节点属性的集合List
resultMaps=mappedStatement.getResultMaps();//上面一堆代码主要是为了获取sql的映射类型Class>resultType=resultMaps.get(0).getType();//InterceptorFlagInterface这个是我自己定义的一个标记接口,这句代码意思是,如果sql的结果映射类型为map或者实体实现了InterceptorFlagInterface接口的都会走这个if语句if(Map.class.isAssignableFrom(resultType)||InterceptorFlagInterface.class.isAssignableFrom(resultType)){//处理sql返回值是Map类型的returnMapIntercept.interceptMap(invocation);}else{returnEntityIntercept.intercept(invocation);}}publicObjectplugin(Objecttarget){returnPlugin.wrap(target,this);}publicvoidsetProperties(Propertiesarg0){}}接收Mybatis处理的结果这种是接收框架拼接的结果,处理达梦数据库Mapkey大写问题这个类是拦截器类,里面有2中业务处理方法,是我自己的业务importcom.alibaba.druid.pool.DruidPooledResultSet;importcom.alibaba.druid.pool.DruidPooledStatement;importcom.alibaba.druid.proxy.jdbc.NClobProxyImpl;importcom.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl;importcom.alibaba.fastjson.JSONObject;importdm.jdbc.desc.Column;importdm.jdbc.driver.DmdbNClob;importdm.jdbc.driver.DmdbPreparedStatement;importorg.apache.ibatis.plugin.Invocation;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***拦截特定接口的返回值,转成Map*/publicclassMapIntercept{/***处理拦截map**@paraminvocation*@return*@throwsThrowable*/publicstaticObjectinterceptMap(Invocationinvocation)throwsThrowable{//执行请求方法,框架所得结果保存到result中Objectresult=invocation.proceed();if(result!=null&&resultinstanceofArrayList){ArrayListresultList=(ArrayList)result;//当前返回值的实体类是实现了InterceptorFlagInterface的才会做转换if(resultList.size()!=0&&resultList.get(0)instanceofInterceptorFlagInterface){//这个方法不用看,是处理Mapkey大写的备用
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
List