浏览 9289 次
锁定老帖子 主题:Jdbc BaseDao
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-15
视图?可能出问题吧,都不提倡用。
|
|
返回顶楼 | |
发表时间:2008-04-16
如果是安全性高的项目,那么恐怕你连一个表都操作不到。你操作的全部是视图!
|
|
返回顶楼 | |
发表时间:2009-02-17
老大 代码是不是不全啊com.oa.tools包呢~~?
|
|
返回顶楼 | |