- 浏览: 305888 次
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下showPassst ...
我写的密码强度验证方法(原创) -
kingcs2008:
// 验证pws.jsshowPassstrength(&qu ...
我写的密码强度验证方法(原创) -
h957355152:
请问博主这个怎么用呢?我直接放到jsp里面调用showPass ...
我写的密码强度验证方法(原创) -
qq_15138059:
我写的全国省市县三级联动菜单,拿出来和大家分享了(原创) -
valenon:
评论呢?从MAIL FROM命令开始貌似就出错了:500 Er ...
如何发送伪造的电子邮件
一个给pojo生成hashcode、equals、toString等方法的工具类
package com.kong.coder; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class CodeFactory { public static void main(String[] args) { String projectPath = "D:\\Workspaces\\MyEclipse 10\\lowcaActivity"; String packageName = "com.lowca.activity.pojo"; String[] banedClassNames = {}; appendCompareMethods(projectPath, packageName, banedClassNames); } public static void appendCompareMethods(String projectPath, String packageName, final String[] banedClassNames) { String packagePath = File.separator + packageName.replace(".", File.separator); File packageFile = new File(projectPath + File.separator + "src" + packagePath); if (!packageFile.exists() || !packageFile.isDirectory()) { System.err.println("包文件不存在"); System.exit(-1); } File[] pojoFiles = packageFile.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { boolean isBaned = false; for (String banedClassName : banedClassNames) { if (name.equals(banedClassName + ".java")) { isBaned = true; break; } } return !isBaned && name.endsWith(".java"); } }); if (pojoFiles == null || pojoFiles.length == 0) { System.err.println("包文件是空的,找不到pojo"); System.exit(-1); } for (File pojoFile : pojoFiles) { handlePojoFile(packageName, pojoFile); } } private static void handlePojoFile(String packageName, File pojoFile) { String pojoFileName = pojoFile.getName(); String pojoClassName = packageName + "." + pojoFileName.substring(0, pojoFileName.length() - 5); Class<?> pojoClass = null; try { pojoClass = Class.forName(pojoClassName); } catch (ClassNotFoundException e) { e.printStackTrace(); } Method[] methods = pojoClass.getMethods(); List<Method> getterList = new ArrayList<Method>(); // 遍历反射方法组并提取当前类属性的getter方法 for (Method method : methods) { // 过滤与当前类属性无关的get方法 if (method.getName().startsWith("get") && !method.getName().equals("getClass")) { getterList.add(method); } } MethodnameFilter methodnameFilter = new MethodnameFilter() { @Override public boolean accept(String name) { return name.matches("get([A-Z][a-zA-Z])*Id") ? false : true; } }; String hashCodeCode = getHashCodeCode(pojoClass, getterList, methodnameFilter); String equalsCode = getEqualsCode(pojoClass, getterList, methodnameFilter); String toStringCode = getToStringCode(pojoClass, getterList, methodnameFilter); String methodsCode = hashCodeCode + equalsCode + toStringCode; writeCodeToPojoFile(methodsCode, pojoFile); } private static void writeCodeToPojoFile(String methodsCode, File pojoFile) { BufferedReader br = null; BufferedWriter bw = null; try { FileReader fr = new FileReader(pojoFile); br = new BufferedReader(fr); String line; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line + "\r\n"); } int pos = sb.lastIndexOf("}"); sb.insert(pos, methodsCode); FileWriter fw = new FileWriter(pojoFile); bw = new BufferedWriter(fw); bw.write(sb.toString()); bw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) br.close(); } catch (IOException e) { e.printStackTrace(); } try { if (bw != null) bw.close(); } catch (IOException e) { e.printStackTrace(); } } } private static String getEqualsCode(Class<?> pojoClass, List<Method> getterList, MethodnameFilter methodnameFilter) { StringBuffer sb = new StringBuffer(); sb.append("\n\tpublic boolean equals(Object object) {\n"); sb.append("\t\tif (this == object)\n"); sb.append("\t\t\treturn true;\n"); sb.append("\t\tif (!(object instanceof ${class}))\n"); sb.append("\t\t\treturn false;\n"); sb.append("\t\tfinal ${class} ${classLowercaseFirst} = (${class}) object;\n"); for (Method getter : getterList) { String getterName = getter.getName(); if (methodnameFilter != null && !methodnameFilter.accept(getterName)) continue; sb.append("\t\tif (!" + getterName + "().equals(${classLowercaseFirst}." + getterName + "()))\n"); sb.append("\t\t\treturn false;\n"); } sb.append("\t\treturn true;\n"); sb.append("\t}\n"); String code = sb.toString(); String className = pojoClass.getSimpleName(); String classNameLowercaseFirst = toLowercaseFirst(className); code = code.replaceAll("\\$\\{class\\}", className); code = code.replaceAll("\\$\\{classLowercaseFirst\\}", classNameLowercaseFirst); return code; } private static String getHashCodeCode(Class<?> pojoClass, List<Method> getterList, MethodnameFilter methodnameFilter) { StringBuffer sb = new StringBuffer(); sb.append("\n\tpublic int hashCode() {\n"); sb.append("\t\tint result;\n"); boolean first = true; for (Method getter : getterList) { String getterName = getter.getName(); if (methodnameFilter != null && !methodnameFilter.accept(getterName)) continue; if (first) { first = false; sb.append("\t\tresult = " + getterName + "().hashCode();\n"); } else { sb.append("\t\tresult = 29 * result + " + getterName + "().hashCode();\n"); } } sb.append("\t\treturn result;\n"); sb.append("\t}\n"); String code = sb.toString(); return code; } private static String getToStringCode(Class<?> pojoClass, List<Method> getterList, MethodnameFilter methodnameFilter) { StringBuffer sb = new StringBuffer(); sb.append("\n\tpublic String toString() {\n"); boolean first = true; for (Method getter : getterList) { String getterName = getter.getName(); if (methodnameFilter != null && !methodnameFilter.accept(getterName)) continue; String filedName = toLowercaseFirst(getterName.substring(3)); if (first) { first = false; sb.append("\t\treturn \"${class} [" + filedName + "=\" + " + filedName + "\n"); } else { sb.append("\t\t+ \", " + filedName + "=\" + " + filedName + "\n"); } } sb.append("\t\t + \"]\";\n"); sb.append("\t}\n"); String code = sb.toString(); String className = pojoClass.getSimpleName(); code = code.replaceAll("\\$\\{class\\}", className); return code; } private static String toLowercaseFirst(String pojoClassName) { return pojoClassName.substring(0, 1).toLowerCase() + pojoClassName.substring(1); } interface MethodnameFilter { boolean accept(String name); } }
发表评论
-
java正则表达式高级用法:转换驼峰标示
2012-06-26 16:47 5825String source = "LastLog ... -
你会做Web上的用户登录功能吗?(转)
2012-06-25 13:22 1386Web上的用户登录功能应 ... -
使用pager-taglib.jar实现的分页技术
2012-06-24 02:34 953//1.导入pager-taglib.jar包; / ... -
我写的验证码生成方案,可防止绝大多数机械识别。
2012-06-20 14:59 2414web.xml <!DOCTYPE web-app ... -
如何在myeclipse中使用maven?
2012-06-11 14:22 168491.下载maven,解压到D盘ma ... -
安装subclipse, MyEclipse8 SVN插件
2012-06-09 22:39 970安装subclipse, MyEclipse8 SVN插件 ... -
PDF生成器
2012-05-28 02:53 857我自己写的一个pdf生成器,能导出百度博客为PDF -
我的自动投票器
2012-04-17 13:58 1303自动投票器,支持windows的32位机器 下面的压缩包是编 ... -
list,set,map,数组间的相互转换(转载)
2012-03-16 16:29 28781.list转set Java代码 ... -
ehcache的用法
2012-02-13 22:13 0Spring ... -
使用ehcache来缓存页面
2012-02-13 22:08 826关于缓存的话题,在坛子里已经有很多讨论,简单的来说,如果一个应 ... -
java笔记:自己动手写javaEE框架(二)--业务层Service以及Service单元测试
2012-02-13 00:55 0前一篇博文里有三 ... -
struts+spring+hibernate的web应用<四> Web层代码编写(2)
2012-02-13 00:50 0接着就是写资源文件了。 在 com.game. ... -
struts+spring+hibernate的web应用<四> Web层代码编写(1)
2012-02-13 00:49 1051前面的文章: ... -
struts+spring+hibernate的web应用<三> Service层代码编写
2012-02-13 00:46 886前面的文章: ... -
struts+spring+hibernate的web应用<二> Dao层代码编写
2012-02-13 00:45 866前一篇文章 (struts+spring ... -
struts+spring+hibernate的web应用<一> 架构搭建
2012-02-13 00:44 781许久没有些文章了,现 ... -
ehcache缓存管理
2012-02-12 23:52 1015EHCache 是一个纯java的,在Hibernate2 ... -
检测一个字符串是否在jvm的常量池中(原创)
2012-01-11 09:07 2180检测一个字符串是否在jvm的常量池中 public ... -
我写的密码强度验证方法(原创)
2011-12-18 15:26 8403/* *说明: * 该方法主要分析密码的内容构成 ...
相关推荐
它的工作原理是通过解析数据库中的表结构,自动生成对应的Java类,包括属性(字段)、getter和setter方法、构造函数以及toString()、equals()和hashCode()等常用方法。 在使用POJO生成器时,开发者通常需要先连接到...
- 支持生成ToString、Equals和HashCode方法,便于调试和比较对象。 - 能够生成带有注释的代码,帮助理解字段含义。 - 可能有集成其他Mybatis相关的功能,如Mapper XML文件的生成。 总的来说,Mybatis pojo插件是...
4. 可能还包括构造函数、toString()、equals()和hashCode()等常用方法。 生成DAO类的过程中,会包含以下内容: 1. 定义接口,接口中的方法对应于基本的CRUD(Create、Read、Update、Delete)操作,如insert()、...
此外,工具还可能支持生成一些额外的功能,比如toString()、equals()和hashCode()方法,以便于调试和比较对象。 使用自动化生成的POJO和VO类有以下优势: 1. 提高开发效率:避免了手动编写大量的Java类。 2. 减少...
Lombok是一款非常受欢迎的Java开发工具,它通过注解处理器自动为Java类生成构造函数、getter、setter、equals、hashCode、toString等常用方法,极大地减少了Java程序员编写样板代码的工作量。"lombok-plugin-0.28-...
1. `@Data` 注解:这是一个综合注解,可以为类生成所有基本的 getter 和 setter,同时提供 equals、hashCode 和 toString 方法。这对于创建数据传输对象(DTO)或简单的 POJO 类非常有用。 2. `@AllArgsConstructor...
Lombok 是一个强大的 Java 开发工具,其主要目标是简化 Java 代码,特别是那些普通的 Java POJO(Plain Old Java Object)类。通过提供一系列的注解,Lombok 可以自动处理诸如 getter、setter、equals、hashCode 和 ...
每个类通常包含字段(对应数据库的列)、getter和setter方法,以及equals()、hashCode()和toString()等常用方法。同时,还会生成对应的Mapper接口和XML配置文件,方便后续编写SQL查询和操作。 逆向工程完成后,...
在 Java 开发中,Lombok 提供的注解可以极大地简化类的构建,特别是对于那些包含大量 getter、setter、equals、hashCode 和 toString 方法的数据传输对象(DTO)。 1. **注解介绍** - `@Data`: 这个注解会自动生成...
当你在类上添加这个注解,Lombok会为所有的非静态字段自动生成getter和setter方法,同时还会提供一个默认的toString()、equals()和hashCode()方法。 2. `@Getter` 和 `@Setter`:这两个注解分别用于生成getter和...
例如,你可以决定字段的命名策略、是否生成equals()和hashCode()方法、是否生成ToString方法,甚至可以调整SQL语句的生成方式等。 在使用generatorSqlmapCustom之前,你需要配置MyBatis的generatorConfig.xml文件,...
如果你需要添加其他功能,如ToString、Equals或HashCode方法,可以在配置文件中进行设定。 Mapper接口则定义了与数据库交互的操作,如查询、插入、更新和删除。逆向工程会为每个表生成相应的Mapper接口,方法名通常...
- 如果类间存在继承关系,`@Data`生成的`equals()`方法只会比较当前类中的属性,这可能导致逻辑错误。 - 解决方案:避免使用`@Data`注解在具有继承结构的类上;如果需要,可以显式地重写`equals()`方法,并使用`@...
这个工具集包括了多种功能,如配置文件生成、映射文件生成以及POJO(Plain Old Java Object)类的自动生成等,极大地提升了开发效率。 1. **配置文件生成** HibernateTools提供了从数据库反向工程生成Hibernate...
在传统的Java开发中,我们经常需要为POJO类编写大量的getter、setter、equals()、hashCode()、toString()等方法,这些代码虽然在实际功能上并不复杂,但增加了代码的体积,降低了代码的可读性。Lombok的目标是通过...
同时,还可以选择是否生成equals()、hashCode()和toString()方法,以便于对象的比较和调试。 对于Mapper接口,MBG会根据数据库表结构自动生成CRUD操作的方法。这些方法对应于SQL查询,如selectByPrimaryKey、insert...
- 最后,可能还会生成构造函数和其他辅助方法,比如toString(),hashCode()和equals()。 4. **优化与扩展**: 这些脚本可以进一步优化,例如添加注解支持(如`@Entity`,`@Table`等),以便于集成ORM框架如...
Lombok 是一个 Java 开发工具库,它通过提供一系列注解来简化代码,尤其是在创建 POJO(Plain Old Java Object)类时。Lombok 的主要目标是减少样板代码,提高开发效率,让代码更加简洁易读。`lombok-plugin-0.15.17...
此外,`@Data` 注解则一次性生成这些方法,以及 `@ToString` 和 `@EqualsAndHashCode`,适用于创建基本的 POJO 类。 `@ToString` 自动覆盖 `toString()` 方法,可以排除某些字段或包含父类信息。`@...
Lombok 是一个 Java 开发工具库,它通过提供一系列注解来简化代码,尤其是在创建 Java POJO(Plain Old Java Object)类时。Lombok 的主要目标是减少样板代码,提高开发效率,使得开发者可以专注于业务逻辑而不是...