BaseDao接口设计
1 import java.util.List; /**
* Dao接口,定义Dao基本操作 由BaseDaoImpl实现
* @author wht
* @param <T> 实际操作的泛型类型
*/
public interface BaseDao<T> { /**
* 执行insert操作 返回插入后的id
* @param sql 待执行的sql语句
* @param params 填充占位符的可变参数
* @return 插入新记录的id
*/
long insert(String sql, Object ... params); /**
* 执行update操作 包括insert delete update
* @param sql 待执行的sql语句
* @param params 填充占位符的可变参数
*/
void update(String sql, Object ... params); /**
* 执行多条语句的查询 返回与记录对应的类的list
* @param sql 待执行的sql语句
* @param params 填充占位符的可变参数
* @return 与记录对应的类的list
*/
List<T> queryForList(String sql, Object ... params); /**
* 执行单挑记录的查询 返回一个与记录对应的类的一个对象
* @param sql
* @param params
* @return
*/
T query(String sql,Object ...params); /**
* 执行批量更新操作
* @param sql
* @param params
*/
void batch(String sql, Object[]... params); /**
* 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值
* @param sql
* @param params
* @return
*/
<V> V getSingleVal(String sql, Object ... params);
}

BaseDaoImpl实现

 import cn.wht.test.Utils.JdbcUtils;
import cn.wht.test.dao.BaseDao; public class BaseDaoImpl<T> implements BaseDao<T> { Class<T> clazz;
BaseDaoImpl(){
ParameterizedType parameterizedType=(ParameterizedType) this.getClass().getGenericSuperclass();
clazz= (Class<T>) parameterizedType.getActualTypeArguments()[0];
System.out.println(clazz);
}
private QueryRunner queryRunner=new QueryRunner();
@Override
public long insert(String sql, Object... params) { Connection connection=JdbcUtils.getConnection();
PreparedStatement preparedStatement=null;
ResultSet resultSet=null; long id=0;
try {
preparedStatement=connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
if(params!=null){
for(int i=0;i<params.length;i++){
preparedStatement.setObject(i+1, params[i]);
}
}
preparedStatement.execute();
resultSet=preparedStatement.getGeneratedKeys();
if(resultSet.next()){
id=resultSet.getLong(1);
} } catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.release(preparedStatement, resultSet);
JdbcUtils.release(connection);
} return id;
} @Override
public void update(String sql, Object... params) { Connection connection=null; try {
connection=JdbcUtils.getConnection();
queryRunner.update(connection, sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
} @Override
public List<T> queryForList(String sql, Object... params) { Connection connection=null; try {
connection=JdbcUtils.getConnection();
return (List<T>) queryRunner.query(connection, sql, new BeanListHandler(clazz), params);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} @Override
public T query(String sql, Object... params) {
Connection connection=null; try {
connection=JdbcUtils.getConnection();
return (T) queryRunner.query(connection, sql, new BeanHandler(clazz), params);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} @Override
public void batch(String sql, Object[]... params) {
Connection connection=null; try {
connection=JdbcUtils.getConnection();
queryRunner.batch(connection, sql, params);
} catch (SQLException e) {
e.printStackTrace();
} } @Override
public <V> V getSingleVal(String sql, Object... params) {
Connection connection=null; try {
connection=JdbcUtils.getConnection();
return (V) queryRunner.query(connection, sql, new ScalarHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} }

JdbcUtils设计

 public class JdbcUtils {  

     private static DataSource ds=null;  

     static{
ds=new ComboPooledDataSource();
} public static Connection getConnection(){ try {
return ds.getConnection();
} catch (SQLException e) { e.printStackTrace();
throw new RuntimeException(e);
}
} public static void release(Connection connection){ try {
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void release(PreparedStatement preparedStatement,ResultSet resultSet){
try {
if(preparedStatement!=null){
preparedStatement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
if(resultSet!=null){
resultSet.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
} } }

【转载】BaseDao设计的更多相关文章

  1. [转载]面向对象设计(OOD)思想(C#)

    有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...

  2. <转载>网页设计中的F式布局

    地址:http://www.uisdc.com/understanding-the-f-layout-in-web-design 网页设计中的F式布局 今天我们来重点介绍网页设计中的F式布局.传统的布 ...

  3. [转载]Cortana 设计指导方针

    来源:@微软中国MSDN,源地址:http://weibo.com/p/1001603898586285925224 使用语音命令,延伸 Cortana 与您的应用程序所提供的功能.启动应用程序,启动 ...

  4. 转载pcb设计详细版

    http://www.51hei.com/bbs/dpj-52438-1.html 详细的altium designer制作PCB步骤,按照步骤一步步的学习就会自己制作PCB模型 目 录 实验三  层 ...

  5. JAVAEE——SSH项目实战02:客户列表和BaseDao封装

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.c ...

  6. UI产品设计流程中的14个要点

    http://www.sj33.cn/digital/wyll/201404/38318.html 自从我在 Dribbble 上贴了一幅我的产品设计成果,受到了大家伙热烈的反馈,对此我深受鼓励,我决 ...

  7. 案例50-crm练习dao层的抽取BaseDao

    1 抽取BaseDao 2 BaseDao设计思路 3 BaseDao接口书写 package www.test.dao; import java.io.Serializable; import ja ...

  8. j2EE经典面试题

    1. hibernate中离线查询去除重复项怎么加条件? dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 2. http协议及端口,sm ...

  9. crm-ssh-列表显示(顾客列表,用户,联系人列表)

    客户列表 1 分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao 5.完成strutx以及spring的配置 6.书写前台list.jsp页面 ...

随机推荐

  1. php 百万级数据文件导出

    背景:最近一个需求是从mysql里面读取数据(有点大),然后导出为csv文件 问题 :发现导出的过程中自己中断了,没有报错 . 第一反应是测试导出一个小一点的数据(少查几条),发现没问题 . 查看导出 ...

  2. [llvm] LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant

    LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant llvm核心类位于 include/llvm/IR ...

  3. 获取 stoken 或者id MVC写法

    //获取地址栏 painting_idvar painting_id = "{$_GET['painting_id']}"; var stoken = "{$_SESSI ...

  4. Could not get lock /var/lib/apt/lists/lock

    执行: apt-get update 出现 Could not get lock /var/lib/apt/lists/lock 解决办法: 查询与apt相关的进程 ps -e | grep apt ...

  5. 24.Letter Combinations of a Phone Number(电话号对应的字符组合)

    Level:   Medium 题目描述: Given a string containing digits from 2-9 inclusive, return all possible lette ...

  6. STM32F0 中 ADC 多通道转换结果相同的问题

    前言 前段时间调试 STM32F030 的 ADC,在多通道转换时遇到了奇怪的问题,使用官方的例程和库函数连续转换多个 ADC 通道,得到的几个通道的结果是一样的,解决办法参考了 关于STM32F0系 ...

  7. LeetCode936. Stamping The Sequence

    一.题面 You want to form a target string of lowercase letters. At the beginning, your sequence is targe ...

  8. webstorm识别 ftl文件

    webstorm对freemaker语法是原生支持的,也不需要安装什么插件,你可以直接在webstorm新建个File Types即可 file->settings->file types ...

  9. 119th LeetCode Weekly Contest Largest Perimeter Triangle

    Given an array A of positive lengths, return the largest perimeter of a triangle with non-zero area, ...

  10. C# 错误和异常

    Try,catch和finally语句组成 异常层次结构 部分异常属性: Message 类型:string 描述:含有解释异常原因的消息(只读) StackTrace 类型:string 描述:含有 ...