package com.oa.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.oa.core.DynaForm;
import com.oa.dao.Dao;
import com.oa.jdbc.ConnectionFactory;
import com.oa.jdbc.DaoAccessException;
import com.oa.jdbc.DybaBean;
import com.oa.jdbc.JdbcPage;
import com.oa.jdbc.Page;
import com.oa.jdbc.RowsDynaClass;
/**
* 基类DAO,实现一些基本共有方法
*
* @author Gao_wx Mar 26, 2008
*/
public class BaseDao implements Dao {
protected Log logger = LogFactory.getLog(BaseDao.class);
// 获取数据库链接
protected Connection getConnection() {
return ConnectionFactory.getConnection();
}
// 在此链接上,根据sql语句获取List
protected List<DybaBean> getList(Connection conn, String sql)
throws DaoAccessException {
try {
Statement st = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery(sql);
return getList(rs);
} catch (SQLException e) {
throw new DaoAccessException(sql, e);
}
}
// 根据Result获取List
protected List<DybaBean> getList(ResultSet rs) throws SQLException {
RowsDynaClass rsdc = new RowsDynaClass(rs);
return rsdc.getRows();
}
// 根据sql语句获取List
protected List<DybaBean> getList(String sql) throws DaoAccessException {
Connection conn = getConnection();
return getList(conn, sql);
}
// 在此连接上,根据sql语句,id加载一条记录
protected DybaBean loadById(Connection conn, String sql, int id)
throws DaoAccessException {
try {
PreparedStatement pst = conn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
pst.setInt(1, id);
ResultSet rs = pst.executeQuery();
List list = getList(rs);
if (list.size() > 1) {
logger.warn("加载了2条以上的记录,请检查sql:" + sql);
}
if (list.size() == 0) {
logger.warn("数据库没有此记录!");
return null;
} else {
return (DybaBean) list.get(0);
}
} catch (SQLException e) {
throw new DaoAccessException(sql, e);
}
}
// 根据sql语句,id,加载一条记录
protected DybaBean loadById(String sql, int id) throws DaoAccessException {
Connection conn = getConnection();
return loadById(conn, sql, id);
}
// 在此连接上,根据Sql和id删除一条记录,返回影响行数
protected int deleteById(Connection conn, String sql, int id)
throws SQLException {
PreparedStatement pst = conn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
pst.setInt(1, id);
int del = pst.executeUpdate();
return del;
}
// 根据sql语句,id删除一条记录
protected int deleteById(String sql, int id) throws DaoAccessException {
Connection conn = getConnection();
try {
int del = deleteById(conn, sql, id);
return del;
} catch (SQLException e) {
throw new DaoAccessException(sql, e);
}
}
protected Page getPage(DynaForm form, String sql) throws DaoAccessException {
Connection conn = getConnection();
Page page = getPage(conn, form, sql);
return page;
}
// 获取分页对象
protected Page getPage(Connection conn, DynaForm form, String sql)
throws DaoAccessException {
int p = form.getInt("p");
if (p < 1) {
p = 1;
}
int size = form.getInt("size");
if (size < 10) {
size = 10;
}
Page page;
try {
page = new JdbcPage(conn, sql, p, size);
} catch (SQLException e) {
throw new DaoAccessException(sql, e);
}
return page;
}
}
所有的select sql,不管是一对多,还是一对一,还是多对一,尽可能通过视图操作数据库!
数据库要改动的时候,改动视图即可!
如果表经常可能改动。那么请用动态表
http://supttkl.iteye.com/admin/blogs/181411
分享到:
相关推荐
jdbc DataHelp jdbc 连接数据库包
`jdbcBaseDao` 是一个基于Java的数据库访问层基础类,它封装了JDBC(Java Database Connectivity)的一些常见操作,如增、删、改、查等,旨在简化数据库交互过程,提高代码的可读性和可维护性。对于初学者来说,理解...
java jdbc basedao 应用
基于Spring JDBC 的一个公用持久化层源代码,支持普通的增删改查,仅支持Spring JDBC环境使用~
### 基于Spring JDBC的BaseDAO实现与应用 #### 概述 在Java开发领域,尤其是企业级应用开发中,持久层框架是至关重要的组件之一。Spring框架提供了多种方式来处理数据库操作,其中Spring JDBC模块是轻量级且功能...
最全的javaJDBC技术的BaseDao,相当于框架封装了,引用之后直接调用其中的方法传递参数以及sql语句就可以使用了。
本文将深入探讨JDBC连接池的概念、工作原理,并以"通用basedao"模板为例,讲解如何在实际项目中应用。 首先,我们需要理解JDBC连接池是什么。JDBC连接池,全称为Java Database Connectivity Connection Pool,它是...
本篇文章将介绍一个基于JDBC封装的`BaseDao`实例,该实例提供了一个通用的DAO(Data Access Object)模板,可以应用于多种实体类的操作。 首先,`BaseDao`泛型类被定义为`<T>`,表示它可以处理任何类型的对象。类中...
### JDBC与BaseDao通用类 #### JDBC(Java Database Connectivity) JDBC是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC定义了一系列的API,...
例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao<T> { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...
可以将从数据库中查到的数据直接封到实体类!!!基于反射和元数据
"基于JDBC封装的BaseDao实例"是一个常见的设计模式,用于简化数据库操作,提高代码复用性,降低耦合度。BaseDao通常作为基类,提供通用的数据库操作方法,比如增删查改(CRUD)等。 首先,我们需要了解JDBC的基本...
NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO; } public ...
SpringBoot集成了多种数据访问技术,如JDBC、MyBatis、Hibernate等,使得我们可以轻松配置和使用。在SpringBoot中,通过@Configuration和@Bean注解,我们可以配置DataSource(数据源)和JdbcTemplate或JPA实体,来...
`BaseDao` 和 `DaoUtil` 的组合使用,使得开发者能够以更安全、高效的方式进行数据库操作,同时避免了直接与JDBC API打交道时的繁琐细节。这种设计模式在Java Web开发中非常常见,特别是在基于Spring框架的项目中,...
Spring还包含了对其他组件如JDBC、ORM、WS等的支持。 2. **Struts**:这是一个基于MVC(Model-View-Controller)模式的Web应用框架,主要用于处理HTTP请求,协调模型、视图和控制器之间的交互。Struts负责接收用户...
3. **实现方式**:BaseDao通常基于JDBC或ORM框架(如Hibernate、MyBatis)实现,提供基本的SQL执行和结果映射功能。 4. **扩展性**:子类可以继承BaseDao,并根据业务需求添加特定的数据库操作方法。 四、Spring...
1. **插入(Insert)**:使用JDBC的PreparedStatement或MyBatis的SqlSession插入数据。 ```java public int insert(T entity) { // 创建SQL语句 String sql = "INSERT INTO table_name (column1, column2) VALUES ...
这些方法通常通过JDBC(Java Database Connectivity)或ORM(Object-Relational Mapping)框架如Hibernate、MyBatis来实现。`BaseDao`的封装使得每个具体的DAO类只需要关注业务逻辑,无需关心底层的数据访问细节。 ...
Java MySQL BaseDAO是一个常见的设计模式,用于简化Java应用程序与MySQL数据库之间的交互。在这个模式中,BaseDAO类作为数据访问对象(DAO)的基类,提供了一些通用的方法,使得子类可以方便地执行CRUD(创建、读取...