mybatis的sql文件怎么通过下标获取对象里数组类型的字段的某个值

mybatis的sql文件怎么通过下标获取对象里数组类型的字段的某个值,第1张

<!-- 传递多参数的array参数表的foreach使用 -->
<select id="getStudentAllArray" resultMap="reusltMap_student"
resultType="comdepponmybatisexsiceTestStudent"
parameterType="array">
select from t_maydel_student where stunum in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>

比如根据id或者字段条件查询获取表中的某一个字段值
User Sel(int id); //根据id查询

有时候我们需要模糊查询或者是全表查询,返回的数据是多条的, 那么可以把多条数据保存到list里面的。

这里需要注意的是返回是List类型 但是resultType依然是javaBean, 有些人会困惑这里怎么不是集合类型呢?其实透过现象看本质, 还是JavaBean。

当我们在查询的时候返回一条数据的时候,我们可以把{字段名,字段值}封装成Map结构。

一 其实可以看成是多个参数的:

二 可以看做是加了注解


可以把参数封装到Map里面 有些时候我们的业务数据查询没有定义对应的POJO,就进行参数的封装 *** 作。

可以直接返回对象 你配置一下别名 例 <typeAlias class="" alias="myObject" />
然后你在 mybatis的sql文件中 更改查询的返回值类型 也就是resultType=“myObject” 就可以了,
例:
<select id="myselect" resultType="myObject">
select from myObject_table
</select>
如果是list Mybatis会自动处理的。

<select id="getList" parameterType="ActRebate" resultMap="actRebateResultMap">
select t from t_rule_rebate t where (merchantId IS null OR tmerchantid = #{merchantId} )
AND (ztbz IS null OR trim(tztbz) = #{ztbz})
AND (type IS null OR trim(ttype) = #{type})
</select>
传进去的参数就不要在SQL中做处理了。。。。参数在传之前处理。

定义一个MapInterceptor用于拦截对应的结果集返回一个Map。
其代码如下所示:
@Intercepts(@Signature(method="handleResultSets", type=ResultSetHandlerclass, args={Statementclass}))
public class MapInterceptor implements Interceptor {

/ (non-Javadoc)
@see orgapacheibatispluginInterceptor#intercept(orgapacheibatispluginInvocation)
/
public Object intercept(Invocation invocation) throws Throwable {
//通过invocation获取代理的目标对象
Object target = invocationgetTarget();
//暂时ResultSetHandler只有FastResultSetHandler这一种实现
if (target instanceof FastResultSetHandler) {
FastResultSetHandler resultSetHandler = (FastResultSetHandler) target;
//利用反射获取到FastResultSetHandler的ParameterHandler属性,从而获取到ParameterObject;
ParameterHandler parameterHandler = ReflectUtilgetFieldValue(resultSetHandler, "parameterHandler");
Object parameterObj = parameterHandlergetParameterObject();
//判断ParameterObj是否是我们定义的MapParam,如果是则进行自己的处理逻辑
if (parameterObj instanceof MapParam) {//拦截到了
MapParam mapParam = (MapParam) parameterObj;
//获取到当前的Statement
Statement stmt = (Statement) invocationgetArgs()[0];
//通过Statement获取到当前的结果集,对其进行处理,并返回对应的处理结果
return handleResultSet(stmtgetResultSet(), mapParam);
}
}
//如果没有进行拦截处理,则执行默认逻辑
return invocationproceed();
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13350601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-19
下一篇 2023-07-19

发表评论

登录后才能评论

评论列表(0条)

保存