BeanUtils&&DbUtils

BeanUtils

程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件。

BeanUtils的作用是简化对javaBean的操作。

可以从www.apache.org下载BeanUtils组件,然后再在项目中引入jar文件!需要引入的jar文件有:

1、引入commons-beanutils-1.8.3.jar核心包
2、引入日志支持包: commons-logging-1.1.3.jar

基本用法

1、对属性的拷贝

BeanUtils.copyProperty(admin, "userName", "jack");
BeanUtils.setProperty(admin, "age", 18);

2、对象的拷贝

BeanUtils.copyProperties(newAdmin, admin);

3、map数据拷贝到javaBean中,map中的key必须要和javaBean的属性名一致。

BeanUtils.populate(adminMap, map);

4、BeanUtils对javabean中的基本数据类型是不需要做特殊处理的,但是对日期就必须转化处理了,其中有两种处理方式

(1)自定义转化器

 1 //2. 自定义日期类型转换器
 2     @Test
 3     public void test2() throws Exception {
 4         // 模拟表单数据
 5         String name = "jack";
 6         String age = "20";
 7         String birth = "   ";
 8
 9         // 对象
10         Admin admin = new Admin();
11
12         // 注册日期类型转换器:1, 自定义的方式
13         ConvertUtils.register(new Converter() {
14             // 转换的内部实现方法,需要重写
15             @Override
16             public Object convert(Class type, Object value) {
17
18                 // 判断
19                 if (type != Date.class) {
20                     return null;
21                 }
22                 if (value == null || "".equals(value.toString().trim())) {
23                     return null;
24                 }
25
26
27                 try {
28                     // 字符串转换为日期
29                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
30                     return sdf.parse(value.toString());
31                 } catch (ParseException e) {
32                     throw new RuntimeException(e);
33                 }
34             }
35         },Date.class);
36
37
38
39         // 把表单提交的数据,封装到对象中
40         BeanUtils.copyProperty(admin, "userName", name);
41         BeanUtils.copyProperty(admin, "age", age);
42         BeanUtils.copyProperty(admin, "birth", birth);
43
44         //------ 测试------
45         System.out.println(admin);
46     }

(2)使用BeanUtils自己的日期转化器

 1 //2. 使用提供的日期类型转换器工具类
 2     @Test
 3     public void test3() throws Exception {
 4         // 模拟表单数据
 5         String name = "userName";
 6         String age = "20";
 7         String birth = null;
 8
 9         // 对象
10         Admin admin = new Admin();
11
12         // 注册日期类型转换器:2, 使用组件提供的转换器工具类
13         ConvertUtils.register(new DateLocaleConverter(), Date.class);
14
15         // 把表单提交的数据,封装到对象中
16         BeanUtils.copyProperty(admin, "userName", name);
17         BeanUtils.copyProperty(admin, "age", age);
18         BeanUtils.copyProperty(admin, "birth", birth);
19
20         //------ 测试------
21         System.out.println(admin);
22     }
23 }

DbUtils组件

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

Dbutils组件需要引入的jar文件:commons-dbutils-1.6.jar

常用API

|-- DbUtils   关闭资源、加载驱动
|-- QueryRunner   组件的核心工具类:定义了所有的与数据库操作的方法(查询、更新)
  Int  update(Connection conn, String sql, Object param);   执行更新带一个占位符的sql
  Int  update(Connection conn, String sql, Object…  param); 执行更新带多个占位符的sql
  Int[]  batch(Connection conn, String sql, Object[][] params)        批处理
  T  query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)   查询方法

  Int  update( String sql, Object param);  
  Int  update( String sql, Object…  param);
  Int[]  batch( String sql, Object[][] params)       
注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);

DbUtils提供的封装结果的一些对象:
  1)BeanHandler: 查询返回单个对象
  2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
  3)  ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
  4)  ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
  5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
  6)  MapHandler  查询返回结果的第一条记录封装为map

使用示例:

1、查询

 1 public class App_query {
 2
 3     private Connection conn;
 4
 5     // 一、查询, 自定义结果集封装数据
 6     @Test
 7     public void testQuery() throws Exception {
 8         String sql = "select * from admin where id=?";
 9         // 获取连接
10         conn = JdbcUtil.getConnection();
11         // 创建DbUtils核心工具类对象
12         QueryRunner qr = new QueryRunner();
13         // 查询
14         Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {
15
16             // 如何封装一个Admin对象
17             public Admin handle(ResultSet rs) throws SQLException {
18                 if (rs.next()) {
19                     Admin admin = new Admin();
20                     admin.setId(rs.getInt("id"));
21                     admin.setUserName(rs.getString("userName"));
22                     admin.setPwd(rs.getString("pwd"));
23                     return admin;
24                 }
25                 return null;
26             }
27
28         }, 29);
29
30         // 测试
31         System.out.println(admin);
32         // 关闭
33         conn.close();
34
35     }
36
37     // 二、查询, 使用组件提供的结果集对象封装数据
38
39     // 1)BeanHandler: 查询返回单个对象
40     @Test
41     public void testQueryOne() throws Exception {
42         String sql = "select * from admin where id=?";
43         // 获取连接
44         conn = JdbcUtil.getConnection();
45         // 创建DbUtils核心工具类对象
46         QueryRunner qr = new QueryRunner();
47         // 查询返回单个对象
48         Admin admin =  qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
49
50         System.out.println(admin);
51         conn.close();
52     }
53
54     // 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
55     @Test
56     public void testQueryMany() throws Exception {
57         String sql = "select * from admin";
58         conn = JdbcUtil.getConnection();
59         QueryRunner qr = new QueryRunner();
60         // 查询全部数据
61         List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
62
63         System.out.println(list);
64         conn.close();
65     }
66     @Test
67 //    3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
68 //    4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
69 //    5) ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
70 //    6) MapHandler  查询返回结果的第一条记录封装为map
71     public void testArray() throws Exception {
72         String sql = "select * from admin";
73         conn = JdbcUtil.getConnection();
74         QueryRunner qr = new QueryRunner();
75         // 查询
76         //Object[] obj = qr.query(conn, sql, new ArrayHandler());
77         //List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
78         //Long num = qr.query(conn, sql, new ScalarHandler<Long>());
79         Map<String, Object> map = qr.query(conn,sql, new MapHandler());
80
81         conn.close();
82     }
83 }

