两个封装JDBC操作的工具,使用起来非常相似
简单记录下,防止以后又忘记。。。。

Dbutils
  • 导包

    <!--Dbutils工具-->
    <dependency>
        <groupId>commons-dbutils</groupId>
        <artifactId>commons-dbutils</artifactId>
        <version>1.7</version>
        <scope>compile</scope>
    </dependency>
  • 插入,修改,删除数据

    Connection conn;
    QueryRunner runner = new QueryRunner();
    String sql = "insert into user values(?,?,?)";
    Object[] params = {user.getUsername(), user.getPassword(), user.getEmail()};
    result = runner.update(conn, sql, params);
    /*
    	仅演示插入数据,修改,删除数据使用的方法都是一样的,
    	因为事务控制需要在业务层上,所以该connection对象是业务层传过来的
    	在使用update方法的时候需要提交conn对象。这种方式才能做到业务层管理事务
    	
    	如果不考虑事务,则创建QueryRunner对象的时候提供conn对象就行,这样做属于
    	dbutils内部管理conn,在使用update方法时,也只需提供sql和参数即可
    	
    	因为写这个代码的时候还没学spring,所以在每个方法中直接创建了QunnerRunner对象
    	用来spring之后注入QueryRunner属性就行
    */
  • 查询返回结果是一个对象

    Connection conn;
    QueryRunner runner = new QueryRunner();
    User user = null;
    String sql = "select username,password,email from user where username=?";
    try {
    		user = queryRunner.query(conn, sql, 
    			new BeanHandler<User>(User.class), username);
        } catch (SQLException e) {
            e.printStackTrace();
    }
    /*
    	这个beanHandler类实现了ResultSetHandler接口
    */
  • 查询返回结果是一个集合

    Connection conn;
    QueryRunner runner = new QueryRunner();
    List<User> users = null;
    String sql = "select username,password,email from user where username=?";
    try {
    	users = runner.query(conn,sql,new BeanListHandler<User>(User.class));
        } catch (SQLException e) {
            e.printStackTrace();
    }
JdbcTemplate
  • 导包

    <!--JdbcTemplate依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.0.9.RELEASE</version>
    </dependency>
  • 插入,修改,删除一个数据

    @Autowired
    private JdbcTemplate jdbcTemplate;
    Object[] objects = {user.getUsername(),user.getPassword(),user.getEmail()};
    String sql ="insert into user values(?,?,?)"
    int update = jdbcTemplate.update(sql, objects);
  • 查询结果是一个值

    jdbcTemplate.queryForObject("sql语句",返回值的class类型);
    jdbcTemplate.queryForObject("select count(*) from user",int.class);
  • 查询结果是一个对象

    String sql = "select * from user where username=?";
    User user = jdbcTemplate.queryForObject(sql, 
    	new BeanPropertyRowMapper<User>(User.class), username);
    
    //和查询一个值用的方法重载。
  • 查询结果是一个集合

    String sql = "select * from user";
    List<User> users = jdbcTemplate.query(sql, 
    	new BeanPropertyRowMapper<User>(User.class));
  • 批量执行添加,修改,删除操作

    @Override
    public void deleteSome(List<Object[]> list) {
            String sql = "delete from user where username = ?";
            int[] ints = jdbcTemplate.batchUpdate(sql, list);
            System.out.println(Arrays.toString(ints));
    }
    
    /*
    	提供的参数好像只能是List<Object[]>类型,批量操作底层是遍历List集合中每一个元素
    	执行每一次sql语句时,就使用一个集合中的元素参数,即Object[]。
    */