08 beanutil 使用

Student(bean)

package gz.itcast.d_beanutils;

import java.util.Date;

public class Student {
    private int id;
    private String name;
    private boolean gender;
    private double scroe;
    private Date birth;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isGender() {
        return gender;
    }
    public void setGender(boolean gender) {
        this.gender = gender;
    }
    public double getScroe() {
        return scroe;
    }
    public void setScroe(double scroe) {
        this.scroe = scroe;
    }
    public Date getBirth() {
        return birth;
    }
    public void setBirth(Date birth) {
        this.birth = birth;
    }
    @Override
    public String toString() {
        return "Student [birth=" + birth + ", gender=" + gender + ", id=" + id
                + ", name=" + name + ", scroe=" + scroe + "]";
    }
    
}

导包:

beanutils的作用:

  1. 拷贝一个javabean对象的属性
  2. 从一个javabean对象拷贝到另一个javabean对象
  3. 从一个map集合中拷贝到一个javabean中(包括)

示例:

public class Demo1 {

    public static void main(String[] args) throws Exception {
        //t1(); 
        
        //t2();
        
        /**
         * 3)从一个map集合中拷贝到一个javabean中(包括)
         * 注意: 
         *  1)只拷贝javabean存在的哪些属性(setXXX方法)
         *  2)需要拷贝的数据是数组类型,那么只拷贝数组中的第一个元素。
         *  3)经常使用在获取表单提交参数上
         */
        ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
        Map map = new HashMap();
        //map.put("name", "jacky");
        map.put("name", new String[]{"jacky","eric"});//字符串数组
        map.put("id", "4");
        map.put("gender", "true");
        map.put("scroe", "86.43");
        map.put("birth","2015-06-05");
        
        Object s2 = Class.forName("gz.itcast.d_beanutils.Student").newInstance();
        
        //把一个map的数据拷贝到s2中
        BeanUtils.copyProperties(s2, map);
        
        //获取表单提交的数据(表彰组件的name属性一定要和bean类的属性匹配哦!)
        /*Map map = request.getParameterMap();//获取参数列表map
        BeanUtils.copyProperties(s2, map);*/
    }

    private static void t2() throws InstantiationException,
            IllegalAccessException, ClassNotFoundException,
            InvocationTargetException {
        /**
         * 2)从一个javabean对象拷贝到另一个javabean对象
         *
         */
        Student s = new Student();
        s.setId(1);
        s.setName("eric");
        s.setScroe(87.23);
        s.setGender(true);
        s.setBirth(new Date());
        
        
        Object s2 = Class.forName("gz.itcast.d_beanutils.Student").newInstance();
        
        //把s对象拷贝到s2对象中
        /**
         * 参数一:拷贝到的对象
         * 参数二: 原来的对象 
         */
        BeanUtils.copyProperties(s2, s);
        
        System.out.println(s2);
    }

    private static void t1() throws InstantiationException,
            IllegalAccessException, ClassNotFoundException,
            InvocationTargetException {

        //原来创建一个对象并赋值(这样依赖性很强,如果没有导入Student包会报错)
        /*Student s = new Student();
        s.setId(1);
        s.setName("eric");
        s.setScroe(87.23);
        s.setGender(true);
        s.setBirth(new Date());*/
        
        
    
        /**
         * 通过反射构造对象
         */
        Object s2 = Class.forName("gz.itcast.d_beanutils.Student").newInstance();
        
        //1)把id,name属性值从s对象拷贝到s2的对象中
        /**
         * 参数一: 拷贝到的对象
         * 参数二: 拷贝的属性
         * 参数三: 拷贝的值
         */
        //s2.setId(s.getId());
        /*BeanUtils.copyProperty(s2, "id", s.getId()); //不需要依赖Student对象
        BeanUtils.copyProperty(s2, "name", "jacky");
        BeanUtils.copyProperty(s2, "gender", true);
        BeanUtils.copyProperty(s2, "scroe", 90.23); 
        BeanUtils.copyProperty(s2, "birth", new Date()); */
        

        /**
         * 注意:
         *  1)拷贝的方法能够自动将String的类型转换对应的类型的属性.例如 :  "2"(String) -》 int(String->int)  "97.23"(String) -> double (String->double)
         *  2)如果要支持从String转为Date,那么需要手动注册一个日期转换器 
         *      
         */

        /**
         * 注册一个日期转换器
         * 参数一: 需要注册的转换器
         *    DateLocaleConverter: 支持从String->Date
         * 参数二: 转换到的类型
         *     
         */
        ConvertUtils.register(new MyDateConvert(), java.util.Date.class);
        
        BeanUtils.copyProperty(s2, "id", "2"); //不需要依赖Student对象
        BeanUtils.copyProperty(s2, "name", "jacky");
        BeanUtils.copyProperty(s2, "gender", "true");
        BeanUtils.copyProperty(s2, "scroe", "90.23"); 
        BeanUtils.copyProperty(s2, "birth","2015/06/24 16:11:30");  //String->Date(默认情况,不支持直接从String转为Date)
        
        System.out.println(s2);
    }
    
}
/**
 * 自定义日期转换器
 * @author APPle
 *
 */
class MyDateConvert implements Converter{

    /**
     * target: 转换为什么类型
     * value: 需要转换的值
     * 该方法返回的转换后的值
     */
    @Override
    public Object convert(Class target, Object value) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
            //如果需要转换成Date类型,则进行转换
            if(target==Date.class){
                String date = (String)value;
                //把string按照某种转换Date
                Date curDate = sdf.parse(date);
                return curDate;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,789评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 我饿了,可我什么都不想吃。 我待在寝室看书,时间久了,饿了。可我什么都不想吃。 我的寝室里有很多...
    久下bym阅读 181评论 0 0
  • 真情长久在,虽无言也暖 荏苒的岁月静然流淌而无言 然冬日的暖阳依旧温婉明媚 如此难得周末闲暇 惬意而又小...
    别具一格格阅读 687评论 4 10