Spring JdbcTemplate 多参数查询,以及like模糊查询处理方式

         最近在使用spring 的 jdbctemplate 查询,在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。

        进入正题,用原生的jdbc就会存在sql拼接问题,拼接的话就自然而然的会出现sql注入漏洞的问题,我们要避免sql注入漏洞,无非就是使用预处理的方式,sql出现注入漏洞的根本原因就是直接拼接参数,所以项目中的sql拒绝拼接sql的参数。

      (一):处理多参数的处理方式

        直接看例子:

public List getAllOperator(int toPage, int pageSize,
			String login, String name, String oper_group_id, int state) {
		String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
				+ "left join oper_group_info as g on p.oper_group_id = g.id   where 1 = 1 ";
		List 

      这个例子是随便加的,这里要说的就是最好定义sql的时候使用StringBuffer ,这个比较灵活。

      (二):使用like的参数请求方式

public List<OperatorSimple> getAllOperator(int toPage, int pageSize,
            String login, String name, String oper_group_id, int state) {
        String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p "
                + "left join oper_group_info as g on p.oper_group_id = g.id   where 1 = 1 ";
        List <Object> queryList=new  ArrayList<Object>();
        if (!name.equals("")) {
                       sql += " and p.name like ? ";
            queryList.add("%" + name + "%");
        }
        if (!oper_group_id.equals("")) {
            sql += " and p.oper_group_id = ? ";
            queryList.add(oper_group_id);
        }
        if (state == 1 || state == 0) {
            sql += " and p.state = ? ";
            queryList.add(state);
        }
        
        return super.getJdbcTemplate().query(sql, queryList.toArray(),
                new OperatorSimpleMapper());
    }



这个地方的like测试过很多方式, 有的地方说是 sql += " and p.name = ? ";queryList.add("%" + name + "%") ;这样不行; 还有自己的想法的sql += " and p.name = ‘%?%’ ";queryList.add(name"),这样处理,直接就不识别’?‘,应该是被转义了。经过测试上面的方法是可行的。希望可以帮到你们!

猜你喜欢

转载自blog.csdn.net/wagnteng/article/details/53421772