`

判断一个对象的值是否为空、根据column获取想对应的数据库字段

    博客分类:
  • java
 
阅读更多

 

public class ClazUtil {
	
	private static Logger logger = LoggerFactory.getLogger(ClazUtil.class);

    public static String verifyDTO(Object o,String[] names) {
    	if(o == null){
    		String msg = "接口参数data不能为空!";
    		logger.error(msg);
    		return msg;
    	}
    	
    	if(names == null || names.length == 0){
    		String msg = "名字不能为空!";
    		logger.error(msg);
    		return "";
    	}
    	
    	StringBuffer error = new StringBuffer();
    	Object[] values = ClazUtil.getFiledValues(o);
    	String[] types = ClazUtil.getFiledTypes(o);
    	
    	if(values.length != names.length) {
    		logger.error("名字和属性个数不匹配!");
    		return "";
    	}
    	
    	for(int i = 0;i < values.length;i++){
    		Object value = values[i];
    		String type = types[i];
    		String name = names[i];
    		try {
				Class<?> typeClaz = Class.forName(type);
				if(typeClaz == String.class){
					if(StringUtils.isEmpty(String.valueOf(value)) || value == null) error.append(name).append("为空!\n");
				}else{
					if(value == null) error.append(name).append("不能为空!\n");
				}
			} catch (ClassNotFoundException e) {
				logger.error(e.getMessage());
				continue;
			}
    	}
    	return error.toString();
    }
    
    /**
     * 获取对象的所有属性值,返回一个对象数组
     */
    public static Object[] getFiledValues(Object o) {
    	Field[] fields = o.getClass().getDeclaredFields();
    	
        Object[] value = new Object[fields.length];
        for (int i = 0; i < fields.length; i++) {
        	Object mValue = null;
        	try {
        		String filedName = fields[i].getName();
	        	String firstLetter = filedName.substring(0, 1).toUpperCase();
	            String getter = "get" + firstLetter + filedName.substring(1);
	            Method method = o.getClass().getMethod(getter, new Class[] {});
	            mValue = method.invoke(o, new Object[] {});
        	} catch (Exception e) {
            	logger.error(e.getMessage(), e);
            }
            value[i] = mValue;
        }
        return value;
    }
    
    /**
     * <p>date: 2015年8月13日 上午10:06:03</p>
     * <p>description: 获取对象的所有类型 </p>
     * @author muzi131313
     * @param
     * @return
     */
    public static String[] getFiledTypes(Object o){
    	Field[] fields = o.getClass().getDeclaredFields();
        String[] fieldTypes = new String[fields.length];
        for (int i = 0; i < fields.length; i++) {
        	String type = fields[i].getType().toString();
        	if(type.contains("class ")) type = type.replaceAll("class ", "");
            fieldTypes[i] = type;
        }
        return fieldTypes;
    }
    
    
	/**
	 * <p>date: 2015年6月24日 下午12:18:09</p>
	 * <p>description: 获取实例变量名称和@column注解中name </p>
	 * @author muzi131313
	 * @param 带有@Column注解的pojo的类
	 * @return Map<filedName,columnName>
	 */
    public static Map<String,String> getFiledNameAndColumnName(Class<?> claz) {
        Field[] fields = claz.getDeclaredFields();
        Map<String,String> map = new HashMap<String,String>();
        for (int i = 0; i < fields.length; i++) {
        	Field field = fields[i];
        	String fieldName = field.getName();
        	
        	Annotation[] as = field.getAnnotations();
        	for(Annotation a : as){
        		Class<?> type = a.annotationType();
        		if(type == javax.persistence.Column.class){
        			try {
        				javax.persistence.Column c = (javax.persistence.Column)a;
        				String columnName = c.name();
        				if(StringUtils.isEmpty(columnName)){
        					columnName = fieldName;
        				}
        				map.put(fieldName, columnName);
					} catch (Exception e) {
						e.printStackTrace();
					}
        		}
        	}
        }
        return map;
    }
    
    public static void main(String[] args) {
    	
	}

	
}

 

 

分享到:
评论

相关推荐

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发效率,节约时间成本。 3、该工具类使用非常简单。只需要...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊

    ddl语言自定义数据库字段

    ddl语言自定义数据库字段 &lt;!--#include virtual="/public/back_top.asp"--&gt; &lt;html&gt;&lt;br&gt;&lt;head&gt;&lt;br&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; &lt;link href="member/css/common....

    MYSQL常用命令大全

    例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0 mysql&gt; alter table MyClass add passtest int(4) default '0' 8、更改表名: 命令:rename table 原表名 to 新表名; 例如:在表MyClass名字...

    数据库操作语句大全(sql)

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...

    解析如何查看Oracle数据库中某张表的字段个数

    Oracle中查询某个表的总字段数,要用SQL语句,或者在PL/SQL里面 代码如下:select count(column_name) from user_tab_columns where table_name=’T_B_AUDITOR’能够查出来指定的那张表的字段数。下面是通过大致查看...

    实体类属性名和数据库字段名不同时的解决方案

    方案一: 在XML映射文件中使用的resultMap, 优点:可以被重复使用。 通过里面的id标签和result标签来建立映射关系,由property和column分别指定实体类属性和数据表的列名。 方案二: 让字段的别名与实体类的...

    mssql数据库中的表、字段sql语句

    在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行。 列名 数据类型 说明 name sysname 对象名 id int 对象标识号 xtype char(2) 对象类型。可以是以下对象类型...

    数据库系统原理(04735-2018年版)-数据库系统概述笔记.doc

    关系(Relation)一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标 识。 列(Column)表中的列,也称作字段(Field)或属性(Attribute)。表中每一列有一 个名称,称为列名、字段名或属性名,每一列...

    hibernate配置

    数据库中表的其它字段所对应的持久化对象中的属性名" column="对应数据库中表的其它字段名" type="java.lang.String(数据库中其它字段的数据类型)"/&gt; 三.配置hibernate.cfg.xml文件:该文件需放在src目录下 ...

    orcale常用命令

     dictionary 全部数据字典表的名称和解释,它有一个同义词dict dict_column 全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: SQL&gt;select * from dictionary ...

    jdbc基础和参考

    线程安全的,一个数据库对应一个Sessionfactory(一般一个应用程序对应一个SessionFactory就够了) 3.是一个很大的缓存,本身维护了一个可配置的二级缓存 4.用来构建Session对象 Configuration 1.启动和配置...

    MySQL命令大全

    例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为 mysql&gt; alter table MyClass add passtest int(4) default ’′ 8、更改表名: 命令:rename table 原表名 to 新表名; 例如:在表MyClass...

    Mindsware动态数据对象平台v0.2版发布

    4、使用一个用户自定义的类完成对一张数据库表的schema定义,继承一个DBObject或者 MultiDBObject类(这个名字学习自一个开源项目expresso,功能也类似),只要 定义好schema,也就是手动设定一下每个column的名称、...

    乐优商城.xmind

    判断集合是否为空 测试 可以利用url直接查询数据库,能否访问得到数据 报错 启动类 没有扫描到 @MapperScan("com.leyou.item.mapper") ,目录结构关系 访问网页报错 CORS policy: No 'Access-Control-Allow-...

    hibernate框架环境x

    头信息就不多说了,首先写好一个hibernate-mapping首尾标记,在标记内映射我们相对应的实体类...id标记为我们数据库的主键配置相关信息,同理name属性中的属性值为我们实体类对象的属性,column为数据库对应表的字段。

    SQL语法大全

    这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括...

    PB数据窗口source介绍及举例

    如果想创建一个空的数据窗口,可以只定义: release 12; table() 5.table(column行) 是第几个column,它的ID就是多少,其中也定义了是否可以update时和更新到数据表的字段名 6.table(retrieve行) 检索数据时使用的SQL...

    jpivot学习总结.doc

    好比是一张部门表,在一张表里表现部门的上下级关系,一个是主键,肯定还有一个字段为连接到该主键的外键的列名,这里的 parentColumn 指的就是这个列名。 nullParentValue 如果当前的 Level 是有上下级关系(设置...

    python操作mysql数据库

    一、数据库基本操作 ...5. 创建一个新的字段 alter table students add column nal char(64);  PS: 本人是很讨厌上面这种“简单解释+代码”的博客。其实我当时在mysql终端写了很多的实例,不过因为当时电脑运行一

Global site tag (gtag.js) - Google Analytics