int s = tbModulePermissionsService.updateCustom("INSERT INTO tb_module_permissions (" + "create_time,module_id,phone,p_id," + "sort_id,status,update_opr,update_time," + "is_person) " + "(SELECT " + "#{p[0]},#{p[1]},phone,1," + "#{p[2]},#{p[3]},phone,#{p[4]}," + "#{p[5]} from tb_user_info where isDelete = 0 and instr(#{p[6]}, level) > 0 and instr(#{p[7]}, channel_id) > 0)", new Object[]{ tbModuleInfo.getCreateTime(), tbModuleInfo.getModuleId(), tbModuleInfo.getSortId(), tbModuleInfo.getModuleStatus(),tbModuleInfo.getCreateTime(), tbModuleInfo.getIsPerson(), tbModuleInfo.getLe(),tbModuleInfo.getChannel() });这怎么优化,不用使用Custom
时间: 2024-04-13 14:30:39 浏览: 280
要优化这段代码,可以使用MyBatis的动态SQL功能来替代自定义SQL语句,避免直接拼接SQL字符串,提高代码的可维护性和安全性。
首先,在Mapper文件中定义一个动态SQL语句,如下所示:
```xml
<update id="updateCustom" parameterType="java.util.Map">
INSERT INTO tb_module_permissions (
create_time, module_id, phone, p_id,
sort_id, status, update_opr, update_time,
is_person
)
SELECT
#{createTime}, #{moduleId}, phone, 1,
#{sortId}, #{moduleStatus}, phone, #{createTime},
#{isPerson}
FROM tb_user_info
WHERE isDelete = 0
AND instr(#{le}, level) > 0
AND instr(#{channel}, channel_id) > 0
</update>
```
然后,在Java代码中使用MyBatis的动态SQL功能来调用上述定义的动态SQL语句,如下所示:
```java
Map<String, Object> params = new HashMap<>();
params.put("createTime", tbModuleInfo.getCreateTime());
params.put("moduleId", tbModuleInfo.getModuleId());
params.put("sortId", tbModuleInfo.getSortId());
params.put("moduleStatus", tbModuleInfo.getModuleStatus());
params.put("isPerson", tbModuleInfo.getIsPerson());
params.put("le", tbModuleInfo.getLe());
params.put("channel", tbModuleInfo.getChannel());
int s = tbModulePermissionsService.updateCustom(params);
```
这样就可以通过使用MyBatis的动态SQL功能,将原来的自定义SQL语句替换为更可读、易维护的方式来执行数据库操作,避免了直接拼接SQL字符串带来的潜在问题。
阅读全文