Mybatis拦截器解决达梦数据库sql返回类型Mapkey大写问题 Mybatis拦截器,解决达梦数据库sql返回类型Mapkey大写问题 Mybatis拦截器,解决达梦数据库sql返回类型Mapkey大写问题拦截器功能点代码介绍拦截器入口接收Mybatis处理的结果自己处理查询结果拦截器功能点代码介绍在代码中有一句invocation.proceed();方法,如果执行了这个方法,就是mybatis自己处理查询结果返给我们用。如果不执行该方法,则我们自己可以拿到结果自己映射到返回类型中去拦截器入口importorg.apache.ibatis.executor.r...
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大写的备用List
本文档为【Mybatis拦截器解决达梦数据库sql返回类型Mapkey大写问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。