Java:JavaBean和BeanUtils
本文内容:
- 什么是JavaBean
- JavaBean的使用
- BeanUitls
- 利用DBUtils从数据库中自动加载数据到javabean对象中
首发日期:2018-07-21
什么是JavaBean
- JavaBean是一种遵循开发规范的一种类。在JavaWeb开发中,经常用来存储实体信息,比如用户实体信息,实体信息不应该是散乱的,它应该是一个整体(就好像从数据库取出一个用户的年龄,id,手机等数据,这些数据应该归属于一个对象,而不应该用某个单纯变量来存储),所以才需要javabean。而为了规范开发,以及规范使用规则,所以需要按照一定规则来定义JavaBean。
- 只有符合以下规则的才是一个javabean:
- 必须要有一个无参构造函数【一些地方的javabean的使用需要利用反射,所以需要无参构造函数】
- 所有属性必须私有化【私有规则】
- 私有化的属性必须提供public类型的getter、setter方法,对于boolean类型的可以使用isXxx来代替。【getXxx()和setXxx()中的属性名首字母要大写(这是一种规则,不然的话,一些例如jsp中的使用“对象.属性名”将无法获取,因为调用的是对应的getter函数)】
JavaBean的使用
JavaBean的定义:

在以前,因为jsp中存在<jsp:usebean>标签可以直接创建一个javabean对象,所以以前也会这样使用。但由于开发规范化【页面和功能相分离】和技术更新,已经逐渐少使用这个方法。不过这里还是演示一下
jsp中的用法:
创建对象:
<jsp:useBean id="对象名" class="类字节码路径" scope="域对象"/>【scope是指这个对象放到哪里去】
赋值对象:
<jsp:setProperty property="属性名" name="对象名" value="值" />
获取:
<jsp:getProperty property="属性名" name="对象名" />
【由于jsp有很多获取对象的属性方法,所以上面仅仅是指能直接创建对象的用法】
现在一般都是直接封装数据后直接传给jsp使用,所以jsp中处理的就是取值问题而已。如何封装才是servlet的问题(这里以基础的servlet为例)。
Servlet中的用法:
在servlet中封装信息:

在jsp中获取:

BeanUitls
- BeanUtils是Apache开发的一种工具。
- BeanUtils可以帮助我们把属性封装到javabean对象的对应属性中,比如可以把提交的表单数据封装到一个实体对象中。
- 封装时要求参数名称和javabean的属性名相同
使用:
1.导入必须包:主要是logging包和beanutils包
- commons‐beanutils‐1.9.3.jar 【工具核心包 】
- commons‐logging‐1.2.jar 【日志记录包 】
- commons‐collections‐3.2.2.jar 【增强的集合包】
2.把包右键build path-->add to build path
3.调用函数:
- 根据属性名手动赋值:这种方式与普通的一个个set没什么区别,少用为妙

- 自动对应赋值:【下面给的map是表单提交的,但其他的map也是可以的,只要key与属性名相同】

数据转换问题:
如上所示,当使用自动赋值时,BeanUtils会帮助我们把值赋给bean,不过你可能没留意的是,提交上来的age是字符串的,但还是成功赋值给bean中的int类型的age了。这是因为BeanUtils有基本类型转换机制,String之类的可以转成基本数据类型。
但非基本数据类型之间是没有默认转换机制的,所以需要你自己去定义。当然BeanUtils也给了我们不少可以用来转换的转换器
。下面以自定义的时间转换器String转Date为例,表单提交的日期是字符串的:
1.定义转换器类(实现Converter),也可以用匿名实现类来定义

2.注册转换器:ConvertUtils.register(转换器对象,类型.class)【注意不要导错类型】

