DbUtils工具类的使用

9 篇文章 0 订阅

1、什么是DbUtils?

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

2、DbUtils出现的前提。

1、原生jbdc开发步骤多,   代码复杂度高,jdbc的代码关联性强,前后步骤固定。

2、原生jdbc中对于查询结果集的封装过于繁琐,支持不友好

3、Dbutils中的核心对象

   1)、QueryRunner对象,替换了原生的jdbc中的语句平台,支持?的绑定数据,可以有效的防止sql的注入

   2)、ResultSetHandler,这个借口专门用于封装查询结果!提供了八大实现类,用于封装各种类型的查询结果(对于单行单列,单列多行等,都提供了封装的实现类)

   3)、DbUtils,主要是用来释放资源,处理事务。

4、DbUtils的使用

    1、导入两个jar包,缺一不可

    2、创建工程  将jar包  add to build path 

    3、使用DbUtils完成对于数据库的增删改查。

         步骤:1、 创建数据库的连接   Connection connection = JDBCUtils.getConnection();

                    2、 创建QueryRunner对象   QueryRunner qRunner = new QueryRunner();  

                                                             此对象替换了Statement 以及 PreparedStatement

                    3、 使用QueryRunner对象执行sql语句   QueryRunner对象在执行增删改时,执行的方法都是update()

                                                                               update()方法的返回值为整型数字,代表sql语句影响的数据行数                                                                            1、  update(connection, sql) 传递连接对象,以及sql语句,此时的sql中没有?

   例子           (增加操作)                                               

                   Object[] objs = {"王二驴子", "456", "女"};

                  int row = qRunner.update(connection, "insert into user values (null, ?, ?, ?)", objs);*/

                  第一种:直接传数组,sql语句中有几个?,那么数组中就有几个元素,而且?上的数据类型一定要与数组对应元素的类型一致

                                                     2、 update(connection, sql, Object...) 此时的sql语句中可以使用?绑定数据,只需要在sql语句                                                              后,指定数据即可

           int row = qRunner.update(connection, "insert into user values (null, ?, ?, ?)",

              "张三麻子", "888", "妖");

                第二种:将需要绑定的?数据,挨着写在sql语句后面,以逗号隔开,此时依旧需要注意

  类型顺序与数量要与?一致!

                  4、   处理结果    System.out.println(row > 0 ? "添加成功" : "添加失败");

 

                  5、  释放资源     DbUtils.close(connection);

5、修改,删除操作 ,跟增加的操作相似,内容跟上面的一样

修改操作:

public static void updateDemo() {
		Connection connection = JDBCUtils.getConnection();
		QueryRunner qRunner = new QueryRunner();
		try {
			int row = qRunner.update(connection, "update user set pwd = ? where uid = ?", "789", 5);
			System.out.println(row > 0 ? "修改成功" : "修改失败");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(connection);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

  6、   删除操作

//使用DbUtils完成删除操作
	public static void deleteDemo() {
		Connection connection = JDBCUtils.getConnection();
		QueryRunner qRunner = new QueryRunner();
		try {
			int row = qRunner.update(connection, "delete from user where uid = ?", 8);
			System.out.println(row > 0 ? "删除成功" : "删除失败");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(connection);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

  7、查询操作:  使用query

    1)、ResultSetHandler 此接口是DbUtils专门用于封装结果集的对象

    2)、

ArrayHandler

将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

ArrayListHandler

将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

BeanHandler

将结果集中第一条记录封装到一个指定的javaBean中。

BeanListHandler

将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

ColumnListHandler

将结果集中指定的列的字段值,封装到一个List集合中

ScalarHandler

它是用于单数据。例如select count(*) from 表操作。

MapHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据

MapListHandler

将结果集一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

其中主要的几个为BeanHandler,BeanListHandler,ScalarHandler    分别是一条记录,每条记录,和单个数据的封装

8、javaBean是类的设计规范,与反射联用,为了保证类对象的创建以及赋值成功,要求类必须存在以下的内容

        1、类使用public修饰,公开

        2、属性私有化,使用private修饰

        3、为私有属性提供对应的setter,getter方法,方便取值和赋值

        4、必须保证类中的无参数构造方法的存在

9、多态的分类:继承多态、接口多态

  继承多态:父类引用指向子类对象 Animal animal = new Dog();

  接口多态:接口的引用指向了实现了此接口类的对象 Test t = new Person();

  query(connection, sql, 结果集) 此方法中的sql语句不能书写?

  query(connection, sql, 结果集, 可变参数) 此方法中的sql支持?绑定数据

  query()方法的返回值具体是什么类型,取决于参数中结果集使用哪一个!!!

10、结果集使用BeanHandler时,传入了一个类.class,此时用到了反射,反射此时做了以下的操作

   1、反射找到类中的无参数构造方法,创建了对象!

   2、通过反射找到了类中的setter方法,为对象的属性完成了赋值(赋值的内容就是表中字段的值)

所以一定要注意,使用的时候

   1、一定要保证无参数构造方法的存在

   2、为了保证属性的赋值的成功,需要属性名与表中的字段名一致。

User user = qRunner.query(connection, "select * from user where uid = ?",new BeanHandler<User>(User.class), 2);

   3、BeanListHandler 的使用,对于多行多列数据的封装到list集合去

/*
	 	BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
	 */
	public static void beanListHandlerDemo() {
		Connection connection = JDBCUtils.getConnection();
		QueryRunner qRunner = new QueryRunner();
		try {
			List<User> users = qRunner.query(connection, "select * from user", 
					new BeanListHandler<User>(User.class));
			for (User user : users) {
				System.out.println(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				DbUtils.close(connection);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值