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. 引用面试官文章 :如何准备Java初级和高级的技术面试

    本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...

  2. luoguP4234 最小差值生成树

    https://www.luogu.org/problemnew/show/P4234 按照边的权值从小到大排序,依次加入,并删除能够删除的权值最小的一条边,用 set 维护当前所有边的边权,并查集维 ...

  3. 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)

    题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...

  4. 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)

    题面 传送门 题解 题目转化一下就是所有点都在直线\(Ax+By-C=0\)的同一侧,也就可以看做所有点代入\(Ax+By-C\)之后的值符号相同,我们只要维护每一个点代入直线之后的最大值和最小值,看 ...

  5. LNMP之Php的安装配置

    此配置的编译参数是: ./configure --prefix=/opt/php7.2.3 --with-openssl --with-zlib --with-curl --enable-ftp -- ...

  6. 决策树--Python

    决策树 实验集数据: #coding:utf8 #关键词:决策树(desision tree).特征选择.信息增益(information gain).香农熵.熵(entropy).经验熵(H(D)) ...

  7. 通用动态树(Link-Cut Tree)模板

    一个没有维护任何东西的动态树模板 忘了怎么写可以直接来粘 int ch[300010][2], fa[300010], st[300010]; bool lazy[300010]; bool nroo ...

  8. 转载---<html>与<body>

    关于根元素html以及body的对比,主要是遇到设置背景色的问题,这里转载张鑫旭的关于html和body对比的文.(直接贴过来,是为了以后自己方便看) 原文地址:http://www.zhangxin ...

  9. 【2-SAT】【并查集】NOIp模拟题 植树方案 题解

        一个类似2-SAT的思想,但是简化了很多.只需要用到并查集实现. 题目描述 企鹅国打算种一批树.所谓树,就是由$N$个结点与$N-1$条边连接而成的连通无向图.企鹅国的国王对于这些树有下列要求 ...

  10. SGU - 275 线性基 初步

    题意:求给出的数任意异或的最大值 目前对线性基的理解过于肤浅,有空总结一下 #include<iostream> #include<algorithm> #include< ...