public abstract class BaseDao<T> {
private JdbcTemplate jdbcTemplate;
// 构造函数,用于注入JdbcTemplate
public BaseDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// 插入数据
public int insert(T entity) {
String sql = getInsertSql(); // 需要子类实现具体的SQL语句
Object[] args = getInsertArgs(entity); // 需要子类根据实体类提供参数
return jdbcTemplate.update(sql, args);
}
// 更新数据
public int update(T entity) {
String sql = getUpdateSql(); // 需要子类实现具体的SQL语句
Object[] args = getUpdateArgs(entity); // 需要子类根据实体类提供参数
return jdbcTemplate.update(sql, args);
}
// 删除数据
public int delete(T entity) {
String sql = getDeleteSql(); // 需要子类实现具体的SQL语句
Object[] args = getDeleteArgs(entity); // 需要子类根据实体类提供参数
return jdbcTemplate.update(sql, args);
}
// 查询单条数据
public T findById(Object id) {
String sql = getFindByIdSql(); // 需要子类实现具体的SQL语句
return jdbcTemplate.queryForObject(sql, new Object[]{id}, getRowMapper());
}
// 查询所有数据
public List<T> findAll() {
String sql = getFindAllSql(); // 需要子类实现具体的SQL语句
return jdbcTemplate.query(sql, getRowMapper());
}
// 抽象方法,需要子类实现
protected abstract String getInsertSql();
protected abstract Object[] getInsertArgs(T entity);
protected abstract String getUpdateSql();
protected abstract Object[] getUpdateArgs(T entity);
protected abstract String getDeleteSql();
protected abstract Object[] getDeleteArgs(T entity);
protected abstract String getFindByIdSql();
protected abstract String getFindAllSql();
protected abstract RowMapper<T> getRowMapper();
}
这个代码是一个基于Spring的JdbcTemplate的CRUD基类Dao的实现框架。它定义了一些基本的方法如插入、更新、删除、根据ID查询和查询所有。这些方法的实现依赖于子类提供的SQL语句和参数。注意,这里使用了抽象方法`getInsertSql()`, `getInsertArgs(T entity)`, 等,这些方法需要子类根据具体的实体类和数据库表结构来实现。同时,也定义了`getRowMapper()`方法,该方法用于将SQL查询结果映射为Java对象,同样需要子类实现。这样的设计使得BaseDao类可以适用于多种不同的实体类和数据库表,提高了代码的复用性和灵活性。