Spring-JDBC:在使用JdbcTemplate进行条件查询时没有返回数据,但是sql直接在数据库中执行是有数据返回的。

来源:互联网 发布:知产的巴黎公约 编辑:程序博客网 时间:2024/05/21 17:45

在使用JdbcTemplate进行条件查询时没有返回数据,但是sql直接在数据库中执行是有数据返回的。

对应sql:SELECT count(1) FROM emp WHERE 1=1 and job like ? and deptno=? 
对应参数数组:[%销售员%, 30]

对应sql:SELECT * FROM emp WHERE 1=1 and job like ? and deptno=? limit ?,?

对应参数数组:[%销售员%, 30, 0, 10]


结果:{"data":[],"result":"success","total_count":0}   说明程序没有报错,但是data为空。


部分代码:

@Override
public PageBean<Employee> page(Integer pageCode, Integer preCounts, Employee employee) throws Exception {


StringBuffer countPrefixSql = new StringBuffer("SELECT count(1) FROM emp ");
StringBuffer dataPrefixSql = new StringBuffer("SELECT * FROM emp ");

StringBuffer whereSql = new StringBuffer("WHERE 1=1 ");
List<Object> paramsValue = new ArrayList<>();

String job = employee.getJob();
if(null != job && !job.trim().isEmpty()) {
whereSql.append("and job like ? ");
paramsValue.add("%"+job+"%");
}
Integer deptNo = employee.getDeptno();
if(null != deptNo) {
whereSql.append("and deptno=? ");
paramsValue.add(deptNo);
}
String countSql = countPrefixSql.append(whereSql).toString();
Object[] args = paramsValue.toArray(new Object[paramsValue.size()]);

System.out.println(countSql);
System.out.println(Arrays.toString(args));

Integer count = jdbcTemplate.queryForObject(countSql, args, Integer.class);


dataPrefixSql.append(whereSql).append("limit ?,?");
paramsValue.add((pageCode - 1)*preCounts);
paramsValue.add(preCounts);
PageBean<Employee> pageBean = new PageBean<>();

System.out.println(Arrays.toString(paramsValue.toArray()));
System.out.println(dataPrefixSql.toString());

List<Employee> dataList = jdbcTemplate.query(dataPrefixSql.toString(), 
        new BeanPropertyRowMapper<>(Employee.class), paramsValue.toArray());


pageBean.setTotalCounts(count);
pageBean.setDataList(dataList);
pageBean.setPageCode(pageCode);
pageBean.setPreCounts(preCounts);

return pageBean;
}


问题:jdbcTemplate在执行条件查询有什么需要注意的地方?

阅读全文
0 0
原创粉丝点击