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;
}
}
相关推荐
2. **Spring 的常用包及其作用** - `org.springframework.aop`:提供AOP编程相关的接口和实现。 - `org.springframework.beans`:包含处理JavaBean的类和接口。 - `org.springframework.context`:扩展beans包,...
本手册主要涵盖了Spring框架的两个主要版本——Spring 2.x和Spring 3.x,由FengGe精心整理,旨在帮助开发者快速查找和理解Spring的核心概念与使用方法。 一、IoC(Inversion of Control)容器 Spring的核心是IoC...
2. Spring Boot常用功能: - HelloWorld示例:通过新建Maven Java工程,添加Spring Boot Maven依赖,创建主程序类,通过简单配置来运行一个Web应用。 - 返回JSON数据:Spring Boot可以集成Jackson等JSON转换框架来...
在这个“参照阿里druid个人整理druid-spring-boot-starter可运行demo”中,我们将深入探讨如何将Druid与Spring Boot进行整合,并创建一个可运行的示例。首先,我们需要在项目中引入Druid的依赖。在pom.xml文件中,...
Spring Boot干货系列,分享学习中整理的一些笔记和源码 博文对应源码 Spring boot干货系列:(一)优雅的入门篇:chapter1 Spring Boot干货系列:(二)配置文件解析:chapter2 Spring Boot干货系列:(三)启动原理...
- **JDBCTemplate**:学习如何使用Spring JDBC模板访问数据库。 - **hsqldb**:介绍hsqldb数据库,一种轻量级的嵌入式数据库。 - **代码示例**:提供具体的数据库访问代码示例。 #### 24. Demo13: Flex访问数据库 -...