mybatis-map传递多个参数

本文介绍如何在MyBatis中使用Map来传递多个参数,包括mapper.xml和mapper.java文件的具体写法,以及如何在controller层调用相应方法。

mybatis传递多个参数

map是其中一种

mapper.xml文件中写法:

<select id="poliDetail" resultMap="BaseResultMap4" parameterType="java.util.Map">
SELECT
p.policycode,
p.prepolicycode,
p.salercode,
p.fee,
p.firstpaytype,
p.receivedate,
p.ackdate,
p.effectdate,
p.state
FROM
t2_plc_p_policy p
WHERE
p.prepolicycode = #{INSCODE}
AND p.policycode = #{POLICYCODE}
</select>

mapper.java文件中写法:

List<PolicyFisDto> poliDetail(Map<String, Object> paramMap);


直接在controller层中调用的方法:

/**
     * 
     * poliDetail: (查询保单详情).<br/>
     * @author: Lelonta
     * @param json
     * @return
     */
    @RequestMapping("poliDetail")
    public @ResponseBody JSONArray poliDetail(String json) {
   
    Map< String, Object> paramMap = JsonUtils.strToHashMap(json);
   
    List<PolicyFisDto> poliDetail = PolicyDtoMapper.poliDetail(paramMap);
   
    return MyJsonUtils.returnSuccessAndExcludeArry(poliDetail, new String[] {});
    }

特别说明一下:

JsonUtils.strToHashMap(json) 是将json字符串形式的参数 转换成了map

如果不用

json={
"POLICYCODE": "45454545457787878",
"INSCODE": "11022000011939"
}

这种格式传参

可以直接创建map后 

使用map.put("a",A);

的形式就行了


### MyBatis-Plus 中多个括号的用法 在构建复杂的查询条件时,`Wrapper` 接口提供了多种方法来处理嵌套逻辑表达式。为了实现多层括号的效果,可以利用 `and()` 和 `or()` 方法中的 lambda 表达式参数传递子条件对象[^1]。 ```java QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 20) .apply("({0} is not null)", "name") // 自定义SQL片段模拟外层括号 .and(i -> i.gt("salary", 5000).lt("salary", 8000)); // 子条件自动加括号包围 ``` 上述代码展示了如何通过链式调用来创建具有优先级顺序的复合查询语句,在这里 `and()` 的 Lambda 参数会自动生成一对环绕其内部条件的圆括号[^1]。 ### 常见语法问题及其解决方案 #### 一、动态表名或字段名支持不足 当尝试使用变量作为表名或列名时可能会抛出异常。对于这种情况,推荐采用 SQL 注入的方式绕过默认解析机制: ```sql SELECT * FROM #{tableName} ``` 应改为: ```xml <select id="selectByDynamicTableName" resultType="map"> SELECT * FROM ${tableName} </select> ``` 注意 `${}` 符号用于直接替换而不做额外转义处理,但这同时也带来了潜在的安全风险,因此务必确保输入经过严格校验[^2]。 #### 二、分页插件配置错误 如果发现分页功能失效,则可能是由于未正确初始化 PageHelper 或者 pagehelper.properties 文件缺失必要的属性设置。确认项目依赖已包含最新版本的 mybatis-plus-boot-starter 并且 application.yml 中存在如下配置项: ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: true global-config: db-config: id-type: auto pagination: reasonable: true ``` 此外还需保证 Service 层的方法签名遵循特定模式以便被拦截器识别并应用分页逻辑[^3]。 #### 三、乐观锁冲突频繁发生 针对高并发场景下更新操作容易触发 OptimisticLockerInterceptor 错误提示的情况,建议调整 version 字段的数据类型为更大范围整数(如 BIGINT),同时增加重试次数以提高成功率。可以在实体类上添加 @Version 注解指定乐观锁定策略,并配合事务管理控制最大允许失败次数[^4]。 ```java @TableField(updateStrategy = FieldStrategy.IGNORED) @Version private Long version; ``` ```java @Transactional(maxAttempts = 3, propagation = Propagation.REQUIRES_NEW) public void updateWithRetry() { try { userMapper.updateById(user); } catch (OptimisticLockException e) { log.warn("Update failed due to optimistic lock conflict."); throw e; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值