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) { } }
相关推荐
`@Column`注解的`name`属性指定了数据库中的列名,`nullable`属性控制该字段是否允许为空。`@Id`注解标识了主键,`@GeneratedValue`则用于指定主键生成策略。 如果选择XML映射文件,那么对应的映射将在`*.hbm.xml`...
2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发效率,节约时间成本。 3、该工具类使用非常简单。只需要...
例如,实体类中有一个字段名为 "userName",而数据库表中的字段名为 "USER_NAME"。这种情况下,需要实现实体类字段的自定义,以便与数据库字段保持一致。 二、解决方案 解决 Java 实体类字段自定义问题的思路是...
- 工厂模式:可以创建一个字段名转换工厂,根据输入的数据库字段名,返回对应的Java字段名对象。 - 模板方法模式:定义一个转换模板,子类可以重写具体转换逻辑。 7. **注解驱动**: 在某些情况下,如使用JPA,...
数据库字段命名规范 数据库字段命名规范是数据库设计的重要环节,良好的命名规范可以提高数据库的可读性、可维护性和可扩展性。以下是数据库字段命名规范的详细介绍: 一、数据库表名命名规范 * 数据库表名在命名...
本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊
- **@Entity**:标记一个类为数据库中的实体,通常代表一个表。例如,`@Entity(name="User")`表示这个类对应数据库中的"User"表。 - **@Table**:用于更精确地定义实体所对应的数据库表,可以指定表名和序列化选项...
标题中的“pb动态添加数据库字段”指的是在PowerBuilder(PB)开发环境中,程序运行时能够根据需要动态地向数据窗口对象(DataWindow)或者数据库结构中添加新的字段。这是一种高级功能,通常用于处理数据结构不确定...
在这个例子中,`property`属性指定了Java对象的属性名,而`column`属性则对应数据库表中的列名。 其次,MyBatis提供了`org.apache.ibatis.builder.xml.XmlMapperBuilder`类来解析XML映射文件,其中的`...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,而无需过多关注SQL语句的编写。本篇将主要围绕Hibernate在与各种数据库字段类型对应的Java类型进行...
读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob字段时,先创建`OracleParameter`对象,将其Direction设置为` ParameterDirection.Input `,OracleDbType设置为`...
ddl语言自定义数据库字段 <!--#include virtual="/public/back_top.asp"--> <html><br><head><br><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <link href="member/css/common....
然后,需要获取PostgreSQL的JDBC驱动,这通常是一个名为`postgresql-jdbc.jar`的文件。将这个JAR文件添加到项目的类路径中,以便在Java程序中使用。 以下是一个简单的JDBC连接到PostgreSQL数据库并获取数据的步骤:...
对于“weather”这个文件名,可能是实际项目中涉及的一个具体例子,比如采集天气预报信息并存入数据库。你可以根据实际需求调整代码,比如解析特定的天气网站,抓取温度、湿度、风向等信息,并将其分别存入数据库的...
在数据库管理过程中,查找特定字段所在的表是一项常见且重要的任务。这不仅有助于了解数据结构,还能辅助进行数据迁移、查询优化等工作。本文将基于提供的标题、描述、标签以及部分内容,详细解析如何通过SQL命令在...
在Delphi编程中,当你需要与数据库交互时,ADO(ActiveX Data Objects)是一个常用的组件库,它提供了访问各种数据库的统一接口。本教程将详细解释如何在Delphi中使用ADO来判断SQL Server数据表中字段的类型。首先,...
更改字段类型或默认值,使用ALTER COLUMN关键字,如 `ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR(50) NULL`,此语句将字段名对应的字段类型更改为NVARCHAR(50),并设置为可空。 9. 重命名表: 达梦数据库...
在Java开发中,有时我们需要获取数据库表的字段信息,例如字段名称、字段类型等,以便在编程时创建对应的Java实体类。为了简化这一过程,我们可以编写一个工具类来实现这个功能。下面是一个简单的示例,展示了如何...
在Android应用开发中,数据库是数据持久化的重要手段,而Greendao则是一个高效、轻量级的对象关系映射(ORM)框架,它允许开发者直接操作对象,而不是SQL语句。当应用程序需要进行数据库升级时,例如添加新的数据...
- 命名规范:生成的VO类名通常遵循驼峰命名法,字段名则根据数据库列名转换,如`column_name`转换为`columnName`。 - 注解使用:现代Java开发倾向于使用注解来提供额外的信息,例如,`@Entity`(Hibernate)、`@...