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. linux centos 宝塔主机控制面板安装和安全狗安装过程记录

    linux 宝塔控制面板 安装过程yum install -y wget && wget -O install.sh http://103.224.251.79:5880/instal ...

  2. Centos查看端口占用令

    Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令: lsof -i tcp:80 列出所有端口 netstat -ntlp 1.开启端口(以80端口为例) 方法一: /sbin/ ...

  3. Error creating bean with name 'dateSource' defined in file 错误信息

    问题的原因: 在web项目中搭建SSM框架,启动Tomcat时出现错误信息 有配置文件:applicationContext-mybatis.xml (Spring配置) spring-servlet ...

  4. 最短路径SPFA算法(邻接表存法)

    queue <int> Q; void SPFA (int s) { int i, v; for(int i=0; i<=n; i++) dist[i]=INF; //初始化每点i到 ...

  5. Java中的Date Time 与SQL Server 2005里的Datetime 之间的交互

    Preface Environment:Platform: Windows XPLanguage: Java 1.5IDE: MyEclipse 6.0.1Database: SQL Server 2 ...

  6. libcaffe.so.1.0.0: cannot open shared object file: No such file or directory 运行时报错

    caffe安装好后lib没有配置到/usr/lib或/usr/local/lib中,需手动配置: sudo vim ~/.bashrc export LD_LIBRARY_PATH=your_path ...

  7. ansible基本模块-cron

    ansible   XXX   -m   cron   -a   "name=‘XXX ’   job=‘执行的命令’   minute=XXX "                ...

  8. href="#" 链接到当前页面

    <a href="#" onclick="window.close()">关闭</a>将href="#"是指联接到当 ...

  9. springmvc相关配置和用法

    目录如下: 一.spring mvc 核心类与接口 二.spring mvc 核心流程图 三.spring mvc DispatcherServlet说明 四.spring mvc 父子上下文的说明 ...

  10. css3 超出文本...显示

    width: 250px 或者 100%; max-width: 285px; overflow: hidden; display: inline-block; white-space: nowrap ...