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
原创粉丝点击