暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

spring jdbcTemplate中SQL查询关键字in的使用

小邱说 2016-11-17
1403

项目需求:

在对权限进行查询时需要查询多个对象中所有拥有权限的id,最常使用的方法就是使用in关键字,在以前的工作中还没有遇到这种情况。


一种解决方法可以使用“+”拼接字符串,但是这种情况很容易有SQL注入危险。


另一种解决方法使用“?”替代符,然后再传入参数。现在的项目使用JPA,但是解决带有left join联合查询时很复杂,在这里使用jdbcTemplate解决。


具体代码如下:

@Repository

public class PrivilegeJdbcDaoImpl implements PrivilegeJdbcDao {



    @Autowired

    private JdbcTemplate jdbcTemplate;


    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;


    @Override

    public List getPrivilegesByRole(String[] osDomins) {

        namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());

        MapSqlParameterSource parameterSource = new MapSqlParameterSource();

        List osDomains1= Arrays.asList(osDomins);

        parameterSource.addValue("osDomains", osDomains1);

        String sql = "select p.mapping_type type,p.obj_id objId,p.os_domain domain,p.scene scene,m.user_id userId from fd_privilege p left join fd_user_role_mapping m on p.obj_id=m.role_id where p.mapping_type='role' and p.os_domain in (:osDomains)";


        return namedParameterJdbcTemplate.query(sql,parameterSource, new RowMapper<PrivilegeVo>() {

            @Override

            public PrivilegeVo mapRow(ResultSet rs, int rowNum) throws SQLException {

                PrivilegeVo privilegeVo = new PrivilegeVo();

                privilegeVo.setMappingType(rs.getString("type"));

                privilegeVo.setObjId(rs.getString("objId"));

                privilegeVo.setOsDomain(rs.getString("domain"));

                privilegeVo.setScene(rs.getString("scene"));

                privilegeVo.setUserId(rs.getString("userId"));

                return privilegeVo;

            }

        });

    }

}


文章转载自小邱说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论