JDBC(三)

1、BasicDao

Druid+DbUtils的方式仍有不足,sql是固定的,select操作结果集返回类型也是固定的

data access object(数据访问对象),每个表有一个通用的增删改查方法xxxDao,将多个表的xxxDao再封装成一个基础的Dao,就叫basicDao,或者叫baseDao

2、总结

导入jar包

  • mysql-connector-java
  • druid
  • commons-dbutils

**配置properties文件

#驱动加载  
driverClassName=com.mysql.jdbc.Driver
#注册驱动  
url=jdbc:mysql://127.0.0.1:3306/db_name?characterEncoding=utf-8
#连接数据库的用户名  
username=root
#连接数据库的密码  
password=1234
#初始化时池中建立的物理连接个数。  
initialSize=2
#最大的可活跃的连接池数量  
maxActive=30
#获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。  
maxWait=60000

注:参数后面不要有空格!不要有空格!

最终的工具类JdbcUtils

public class JdbcUtils {  
    // 1、导入druid.jar包  
    // 2、在druid.properties文件中编写好配置  
  
    private static DataSource dataSource;  
  
    // 3、静态代码块在类加载时执行,且只执行一次  
    static {  
        // 创建properties对象,读取配置  
        Properties properties = new Properties();  
        try {  
        	// Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 
//            properties.load(new FileInputStream("D:\\Users\\Documents\\eclipse-workspace\\bookmanage\\src\\druid.properties"));  
        	properties.load(JdbcUtils.class.getResourceAsStream("/druid.properties"));
            // 创建Druid连接池  
            dataSource = DruidDataSourceFactory.createDataSource(properties);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    /**  
     * 从数据库连接池中获取连接  
     * @return  
     * @throws SQLException  
     */  
    public static Connection getConnection() throws SQLException {  
    	
        return dataSource.getConnection();  
    }  
  
    /**  
     * close是把connection连接对象放回到连接池中  
     * @param connection  
     * @param statement  
     * @param resultSet  
     */  
//    public static void closeResource(Connection connection, Statement statement, ResultSet resultSet) {  
//        DbUtils.closeQuietly(connection);  
//        DbUtils.closeQuietly(statement);  
//        DbUtils.closeQuietly(resultSet);  
//    }    
    
    /**
     * 关闭连接
     * @param connection
     */
    public static void close() {  
        DbUtils.closeQuietly(connection);   
    } 
}

所有DAO的父类BaseDao

public abstract class BaseDao<T> {  
    private QueryRunner queryRunner = new QueryRunner();  
  
    /**  
     * 通用增删改方法  
     *  
     * @param sql  
     * @param params  
     * @return  
     */  
    public int update(Connection connection, String sql, Object... params) {  
  
        try {  
            int update = queryRunner.update(connection, sql, params);  
            return update;  
        } catch (SQLException e) {  
            // 这里将编译异常转换为运行异常,抛出。调用者可以捕获也可以不捕获,采用默认的处理方式  
            throw new RuntimeException(e);  
        }  
  
    }  
    /**  
     * 通用的查询方法,返回多行  
     *  
     * @param sql  
     * @param clz  
     * @param params  
     * @return  
     */  
    public List<T> getList(Connection connection, String sql, Class<T> clz, Object... params) {  
  
        try {  
            List<T> list = queryRunner.query(connection, sql, new BeanListHandler<T>(clz), params);  
            return list;  
        } catch (SQLException e) {  
            // 这里将编译异常转换为运行异常,抛出。调用者可以捕获也可以不捕获,采用默认的处理方式  
            throw new RuntimeException(e);  
        }  
  
    }  
    /**  
     * 通用的查询方法,返回单行  
     *  
     * @param sql  
     * @param clz  
     * @param params  
     * @return  
     */  
    public T getOne(Connection connection, String sql, Class<T> clz, Object... params) {  
  
        try {  
            T t = queryRunner.query(connection, sql, new BeanHandler<T>(clz), params);  
            return t;  
        } catch (SQLException e) {  
            throw new RuntimeException(e);  
        }  
  
    }  
    /**  
     * 通用的查询方法,返回单行单列(即单值)  
     *     * @param sql  
     * @param params  
     * @return  
     */  
    @SuppressWarnings({"unchecked", "rawtypes"})  
    public Object getScalar(Connection connection, String sql, Object... params) {  
  
        try {  
            return queryRunner.query(connection, sql, new ScalarHandler(), params);  
        } catch (SQLException e) {  
            throw new RuntimeException(e);  
        }  
  
    }
}
posted @ 2022-11-12 18:00  Rix里克斯  阅读(28)  评论(0)    收藏  举报