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() });不要updateCustom方法,要用list方法,怎么优化
时间: 2024-04-13 09:30:47 浏览: 117
如果要将上述代码优化为使用`list`方法而不使用`updateCustom`方法,可以考虑使用MyBatis的批量插入功能来实现。
首先,在Mapper接口中定义一个插入方法,如下所示:
```java
void insertModulePermissionsList(List<TbModulePermissions> permissionsList);
```
然后,在Mapper文件中编写插入语句,如下所示:
```xml
<insert id="insertModulePermissionsList" parameterType="java.util.List">
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
</insert>
```
接下来,在Service层调用插入方法,如下所示:
```java
List<TbModulePermissions> permissionsList = new ArrayList<>();
TbModulePermissions permissions = new TbModulePermissions();
permissions.setCreateTime(tbModuleInfo.getCreateTime());
permissions.setModuleId(tbModuleInfo.getModuleId());
permissions.setPhone("phone");
permissions.setPId(1);
permissions.setSortId(tbModuleInfo.getSortId());
permissions.setStatus(tbModuleInfo.getModuleStatus());
permissions.setUpdateOpr("phone");
permissions.setUpdateTime(tbModuleInfo.getCreateTime());
permissions.setIsPerson(tbModuleInfo.getIsPerson());
permissionsList.add(permissions);
tbModulePermissionsService.insertModulePermissionsList(permissionsList);
```
通过使用批量插入的方式,将需要插入的数据封装到一个`List`中,并调用插入方法来一次性插入多条数据。这样可以减少与数据库的交互次数,提高插入效率。
请注意,在使用批量插入时,需要根据具体的业务需求来确定如何构建`TbModulePermissions`对象的集合,并将其传递给插入方法。
阅读全文