zoukankan      html  css  js  c++  java
  • 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 }
    View Code

    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 }
    View Code
  • 相关阅读:
    Ubuntu中的解压缩文件的方式 分类: Java 2014-07-20 22:33 1264人阅读 评论(0) 收藏
    Ubuntu下安装JDK图文解析 分类: Java 2014-07-20 21:28 4565人阅读 评论(3) 收藏
    数据结构和算法设计专题之---24点游戏(穷举法和递归法) 分类: Java 2014-07-18 21:26 789人阅读 评论(0) 收藏
    数据结构和算法设计专题之---单链表的逆序 分类: Java 2014-07-18 21:24 562人阅读 评论(1) 收藏
    Android中实现静态的默认安装和卸载应用 分类: Android 2014-07-02 22:43 5952人阅读 评论(19) 收藏
    Git的使用方法 分类: Java 2014-06-18 18:34 520人阅读 评论(0) 收藏
    J2EE学习篇之--JQuery技术详解 分类: JavaWeb 2014-06-18 11:35 1958人阅读 评论(1) 收藏
    MyEclipse6.0中使用aptana插件,添加jquery提示功能 分类: JavaWeb 2014-06-04 15:35 648人阅读 评论(0) 收藏
    Android中如何搭建一个WebServer 分类: Android 2014-06-01 14:44 8708人阅读 评论(3) 收藏
    J2EE学习篇之--Spring技术详解 分类: JavaWeb 2014-05-28 10:15 1109人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/nicker/p/6820475.html
Copyright © 2011-2022 走看看