1.DbUtils介绍

最早操作数据使用的Java自带的JDBC技术JDBC操作数据库的时候存在很多严重的重复代码,并且需要程序员手动的释放相应的资源信息于是Apache组织又一次站出来,对JDBC技术进行简单的封装,形成可以快速数据进行CRUD操作的DbUtils工具类。

c3p0连接池 

//数据源

ComboPooledDataSource cpds = new ComboPooledDataSource();

2.操作数据库之增删改

// 创建执行SqlQueryRunner对象 ,这里不控制事务,需要传递数据源

QueryRunner qr = new QueryRunner(cpds));

//书写sql语句

//添加一条记录

//String sql = "insert into user values(null, ?, ?)";

//删除一条记录

//String sql = "delete from users where id = ?";

//修改一条记录

String sql = "update users set password = ? where username = ?";

// 执行sql,需要给出参数数据

//qr.update(sql, "lisi", "123");

//qr.update(sql, 1);

qr.update(sql , "lisi", "李四");

3.操作数据库之查询(重点)

ResultSetHandler实现

在DbUtils工具类,针对ResultSetHandler接口提供了11实现类

ArrayHandler它是把从数据库中查询的第一个行数据保存在数组中

ArrayListHandler:把查询的每一行数据都保存在数组中,然后把所有的数组保存在List集合中 

MapHandler:它会将查询到数据中的第一行列名作为mapkey,列值作为mapvalue保存在map集合中 

MapListHandler将查询到数据中的每一行以列名作为mapkey,列值作为mapvalue保存在map集合中每一行都是Map集合,然后把当前这个Map保存在List集合中。 

BeanHandler:把查询的第一行数据封装到一个JavaBean

BeanListHandler:把查询的每一行数据封装到一个JavaBean上,然后把每个JavaBean保存在List集合。 

BeanMapHandler:把查询的每一行数据封装到一个JavaBean上,把这个对象作为mapvalue值存在,然后需要使用某一列作为Mapkey

ColumnListHandler:把数据库中的某一列查询出来保存在List集合中。

KeyedHandler:把查询到的每一行数据中的列名作为key,列值作为value存储Map集合中然后再将创建KeyedHandler对象指定指定的列名作为新的Mapkey每行数据已经封装的Map作为新的Mapvalue值保存

ScalarHandler:可以获取到当前数据库中的数据记录条数。如果在创建ScalarHandler对象的时候,指定列名那么就会在查询的结果中,获取当前这列第一结果

例子:

ArrayListHandler演示

// 创建执行SqlQueryRunner对象 ,这里不控制事务,需要传递数据源

QueryRunner qr = new QueryRunner(cpds);

// 书写sql语句 查询所有数据

String sql = "select * from users";

// 执行sql

List<Object[]> query = qr.query(sql, new ArrayListHandler());

// 遍历数组

for (Object[] obj : query) {

System.out.println(Arrays.toString(obj));

}

查询结果:

DbUtils技术

MapHandler演示(重点)

QueryRunner qr = new QueryRunner(dbcp);

//书写sql语句 ,查询所有用户信息

String sql = "select * from users ";

Map<String, Object> map = qr.query(sql, new MapHandler());

// 遍历集合

for (Entry<String, Object> entry : map.entrySet()) {

System.out.println( entry.getKey() +"==="+entry.getValue() );

}

以下是只写执行sql语句部分,前几步操作和前面一致

MapListHandler演示(重点)

String sql = "select * from users ";

List<Map<String, Object>> list = qr.query(sql, new MapListHandler());

 BeanHandler演示(重点)

String sql = "select * from users where id = ?";

/*

 *  执行sql。在创建BeanHandler对象的时候,需要指定出查询数据封装的JavaBean对应的Class

 */

User user = qr.query(sql, new BeanHandler<User>(User.class), 4);

BeanListHandler演示(重点)

String sql = "select * from users ";

/*

 *  执行sql。在创建BeanListHandler对象的时候,

 *  需要指定出查询数据封装的JavaBean对应的Class,

 *  BeanListHandler 底层会将封装的JavaBean对象再保存到List集合中

 */

List<User> query = qr.query(sql, new BeanListHandler<User>(User.class));

BeanMapHandler演示

String sql = "select * from users "; 

/*

 * 在创建BeanMapHandler对象的时候, 需要指定出查询数据封装的JavaBean对应的Class,

 * 同时需要在指定表中的某一列作为Map集合的key值。每一行的数据封装的JavaBean中作为Mapvalue

 */

Map<Integer, User> map = qr.query(sql, new BeanMapHandler<Integer , User>(User.class,"id"));

运行结果

DbUtils技术

ScalarHandler演示(重点)

//获取到当前数据库中的数据记录条数

String sql = "select count(*) from users";

Long number = qr.query(sql, new ScalarHandler<Long>());

运行结果

DbUtils技术

如果在创建ScalarHandler对象的时候指定列名,返回的是当前这列第一行值。

DbUtils技术

String sql = "select * from users";

String s = qr.query(sql, new ScalarHandler<String>("username"));

查询结果:

DbUtils技术

此篇介绍了DButil技术的增删该查,在真正的工作阶段,都会使用hibernate,mybatis等数据库框架,因此本人感觉意义不大!

相关文章:

  • 2022-12-23
  • 2021-11-25
  • 2021-05-21
  • 2021-04-21
  • 2022-02-19
  • 2022-01-05
  • 2022-01-28
猜你喜欢
  • 2021-11-03
  • 2022-12-23
  • 2021-06-19
  • 2022-02-27
  • 2021-11-02
相关资源
相似解决方案