【转载】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页面 ...
随机推荐
- kali linux之防火墙识别
通过检查回包,可能识别端口是否经过防火墙过滤,设备多种多样,结果存在一定的误差 Send Response Type SYN NO Filtered(先发送syn 如果不给回复 防火墙可 ...
- 【转】asp.net中设置弹出谈话框的几种方式详解
源地址:https://blog.csdn.net/zou15093087438/article/details/79637114 注:可用winform的MessageBox的方法,只需引用Syst ...
- luoguP3835 [模板]可持久化平衡树
https://www.luogu.org/problemnew/show/P3835 因为博主精力和实力有限,学不懂 fhq treap 了,因此只介绍 leafy tree 解法 leafy tr ...
- mysql设计-基本操作
mysql 设计 1)服务器管理 2)数据库管理 3)表管理 4)字段管理 5)索引管理 操作 1)sql语句 2)单表操作 3)多表操作 索引 记录 字段 mysam innodb ibdata1 ...
- Calendar时间类的一些用法
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了 ...
- 获取表单提交的数据getParameter()方法
请求对象:request public String getParameter(String name); 通过request的getParameter(String name)方法获取 表单里面的n ...
- [译文]Casperjs1.1.0参考文档-快速开始
快速开始 只要casperjs被正确安装,你就可以开始写你的第一个脚本,你可以使用javascript或者coffiescript编译脚本. 提示: 如果你对javascript不是很熟悉,最好先看专 ...
- selenium滑动验证码操作
1.首先要找到你要滑动的地方 2.调动鼠标事件按住不动 3.调整坐标即可 我这里是为了调试加了很多的sleep,print(hander)是为了看是否定位到了元素 4.效果如下图,但是我这里的验证文字 ...
- sqlserver 临时表,多用户同时访问冲突吗?
当然不会冲突,一个井号的临时表(本地临时表),在数据库中物理表名并非你看到的,而是系统会为你的临时表生成一个唯一的表名,所以其它用户使用和建同样的表不会发生冲突.
- Linux之vi三种模式常用操作
vi的三种模式:命令模式.编辑模式.尾行模式 一.命令模式 1.光标移动 a.字符级 左(h) 下(j) 上(k) 右(l) b.单词级 w word移动到下个单词首字母 b before上个单词首字 ...