`

判断一个对象的值是否为空、根据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) {
    	
	}

	
}

 

 

分享到:
评论

相关推荐

    Hibernate 配置跟数据库字段的对应关系

    `@Column`注解的`name`属性指定了数据库中的列名,`nullable`属性控制该字段是否允许为空。`@Id`注解标识了主键,`@GeneratedValue`则用于指定主键生成策略。 如果选择XML映射文件,那么对应的映射将在`*.hbm.xml`...

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

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

    java实体类字段自定义-数据库字段和程序实体类属性不一致解决方案.docx

    例如,实体类中有一个字段名为 "userName",而数据库表中的字段名为 "USER_NAME"。这种情况下,需要实现实体类字段的自定义,以便与数据库字段保持一致。 二、解决方案 解决 Java 实体类字段自定义问题的思路是...

    数据库字段名转换成Java字段名

    - 工厂模式:可以创建一个字段名转换工厂,根据输入的数据库字段名,返回对应的Java字段名对象。 - 模板方法模式:定义一个转换模板,子类可以重写具体转换逻辑。 7. **注解驱动**: 在某些情况下,如使用JPA,...

    数据库字段命名规范

    数据库字段命名规范 数据库字段命名规范是数据库设计的重要环节,良好的命名规范可以提高数据库的可读性、可维护性和可扩展性。以下是数据库字段命名规范的详细介绍: 一、数据库表名命名规范 * 数据库表名在命名...

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

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

    使用注解javaBean关联数据库字段

    - **@Entity**:标记一个类为数据库中的实体,通常代表一个表。例如,`@Entity(name="User")`表示这个类对应数据库中的"User"表。 - **@Table**:用于更精确地定义实体所对应的数据库表,可以指定表名和序列化选项...

    pb动态添加数据库字段

    标题中的“pb动态添加数据库字段”指的是在PowerBuilder(PB)开发环境中,程序运行时能够根据需要动态地向数据窗口对象(DataWindow)或者数据库结构中添加新的字段。这是一种高级功能,通常用于处理数据结构不确定...

    mybatis根据property获取column

    在这个例子中,`property`属性指定了Java对象的属性名,而`column`属性则对应数据库表中的列名。 其次,MyBatis提供了`org.apache.ibatis.builder.xml.XmlMapperBuilder`类来解析XML映射文件,其中的`...

    hibernate使用中与各种数据库字段类型对应类型训练

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,而无需过多关注SQL语句的编写。本篇将主要围绕Hibernate在与各种数据库字段类型对应的Java类型进行...

    C#访问oracle数据库类,带blob字段读写

    读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob字段时,先创建`OracleParameter`对象,将其Direction设置为` ParameterDirection.Input `,OracleDbType设置为`...

    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....

    JDBC 连接到 PostgreSQL 数据库获取数据简单例子

    然后,需要获取PostgreSQL的JDBC驱动,这通常是一个名为`postgresql-jdbc.jar`的文件。将这个JAR文件添加到项目的类路径中,以便在Java程序中使用。 以下是一个简单的JDBC连接到PostgreSQL数据库并获取数据的步骤:...

    java采集网页信息,并获取到所需要的信息存入数据库中对应的字段中去

    对于“weather”这个文件名,可能是实际项目中涉及的一个具体例子,比如采集天气预报信息并存入数据库。你可以根据实际需求调整代码,比如解析特定的天气网站,抓取温度、湿度、风向等信息,并将其分别存入数据库的...

    在数据库中按照字段名找所在的表的语句

    在数据库管理过程中,查找特定字段所在的表是一项常见且重要的任务。这不仅有助于了解数据结构,还能辅助进行数据迁移、查询优化等工作。本文将基于提供的标题、描述、标签以及部分内容,详细解析如何通过SQL命令在...

    Delphi 在ADO中如何判断字段类型.rar

    在Delphi编程中,当你需要与数据库交互时,ADO(ActiveX Data Objects)是一个常用的组件库,它提供了访问各种数据库的统一接口。本教程将详细解释如何在Delphi中使用ADO来判断SQL Server数据表中字段的类型。首先,...

    达梦数据库建表操作SQL语句大全.pdf

    更改字段类型或默认值,使用ALTER COLUMN关键字,如 `ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR(50) NULL`,此语句将字段名对应的字段类型更改为NVARCHAR(50),并设置为可空。 9. 重命名表: 达梦数据库...

    java提取数据库表字段信息的工具类.docx

    在Java开发中,有时我们需要获取数据库表的字段信息,例如字段名称、字段类型等,以便在编程时创建对应的Java实体类。为了简化这一过程,我们可以编写一个工具类来实现这个功能。下面是一个简单的示例,展示了如何...

    Greendao数据库升级添加String类型,

    在Android应用开发中,数据库是数据持久化的重要手段,而Greendao则是一个高效、轻量级的对象关系映射(ORM)框架,它允许开发者直接操作对象,而不是SQL语句。当应用程序需要进行数据库升级时,例如添加新的数据...

    SQL查询包含某个字段的所有表名

    这个查询与第一个类似,但增加了条件,不仅查找包含'FID'的表,还查找包含'FUserID'的表。结果将包括所有包含这两个字段之一的表名及其对应的字段名。 3. **查询包含'FID'字段和'FUserID'字段的所有表名**: ```...

Global site tag (gtag.js) - Google Analytics