mp自定义sql传参为list<String>怎么写
时间: 2024-03-15 08:46:34 浏览: 19
如果你的参数是一个字符串列表(`List<String>`),你可以在SQL语句中使用`IN`操作符来匹配该列表中的值。以下是一个示例代码片段:
```java
List<String> values = Arrays.asList("value1", "value2", "value3");
String sql = "SELECT * FROM my_table WHERE column_name IN (:values)";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("values", values);
List<MyObject> results = namedParameterJdbcTemplate.query(sql, paramMap, new MyObjectRowMapper());
```
在这个例子中,我们创建了一个字符串列表`values`,然后使用`IN`操作符来选择`my_table`表中`column_name`字段包含在该列表中的所有行。我们将参数值存储在一个`paramMap`中,并将其传递给`namedParameterJdbcTemplate.query()`方法。注意,我们使用了命名参数语法(:values),并将参数值作为`paramMap`的一个键值对传递。
相关问题
List<TbModulePermissions> batchPermissions = new ArrayList<>(); TbModulePermissions mp1 = new TbModulePermissions(); mp1.setCreateTime(tbModuleInfo.getCreateTime()); mp1.setModuleId(tbModuleInfo.getModuleId()); mp1.setPhone(user.get("phone").toString()); mp1.setpId(0); mp1.setSortId(tbModuleInfo.getSortId()); mp1.setStatus(tbModuleInfo.getModuleStatus()); mp1.setUpdateOpr(user.get("phone").toString()); mp1.setUpdateTime(tbModuleInfo.getCreateTime()); mp1.setIsPerson(tbModuleInfo.getIsPerson()); batchPermissions.add(mp1); String sql = "INSERT INTO tb_module_permissions (" + "create_time,module_id,phone,p_id," + "sort_id,status,update_opr,update_time," + "is_person) " + "(SELECT " + "? ,? ,phone,1," + "? ,? ,phone,? ," + "? from tb_user_info where isDelete = 0 and instr(?, level) > 0 and instr(?, channel_id) > 0)"; int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { TbModulePermissions permissions = batchPermissions.get(i); ps.setString(1, permissions.getCreateTime()); ps.setString(2, permissions.getModuleId()); ps.setString(3, permissions.getSortId()); ps.setString(4, permissions.getStatus()); ps.setString(5, permissions.getUpdateTime()); ps.setString(6, permissions.getIsPerson()); ps.setString(7, permissions.getLe()); ps.setString(8, permissions.getChannel()); } @Override public int getBatchSize() { return batchPermissions.size(); } }); if (result.length <= 0) { return getSucessMap("省级模块添加失败"); } log.info(tbModuleInfo.getModuleId() + "添加成功s=" + result.length); return getSucessMap("添加成功");中user报错
如果在使用上述代码时,`user`报错了,可能是因为`user`对象没有正确的赋值或者不存在。请确保`user`对象已经正确地初始化,并且包含了`phone`属性。
你可以添加以下代码片段进行调试:
```java
System.out.println("user: " + user);
```
这将打印出`user`对象的值,以便你确认是否正确获取了`phone`属性。
如果仍然存在问题,请检查代码的其他部分,确保`user`对象已经正确地获取到并且包含了有效的值。
tbModuleInfo.setCreateTime(DateUtil.dateToString(new Date(), DateStyle.YYYY_MM_DD_HH_MM_SS)); tbModuleInfo.setIsDel(0); tbModuleInfo.setModuleId("MI" + UUID.randomUUID().toString().split("-")[4].toUpperCase()); int i = tbModuleInfoService.insert(tbModuleInfo); if (i <= 0) { return getSucessMap("模块添加失败"); } Subject subject=SecurityUtils.getSubject();//获得当前用户到登录对象,现在状态为未认证 System.out.println("RealmForDouble授权中---->用户:"+subject); Map<String, Object> user = (Map<String, Object>) subject.getPrincipal(); TbModulePermissions mp1 = new TbModulePermissions(); mp1.setCreateTime(tbModuleInfo.getCreateTime()); mp1.setModuleId(tbModuleInfo.getModuleId()); mp1.setPhone(user.get("phone").toString()); mp1.setpId(0); mp1.setSortId(tbModuleInfo.getSortId()); mp1.setStatus(tbModuleInfo.getModuleStatus()); mp1.setUpdateOpr(user.get("phone").toString()); mp1.setUpdateTime(tbModuleInfo.getCreateTime()); mp1.setIsPerson(tbModuleInfo.getIsPerson()); int n = tbModulePermissionsService.insert(mp1); if (n <= 0) { return getSucessMap("省级模块添加失败"); } 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() }); log.info(tbModuleInfo.getModuleId()+"添加成功s="+s); return getSucessMap("添加成功");怎么改成List方法,不用Custom的方法
如果你想将这段代码改成使用List的方法,而不使用Custom的方法,可以考虑使用批量插入的方式。你可以将需要插入的数据封装成一个List,然后使用JdbcTemplate的`batchUpdate`方法执行批量插入操作。以下是示例代码:
```java
List<TbModulePermissions> batchPermissions = new ArrayList<>();
TbModulePermissions mp1 = new TbModulePermissions();
mp1.setCreateTime(tbModuleInfo.getCreateTime());
mp1.setModuleId(tbModuleInfo.getModuleId());
mp1.setPhone(user.get("phone").toString());
mp1.setpId(0);
mp1.setSortId(tbModuleInfo.getSortId());
mp1.setStatus(tbModuleInfo.getModuleStatus());
mp1.setUpdateOpr(user.get("phone").toString());
mp1.setUpdateTime(tbModuleInfo.getCreateTime());
mp1.setIsPerson(tbModuleInfo.getIsPerson());
batchPermissions.add(mp1);
String sql = "INSERT INTO tb_module_permissions ("
+ "create_time,module_id,phone,p_id,"
+ "sort_id,status,update_opr,update_time,"
+ "is_person) "
+ "(SELECT "
+ "? ,? ,phone,1,"
+ "? ,? ,phone,? ,"
+ "? from tb_user_info where isDelete = 0 and instr(?, level) > 0 and instr(?, channel_id) > 0)";
int[] result = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
TbModulePermissions permissions = batchPermissions.get(i);
ps.setString(1, permissions.getCreateTime());
ps.setString(2, permissions.getModuleId());
ps.setString(3, permissions.getSortId());
ps.setString(4, permissions.getStatus());
ps.setString(5, permissions.getUpdateTime());
ps.setString(6, permissions.getIsPerson());
ps.setString(7, permissions.getLe());
ps.setString(8, permissions.getChannel());
}
@Override
public int getBatchSize() {
return batchPermissions.size();
}
});
if (result.length <= 0) {
return getSucessMap("省级模块添加失败");
}
log.info(tbModuleInfo.getModuleId() + "添加成功s=" + result.length);
return getSucessMap("添加成功");
```
在这段代码中,我们首先创建了一个List对象 `batchPermissions`,用于存储每个待插入的TbModulePermissions对象。然后,将需要插入的TbModulePermissions对象添加到`batchPermissions`中。
接下来,我们定义了插入语句 `sql`,使用`?`作为占位符。然后,使用`jdbcTemplate.batchUpdate`方法执行批量插入操作。在BatchPreparedStatementSetter的实现中,我们通过`setValues`方法将每个TbModulePermissions对象的属性值设置到PreparedStatement中。同时,通过`getBatchSize`方法返回批量插入的大小。
最后,根据返回的结果数组result判断插入是否成功,如果长度小于等于0,则表示省级模块添加失败。
请注意,在使用该方法之前,确保已经正确配置了JdbcTemplate,并且引入了相关的依赖。