BaseDao设计
来源:互联网 发布:如何通过淘宝试用 编辑:程序博客网 时间:2024/05/01 23:37
BaseDao接口设计
package cn.wht.test.dao;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实现
package cn.wht.test.dao.impl;import java.lang.reflect.ParameterizedType;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import javax.enterprise.inject.New;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;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();@Overridepublic 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;}@Overridepublic void update(String sql, Object... params) {Connection connection=null;try {connection=JdbcUtils.getConnection();queryRunner.update(connection, sql, params);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic void batch(String sql, Object[]... params) {Connection connection=null;try {connection=JdbcUtils.getConnection();queryRunner.batch(connection, sql, params);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic <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设计
package cn.wht.test.Utils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;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 blocke.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 blocke.printStackTrace();}try {if(resultSet!=null){resultSet.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException(e);}}}
0 0
- BaseDao设计
- 通用BaseDao设计
- BaseDao接口设计
- BaseDao的设计思路
- 万能的BaseDao设计
- BaseDao设计思路
- 利用反射来设计BaseDao
- BaseDAO
- basedao
- BaseDao
- baseDao
- BaseDao
- BaseDao
- BaseDAO
- BaseDao
- BaseDao
- BaseDao
- BaseDao
- 背包9讲
- Python知识点:正负无穷的一些用法
- 番茄工作法 总结
- linux删除文件后没有释放空间
- .NET开发者必备的工具箱
- BaseDao设计
- ExtJs中的表单提交和页面弹出表单
- C++ 重载函数:实参类型转换
- 番茄工作法践行 2015-1-30
- centos7 apache 配置负载均衡
- 如何查看电脑的配置
- uva 1267
- NOIP 2006 金明的预算
- 求数组中出现次数超过一半的元素