其他有用的功能:
- 属性拷贝:把一个javaBean的属性拷贝到另一个javaBean对象中
BeanUtils.copyProperties(destinationObj,sourceObj)【第一个参数是目的地,第二个是拷贝源;如果第二个参数是map类型的,那么与populate功能类似;两个参数中间还可以提供一个String类型的参数,代表只复制某一个参数】
- 获取指定属性:BeanUtils.getProperty(bean,name)【如果指定的属性不存在,则会抛出异常】
补充:
- BeanUtils除了赋值这个大功能外,还有不少小功能,但可能比较少有,如果你想要了解更多可以自己去看一下它有什么函数,可以根据函数名和参数类型来揣测函数的功能。
从数据库中自动加载数据到javabean中
可以参考我的另外一篇博文""中的DBUtils的使用来了解jdbc中是如何从数据库中自动加载数据到javabean中
https://www.cnblogs.com/progor/p/9096463.html
Java:JavaBean和BeanUtils的更多相关文章
- java web 之 BeanUtils.populate的作用
首先,它是在org.apache.commons.beanutils.BeanUtils包中的一个方法. 方法的作用:用来将一些 key-value 的值(例如 hashmap)映射到 bean 中的 ...
- 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
该方法对于两种不同的jar包有两种不同的意义 ,a,b通常是两个结构相似的javabean,注意:a,b里的定义类型名称必须一致才能复制 引用的是org.springframework.beans 则 ...
- java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析
根据xml文件设计Student对象 <?xml version="1.0" encoding="UTF-8"?> <students> ...
- java 包之 BeanUtils包的使用
BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1) BeanUtils相 ...
- 黑马程序员——【Java高新技术】——JavaBean、注解
---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...
- java高新技术-操作javaBean
1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...
- apache commons Java包简介
更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanU ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
- JAVA提高四:反射基本应用
在前面一节<http://www.cnblogs.com/pony1223/p/7659210.html>,我们学习了JAVA的反射的相关知识,那么本节我们对前面所学习的知识做一个应用相关 ...
随机推荐
- AutoCloseable的用法
今天学习JDBC的时候查看了接口Statement的executeQuery()方法的时候偶然发现了一个新的接口: 看到红笔圈出的那句话当时没反应过来,才知道是接口的多继承,但是后面的那个接口并没有见 ...
- jenkins 'cordova' command not recognised on Jenkins Windows slave
在jenkins里构建ionic项目.在构建Execute Windows bath command 执行 cordova 跟ionic 命令失败.但是运行cmd却能够执行成功. 惊不惊喜 意不意外, ...
- dedecms文档长尾关键词,根据频率先替换长尾关键词再替换主关键词
问题:在使用dedecms的文档关键词替换功能时,会造成交叉替换 如: 长尾关键词1:男人喝金丝皇菊有什么好处? 长尾关键词2:喝金丝皇菊有什么好处? 主关键词3:金丝皇菊 使用系统默认的功能时,在替 ...
- ElasticSearch入门1: mac 安装
入门学习顺序: 1. 安装: 1.1 单实例安装: Elastic官方网站: http://www.elastic.co 下载 ElasticSearch: 第一步:点击下载 第二步:点击downlo ...
- django 模板层排序 class Meta 添加信息
class weeks(models.Model): #星期信息 stu = models.ForeignKey(students,on_delete=models.CASCADE) weeklist ...
- 如何正确的在项目中接入微信JS-SDK
微信JS-SDK的功能 如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了.微信的官方文档描述如下. 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. ...
- 阿里AI设计师一秒出图,小撒连连惊呼,真相是...
近期,央视<机智过人>的舞台上来了位“三超设计师”——设计能力超强:出图能力超快:抗压能力超强,成功迷惑嘉宾和现场观众,更让撒贝宁出错三连. 节目一开场,这位“设计师”就为现场嘉宾:主持人 ...
- 解决Linux下Jexus验证码无法显示
1:安装mono相关字体 yum install -y dejavu-fonts-common dejavu-lgc-sans-mono-fonts 2:重启jexus /usr/jexus/jws ...
- shiro源码篇 - 疑问解答与系列总结,你值得拥有
前言 开心一刻 小明的朋友骨折了,小明去他家里看他.他老婆很细心的为他换药,敷药,然后出去买菜.小明满脸羡慕地说:你特么真幸福啊,你老婆对你那么好!朋友哭得稀里哗啦的说:兄弟你别说了,我幸福个锤子,就 ...
- 【mac】ansible安装及基础使用
安装 环境释放 mac 10.12.5 #more /System/Library/CoreServices/SystemVersion.plist 安装命令 #ruby -e "$(cur ...