Mybatis (二) commons-dbutils 操作

一、JDBC 封装
1.1、commons-dbutils 是 Apache 的开源JDBC 工具类库
1.2、对JDBC 封装;

二、dbutils
2.1、较为轻量;
2.2、sql 直接传递,不支持动态sql;

三、代码测试
JdbcUtils

public class JdbcUtils {

    private static HikariDataSource hikariDataSource;

    static {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf-8");
        config.setUsername("root");
        config.setPassword("");
        // 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
        config.setConnectionTimeout(30000);
        // 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
        config.setIdleTimeout(600000);
        // 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
        config.setMaximumPoolSize(15);
        // 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
        config.setMaxLifetime(1800000);

        //创建数据源
        hikariDataSource = new HikariDataSource(config);
    }

    //提供数据源
    public static DataSource getDataSource() {
        return hikariDataSource;
    }

    //获取连接
    public static Connection getConnection() throws SQLException {
        return hikariDataSource.getConnection();
    }
}

测试代码


public class QueryRunnerTest {
    // 插入
    @Test
    public void insert() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "insert into user(id, userName, userAge, userAddress) values (?, ?, ?, ?)";
        Object params[] = {88, "掌握时间管理的重要性", "18", "中国-杭州"};
        runner.update(sql, params);
    }

    // 修改
    @Test
    public void update() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "update user set userAddress=? where id=?";
        Object params[] = {"中国-北京", 88};
        runner.update(sql, params);
    }

    // 删除
    @Test
    public void delete() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "delete from user where id=?";
        runner.update(sql, 88);
    }

    // 查找单条记录
    @Test
    public void find() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "select * from user where id=?";
        User user = (User) runner.query(sql, new BeanHandler(User.class), 1);
        System.out.println(user);
    }

    // 查找所有记录
    @Test
    public void getAll() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "select * from user";
        List list = (List) runner.query(sql, new BeanListHandler(
                User.class));
        for (User user : list) {
            System.out.println(user);
        }
    }

    // 批处理
    @Test
    public void batch() throws SQLException {
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "insert into user(id, userName, userAge, userAddress) values (?, ?, ?, ?)";

        // 三条sql,五个参数
        Object params[][] = new Object[3][4];

        for (int i = 10; i < params.length; i++) {
            params[i] = new Object[]{i + 1, "study" + i, 18, "中国-杭州"};
        }
        runner.batch(sql, params);
    }
}

四、 dbutils 问题
1、数据库频繁链接,释放连接
解决方式:使用连接池
2、sql 语句及参数硬编码
解决方式:配置文件
3、手动解析封装返回结果集
解决方式:反射、内省

你可能感兴趣的:(Mybatis (二) commons-dbutils 操作)