2、更新

 1 import java.sql.Connection;
 2
 3 import org.apache.commons.dbutils.DbUtils;
 4 import org.apache.commons.dbutils.QueryRunner;
 5 import org.junit.Test;
 6
 7 import cn.itcast.utils.JdbcUtil;
 8
 9 public class App_update {
10
11     private Connection conn;
12
13     // 1. 更新
14     @Test
15     public void testUpdate() throws Exception {
16         String sql = "delete from admin where id=?";
17         // 连接对象
18         conn = JdbcUtil.getConnection();
19
20         // 创建DbUtils核心工具类对象
21         QueryRunner qr = new QueryRunner();
22         qr.update(conn, sql, 26);
23
24         // 关闭
25         DbUtils.close(conn);
26     }
27
28     // 2. 批处理
29     @Test
30     public void testBatch() throws Exception {
31         String sql = "insert into admin (userName, pwd) values(?,?)";
32         conn = JdbcUtil.getConnection();
33         QueryRunner qr = new QueryRunner();
34         // 批量删除
35         qr.batch(conn, sql, new Object[][]{ {"jack1","888"},{"jack2","999"}  });
36
37         // 关闭
38         conn.close();
39     }
40 }

时间: 2024-10-17 02:44:36

BeanUtils&&DbUtils的相关文章

BeanUtils\DBUtils

BeanUtil: 需要导入 beanutil包和logging日志包 用于给对象属性赋值. setProperty与copyProperty区别: 这个问题搁置,还不会. 将map数据拷贝到对象中,用populate(居住的意思),map中的的key要与对象属性名称保持一致. 要保存类似日期这种类型,需要注册转换器: 用转换工具类:ConvertUtils.register(new DateLocalConverter(),Date.class);然后在进行转换. 处理请求数据的封装: 通过对

元数据和DbUtils

使用元数据可以在jdbc中获取数据库的定义,例如:数据库.表.列的定义信息. 在jdbc中可以使用: 数据库元数据.参数元数据.结果集元数据. 1.DataBaseMetaData对象 Connection.getDatabaseMetaData() getURL():返回一个String类对象,代表数据库的URL. getUserName():返回连接当前数据库管理系统的用户名. getDatabaseProductName():返回数据库的产品名称. getDatabaseProductVe

第14天dbutils与案例

第14天dbutils与案例 第14天dbutils与案例????1 1.????1.dbutils介绍????2 2.????2.dbutils快速入门????2 3.????3.dbutils API详解-DbUtils类????2 4.????4.dbutils API详解-QueryRunner类????2 5.????5.dbutils API详解-ResultSetHandler????3 6.????6.ResultSetHandler实现类介绍????3 7.????7.案例--

Java BeanUtils 组件 使用

1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils组件,  作用是简化javabean的操作! 用户可以从www.apache.org下载BeanUtils组件,然后再在项目中引入jar文件! 使用BenUtils组件: 1. 引入commons-beanutils-1.8.3.jar核心包 2. 引入日志支持包: commons-logging-

我也来写DBUtils

关于重复造轮子 作为一个程序员,我们不止一次听到师长前辈们说:不要重复造轮子,已经有现成的了,直接用就是了. 对于这个观点,我觉得得仔细分析分析. 如果我们正在做一个真实的项目,经理天天追在我们屁股后面问进度.我想只要是个正常的程序员,肯定不会想去再造一个"轮子". 但是,程序员不是年年月月,每一天都在赶项目.那么在我们闲暇的时候,看看业内已经有的轮子,仔细分析一下轮子的构造,自己就权当是学习,再造一次轮子又何妨? 既然这个轮子已经是业内普遍接受的,那么代码的质量毋庸置疑,最起码一定比

DBUtils的使用

DButils是apache旗下Commons项目中的一个JDBC工具包,它可以为帮助我们简化对JDBC的操作,但它并不是一个ORM框架,只是可以为我们执行sql,并将返回的ResultSet转化成我们想要的对象. import com.kastiny.orm.domain.User; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import or

BenUtils组件和DbUtils组件

[TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即BeanUtils组件BeanUtils组件的作用就是简化javabean的操作 使用BeanUtils组件 引入commons-beanutils-1.8.3.jar核心包 引入日志支持包: commons-logging-1.1.3.jar即使用BeanUtils必须导入两个包才可以 1.2.基本用法,对象属性,对象,map的拷贝 Be

Java:JavaBean和BeanUtils

本文内容: 什么是JavaBean JavaBean的使用 BeanUitls 利用DBUtils从数据库中自动加载数据到javabean对象中 首发日期:2018-07-21 什么是JavaBean JavaBean是一种遵循开发规范的一种类.在JavaWeb开发中,经常用来存储实体信息,比如用户实体信息,实体信息不应该是散乱的,它应该是一个整体(就好像从数据库取出一个用户的年龄,id,手机等数据,这些数据应该归属于一个对象,而不应该用某个单纯变量来存储),所以才需要javabean.而为了规

JAVA中反射机制五(JavaBean的内省与BeanUtils库)

内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package com.peidasoft.in