BeanUtils和DButils

BeanUitls

BeanUtils是Apache Commons组件的成员之一,
主要用于简化JavaBean封装数据的操作。
​
​
简化反射封装参数的步骤,给对象封装参数。
好处: BeanUtils给对象封装参数的时候会进行类型自动转换。

常用的操作有以下三个:

1. 对JavaBean的属性进行赋值和取值。
getProperty()
setProperty()
​
2. 将一个JavaBean所有属性赋值给另一个JavaBean对象中。
copyProperties
​
3. 将一个Map集合的数据封装到一个JavaBean对象中。
populate

BeanUtils的应用场景

1. 快速将一个JavaBean各个属性的值,赋值给具有相同结构的另一个JavaBean中。
​
2. 快速收集表单中的所有数据到JavaBean中。

BeanUtils常用方法

1. public static void setProperty(Object bean, String name, Object value)
给指定对象bean的指定name属性赋值为指定值value。
//如果指定的属性不存在,则什么也不发生。
​
2.public static String getProperty(Object bean, String name)
获取指定对象bean指定name属性的值。
//如果指定的属性不存在,则会抛出异常。
注意:当属性的类型是数组类型时,获取到的值数组中的第一个值。
​
3.public static void copyProperties(Object dest, Object orig)    
将对象orig的属性值赋值给对象dest对象对应的属性
注意:只有属性名名相同且类型一致的才会赋值成功。
​
4. public static void populate(Object bean, Map<String, ? extends Object>
properties)
将一个Map集合中的数据封装到指定对象bean中
注意:对象bean的属性名和Map集合中键要相同

将表单封装成map,进行Javabean封装。

通过request.getParameterMap()获取请求参数Map。

自定义BeanUtils工具类

//自定义的工具类
public class MyBeanUtils {
    public static  Object  populate(Class clazz , Map<String,String> param) {
        Object bean = null;
        try {
            //利用class对象创建对象
            bean = clazz.newInstance();
            BeanUtils.populate(bean, param);
        } catch (Exception e) {
            throw new RuntimeException(e);  
             //如果一个方法内部抛出了一个非运行时异常,那么必须在方法上也要声明抛出。 
            // 如果一个方法内部抛出了一个运行时异常的时候,方法 上可以声明抛出也可以不声明抛出。
        }
        return bean;
    }
​
}

 DBUtils

Dbutils:主要是封装了JDBC的代码,简化dao层的操作。

     作用:帮助java程序员,开发Dao层代码的简单框架。

          框架的作用:帮助程序员,提高程序的开发效率。

     出生:Dbutils是由Apache公司提供。

在使用Dbutils 之前,我们Dao层使用的技术是JDBC,那么分析一下JDBC的弊端:

          (1)数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义

          (2)封装数据的代码重复,而且操作复杂,代码量大

          (3)释放资源的代码重复

               结果:(1)程序员在开发的时候,有大量的重复劳动。(2)开发的周期长,效率低

Dbutils三个核心类介绍:

     1:DbUtils:连接数据库对象----jdbc辅助方法的集合类,线程安全

          构造方法:DbUtils()

          作用:控制连接,控制书屋,控制驱动加载额一个类。

     

     2:QueryRunner:SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。

          构造方法:

          (1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。

                    Connection.setAutoCommit(false);     设置手动管理事务

                    Connection.commit();     提交事务

 

          (2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。

                    DataSource:数据库连接池对象。

 

          构造函数与增删改查方法的组合:

     QueryRunner()

           update(Connection conn, String sql, Object... params)

           query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

 

     QueryRunner(DataSource ds)     

           update(String sql, Object... params)

           query(String sql, ResultSetHandler<T> rsh, Object... params)

 

(3)ResultSetHandle:封装数据的策略对象------将封装结果集中的数据,转换到另一个对象

          策略:封装数据到对象的方式(示例:将数据库保存在User、保存到数组、保存到集合)

     方法介绍:handle(ResultSet rs)

          备注:详解参考ResultSetHandle实现类

 

四:Dbutils快速入门

     使用Dbutils注意事项:

          (1)需要导入的jar包:①MySql驱动     ②c3p0包     ③DbUtils包

          (2)添加c3p0配置文件

          (3)可以自行添加一个JDBCUtils工具类:用来获取c3p0连接池对象

需要结合c3p0使用。

JDBCUtils:


public class DaoUtils {
	private static DataSource source = new ComboPooledDataSource();
	private DaoUtils() {
	}
	
	public static DataSource getSource(){
		return source;
	}
	
	public static Connection getConn(){
		try {
			return source.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
}

增删改查:

//第一步:创建queryRunner对象,用来操作sql语句
 8  
 9 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
10  
11 //第二步:创建sql语句
12  
13 String sql = "insert into user values(null,?,?)";
14  
15 //第三步:执行sql语句,params:是sql语句的参数
16  
17 //注意,给sql语句设置参数的时候,按照user表中字段的顺序
18  
19 try {
20  
21 int update = qr.update(sql, "狗蛋","123456");

//第一步:创建queryRunner对象,用来操作sql语句
40  
41 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
42  
43 //第二步:创建sql语句
44  
45 String sql = "update user set name = ? where id = ?";
46  
47 //第三步:执行sql语句,params:是sql语句的参数
48  
49 //注意,给sql语句设置参数的时候,按照user表中字段的顺序
50  
51 try {
52  
53 int update = qr.update(sql, "柳岩",7);
54  
55 System.out.println(update);

 public void test3(){
70  
71 //第一步:创建queryRunner对象,用来操作sql语句
72  
73 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
74  
75 //第二步:创建sql语句
76  
77 String sql = "delete from user where id = ?";
78  
79 //第三步:执行sql语句,params:是sql语句的参数
80  
81 //注意,给sql语句设置参数的时候,按照user表中字段的顺序
82  
83 try {
84  
85 int update = qr.update(sql, 7);
86  

自定义实现ResultSetHandler封装查询结果集

自定义策略

DbUtils给我们提供了10个ResultSetHandler实现类,分别是:

     ArrayHandler:     将查询结果的第一行数据,保存到Object数组中

      ②ArrayListHandler     将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合

      ③BeanHandler     将查询结果的第一行数据,封装到user对象

     ④BeanListHandler     将查询结果的每一行封装到user对象,然后再存入List集合

     ⑤ColumnListHandler     将查询结果的指定列的数据封装到List集合中

     ⑥MapHandler     将查询结果的第一行数据封装到map结合(key==列名,value==列值)

     ⑦MapListHandler     将查询结果的每一行封装到map集合(key==列名,value==列值),再将map集合存入List集合

     ⑧BeanMapHandler     将查询结果的每一行数据,封装到User对象,再存入mao集合中(key==列名,value==列值)

     ⑨KeyedHandler     将查询的结果的每一行数据,封装到map1(key==列名,value==列值 ),然后将map1集合(有多个)存入map2集合(只有一个)

     ⑩ScalarHandler     封装类似count、avg、max、min、sum......函数的执行结果

测试BeanUtils:

public void test7(){
 8  
 9 //第一步:创建queryRunner对象,用来操作sql语句
10  
11 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
12  
13 //第二步:创建sql语句
14  
15 String sql = "select * from user";
16  
17 //第三步:执行sql语句,params:是sql语句的参数
18  
19 //注意,给sql语句设置参数的时候,按照user表中字段的顺序
20  
21 try {
22  
23 User user = qr.query(sql, new BeanHandler<User>(User.class));
24  
25 System.out.println(user);

其他也是这样弄,只是返回值不同

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值