- /**
- 这里代码的意思是传进来一个object,检查里面有没有空值,如果有空值,则赋给默认值,最后传出一个没有空值的object,防止入库的时候发生空值错误
- **/
- package com.copote.xmove4Frame.util;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- /**
- * bean的反射,检查出bean中的值是否包含空值,如果为空,则赋默认值
- * @author Don Quixote
- * Dec 26, 2008 12:51:30 PM
- * Hello,Don Quixote!
- */
- public class BeanReflect {
- public Object beanReflect(Object object){
- Method metd = null;
- String fdname = null;
- Class cs = object.getClass();// 获取集合中的对象类型
- Field[] fds = cs.getDeclaredFields();// 获取他的字段数组
- for (Field field : fds) {// 遍历该数组
- fdname = field.getName();// 得到字段名,
- try {
- //先获取相应的method对象
- //getMethod第一个参数是方法名,第二个参数是该方法的参数类型,
- //因为存在同方法名不同参数这种情况,所以只有同时指定方法名和参数类型才能唯一确定一个方法
- // 根据字段名找到对应的get方法,null表示无参数
- metd = cs.getMethod("get" + change(fdname), null);
- //第一个参数是具体调用该方法的对象
- //第二个参数是执行该方法的具体参数
- Object value = metd.invoke(object, null);// 调用该字段的get方法
- //当value不为空的时候
- if(value==null){
- //当得到的属性值不包含表的主键值的时候
- BeanReflect brf=new BeanReflect();
- brf.beanf(object,fdname,"0");
- }
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SecurityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return object;
- }
- //将src的第一个字母转换为大写,src为空时返回null
- public 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;
- }
- }
- //判断一个字符串是否为空,包含字符串全部由空格组成的情况
- //如果为空,返回true
- public boolean blankTest(Object ob){
- boolean rv=false; //返回值,为空,返回true
- if(ob==null){
- rv=true;
- }else{
- String st=ob.toString();
- int sl=st.length();
- if(sl==0) rv=true;
- for(int i=0;i<sl-1;i++){
- if(st.substring(i, i+1)!=" "){
- rv=false;
- }
- }
- }
- return rv;
- }
- //判断tableKeyArr是否包含
- public boolean tableKeyTest(String[] tableKeyArr,String st){
- for(int i=0;i<tableKeyArr.length;i++){
- if(tableKeyArr[i].contains(st)) return true;
- }
- return false;
- }
- public void beanf(Object bean,String nullValueName,Object value){
- Method[] methods = bean.getClass().getDeclaredMethods();
- String methodName;
- String methodNameFix;
- String field = nullValueName;
- try {
- for (int i = 0; i < methods.length; i++) {
- methodName = methods[i].getName();
- methodNameFix = methodName.substring(3, methodName.length());
- methodNameFix = methodNameFix.toLowerCase();
- if (methodName.startsWith("set")) {
- if (methodNameFix.equals(field)) {
- Object[] objs = new Object[1];
- objs[0] = value;
- methods[i].invoke(bean, objs);
- // 激活obj相应的set方法,///objs数组存放调用该方法的参数
- continue;
- }
- }
- }
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
利用反射动态生成sql语句
最新推荐文章于 2022-03-27 12:48:04 发布