import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class JdbcUtils {
protected Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
protected JdbcTemplate jdbcTemplate;
// 分页sql前缀(适用于oracle)
public static final String PAGE_PREFIX = "select * from(select rownum r, ttt.* from(";
// 根据分页参数 组合分页sql后缀
public String getPAGE_SUFFIX(int page, int rows) {
return ") ttt ) where r > " + (page - 1) * rows + " and r <= " + page * rows;
}
// 组合后的分页sql
public String getPageSql(int page, int rows, String sql) {
return PAGE_PREFIX + sql + getPAGE_SUFFIX(page, rows);
}
// 查询数据条数sql
public String getPageCountSql(String sql) {
return " select count(0) from (" + sql + ")";
}
// 查询数据条数(有where参数条件)
public int queryForCount(String sql, Object... args) {
return jdbcTemplate.queryForInt(getPageCountSql(sql), args);
}
// 查询数据条数(无where参数条件)
public int queryForCount(String sql) {
return jdbcTemplate.queryForInt(getPageCountSql(sql));
}
// 查询List集合(无where参数条件)
public <T> List<T> queryForList(String sql, Class<T> clazz) {
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<T>(clazz));
}
// 查询List集合(有where参数条件)
public <T> List<T> queryForList(String sql, Class<T> clazz, Object... args) {
return jdbcTemplate.query(sql, args, new BeanPropertyRowMapper<T>(clazz));
}
// 查询List集合并封装,适用于easyui datagrid(无where参数条件)
public <T> JsonBean queryForList(String sql, Class<T> clazz, int page, int rows) {
JsonBean bean = new JsonBean();
int total = this.queryForCount(sql);
List<T> data_list = queryForList(getPageSql(page, rows, sql), clazz);
bean.setTotal(total);
bean.setRows(data_list);
return bean;
}
// 查询List集合并封装,适用于easyui datagrid(有where参数条件)
public <T> JsonBean queryForList(String sql, Class<T> clazz, int page, int rows, Object... args) {
JsonBean bean = new JsonBean();
int total = this.queryForCount(sql, args);
List<T> data_list = queryForList(getPageSql(page, rows, sql), clazz, args);
bean.setTotal(total);
bean.setRows(data_list);
return bean;
}
// 返回一个JavaBean(无where参数条件)
public <T> T queryForClass(String sql, Class<T> clazz) throws Exception {
List<T> t = queryForList(sql, clazz);
return t == null ? null : t.get(0);
}
// 返回一个JavaBean(有where参数条件)
public <T> T queryForClass(String sql, Class<T> clazz, Object... args) throws Exception {
List<T> t = queryForList(sql, clazz, args);
return t.isEmpty() ? null : t.get(0);
}
public int queryForInt(String sql, Object... args) {
return jdbcTemplate.queryForInt(sql, args);
}
public int queryForInt(String sql) {
return jdbcTemplate.queryForInt(sql);
}
public long queryForLong(String sql, Object... args) {
return jdbcTemplate.queryForLong(sql, args);
}
public int update(String sql, Object... args) {
return jdbcTemplate.update(sql, args);
}
public int delete(String sql) {
return jdbcTemplate.update(sql);
}
public <T> T queryForObject(String sql, Class<T> clazz, Object... args) {
try {
return jdbcTemplate.queryForObject(sql, clazz, args);
} catch (EmptyResultDataAccessException e) {
}
return null;
}
}