【转载】BaseDao设计
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设计的更多相关文章
- [转载]面向对象设计(OOD)思想(C#)
有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...
- <转载>网页设计中的F式布局
地址:http://www.uisdc.com/understanding-the-f-layout-in-web-design 网页设计中的F式布局 今天我们来重点介绍网页设计中的F式布局.传统的布 ...
- [转载]Cortana 设计指导方针
来源:@微软中国MSDN,源地址:http://weibo.com/p/1001603898586285925224 使用语音命令,延伸 Cortana 与您的应用程序所提供的功能.启动应用程序,启动 ...
- 转载pcb设计详细版
http://www.51hei.com/bbs/dpj-52438-1.html 详细的altium designer制作PCB步骤,按照步骤一步步的学习就会自己制作PCB模型 目 录 实验三 层 ...
- JAVAEE——SSH项目实战02:客户列表和BaseDao封装
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.c ...
- UI产品设计流程中的14个要点
http://www.sj33.cn/digital/wyll/201404/38318.html 自从我在 Dribbble 上贴了一幅我的产品设计成果,受到了大家伙热烈的反馈,对此我深受鼓励,我决 ...
- 案例50-crm练习dao层的抽取BaseDao
1 抽取BaseDao 2 BaseDao设计思路 3 BaseDao接口书写 package www.test.dao; import java.io.Serializable; import ja ...
- j2EE经典面试题
1. hibernate中离线查询去除重复项怎么加条件? dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 2. http协议及端口,sm ...
- crm-ssh-列表显示(顾客列表,用户,联系人列表)
客户列表 1 分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao 5.完成strutx以及spring的配置 6.书写前台list.jsp页面 ...
随机推荐
- Jmeter_实现Excel文件导出到本地
一般而言,对于页面的“导出”操作,主要经历如下两个操作:①根据数据库的内容,将文件导出到应用服务器上:②将服务器上的文件下载到本地电脑: Jmeter同LoadRunner类似,只能记录服务端与客户端 ...
- spring 学习(五):spring 事务
spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...
- 【spring】 SpringMVC返回json数据的三种方式
配置方法一 **1.导入第三方的jackson包,jackson-mapper-asl-1.9.7.jar和jackson-core-asl-1.9.7.jar. 2.spring配置文件添加** & ...
- MySQL5.7配置(第一次使用)
MySQL5.7配置(第一次使用) 最近因为工作需要学习mysql的增删改查.用的公司的电脑,之前有人已经安装过mysql5.7,等于使用了免安装版,重新开始配置.参考了以下文章 http://blo ...
- SQL Server为啥使用了这么多内存?
原文地址:http://support.microsoft.com/gp/anxin_techtip6/zh-cn SQL Server为啥使用了这么多内存? SQL Server的用户,常常会发现S ...
- HDU - 5997 树状数组+set
和之前一道省选题目很像: (梦幻布丁): 我们维护的时候用树状数组维护,在断电处打上标记: 合并的时候小的合并到大的里面: #include<iostream> #include<c ...
- bootstrap表单控件
禁用状态: 被禁用的 fieldset 为<fieldset> 设置 disabled 属性,可以禁用 <fieldset> 中包含的所有控件. <form> &l ...
- 队列 和 堆栈用python 来实现
一.利用python列表实现堆栈和队列 堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的a ...
- Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存
一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...
- Andriod ListView组件的使用
1.介绍 总结:ListView 是一个可以以垂直滚动的方式展示条目内容的一个列表,条目的内容来自于ListAdapter(适配器). 2.操作步骤 3.内存溢出问题(快速拖到条目) 利用getVie ...