您的位置:首页 > 编程语言 > Java开发

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

2017-12-02 20:12 1896 查看
在使用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在执行条件查询有什么需要注意的地方?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