动态设置bean的属性值(类似于hibernate)
来源:互联网 发布:深圳软件产业基地 5e 编辑:程序博客网 时间:2024/06/05 03:37
不怎么喜欢用框架。感觉很耗时间。所以决定自己写一个,相似的功能。每回在设置bean的属性时总是很麻烦。
所以像让程序动态的去获取bean的属性值。在方法中只要扔一个空的bean和sql进去,就可以返回一个生成好的bean方法。这样使用起来就很方便了。
下面是我的初步的一个探索,很大家分享一下
首先是一个Bean文件
package com.test.string;public class Bean {private int id;private String name;private String pwd;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 String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}}这个没什么。然后是主体类
包含两个方法
package com.test.string;import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.util.HashMap;import java.util.Map;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test {public Bean setBeanFromDB() {try {//这里模拟了数据库查询的内容Map<String, Object> userMap = new HashMap<String, Object>();userMap.put("id", 1001);userMap.put("name", "isoftstone");userMap.put("pwd", "234234");//这里模拟结束Bean bean = new Bean();BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());PropertyDescriptor[] propertyDesc = beanInfo.getPropertyDescriptors();for (int i = 0; i < propertyDesc.length; i++) {if (propertyDesc[i].getName().compareToIgnoreCase("class") == 0)continue;String column = propertyDesc[i].getName();System.out.print(propertyDesc[i].getName()+":");Object strValue = userMap.get(column);System.out.println(strValue);if (strValue != null) {Object[] oParam = new Object[] {};Method mr = propertyDesc[i].getWriteMethod();if (mr != null) {oParam = new Object[] { (strValue) };try {// 注意这里的参数。mr.invoke(bean, oParam);} catch (IllegalArgumentException iea) {System.out.println("参数错误。");iea.printStackTrace();}}}}return bean;} catch (Exception e) {e.printStackTrace();}return null;}public void readBean(Bean bean) {Method metd = null;String fdname = null;try {Field[] fds = bean.getClass().getDeclaredFields();// 获取他的字段数组for (Field field : fds) {// 遍历该数组fdname = field.getName();// 得到字段名,metd = bean.getClass().getMethod("get" + change(fdname), null);// 根据字段名找到对应的get方法,null表示无参数System.out.println(fdname + ":" + metd.invoke(bean, null));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static String change(String src) {if (src != null) {StringBuffer sb = new StringBuffer(src);sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));return sb.toString();} else {return null;}}public static void main(String[] args) {Test test = new Test();Bean bean = new Bean();bean.setId(100);bean.setName("hello");bean.setPwd("hello");test.readBean(bean);System.out.println("from DB-----------");bean = test.setBeanFromDB();}}
关键的地方都加了注释,大家可以跑跑看。
- 动态设置bean的属性值(类似于hibernate)
- Java Bean属性值动态设置
- 类似于淘宝的sku属性选择动态生成
- Hibernate Cascase属性值的设置
- 动态设定Spring中bean的属性
- Spring的Bean作用域(配置javabean时设置scope属性为以下相应值)
- 动态设置控件属性的值
- Hibernate数据库属性hibernate.dialect的设置
- 动态设置HyperLink的属性
- DataGridView1的属性动态设置
- 动态设置js的属性
- Spring的Bean之设置Bean值
- Spring的Bean之设置Bean值
- 使用BeanUtils复制bean的属性,和将request的属性设置到bean中
- 关于Hibernate映射文件中属性generator的值设置
- Java中Bean对象根据属性名称获取和设置其值和Map的性能
- spring2.0中如何设置bean 的singleton属性
- Spring XML设置bean的构造参数和属性方法
- C#3.0 匿名类型
- 前台ji调用后台的方法和后台调用前台js的方法
- C++中#include包含头文件带 .h 和不带 .h 的区别
- 软件的未来
- oracle IMP-00013:只有DBA才能导入由其他DBA导出的文件
- 动态设置bean的属性值(类似于hibernate)
- C51与汇编语言混合编程之一
- Linux常用命令速查备忘(包括我)
- android中简单的HTTP通信
- Java Annotation详解
- 人民日报整版盘点房地产广告
- xfire注入spring完整过程(包括注入其他service)
- In与Exist的区别
- RedHat linux网络配置(直接修改配置文件 非setup)