两个封装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[]。 */