一、概述

开发阶段80%以上的模块都具有基本增删改查功能,反反复复的制作不仅效率低下,而且容易出错,使用代码生成器自动生成代码,只需要精品的开发出代码生成器,后期代码开发效率将直线上升。
代码生成器的思想就是通过执行程序,自动生成出Java源代码,核心原理是读写文件。

二、具体实现

2.1、数据初始化

这个方法主要是获取包名、实体类名称等信息。

//-1.数据初始化private void dataInit() {String className = clazz.getSimpleName();                    //UserModelb = className.substring(0, className.length()-5);   //UserString first = b.substring(0,1);                         //El = first.toLowerCase();                        //es = l+b.substring(1);                      //userString rootPkg = clazz.getPackage().getName();               //org.sihai.qualitycontrol.auth.user.vopkg = rootPkg.substring(0,rootPkg.length()-3);      //org.sihai.qualitycontrol.auth.userdir = pkg.replace(".","/");                            //org/sihai/qualitycontrol/auth/user}

2.2、创建目录

生成具体的代码的所在目录

//0.创建目录private void generatorDirectory() {//business/ebi//               src+//org.sihai.qualitycontrol.auth.user+business/ebi .voFile f = new File("src/"+dir+"/business/ebi");f.mkdirs();//business/ebof = new File("src/"+dir+"/business/ebo");f.mkdirs();//dao/daof = new File("src/"+dir+"/dao/dao");f.mkdirs();//dao/implf = new File("src/"+dir+"/dao/impl");f.mkdirs();//webf = new File("src/"+dir+"/web");f.mkdirs();}

2.3、创建查询实体类

//1.QueryModelprivate void generatorQueryModel() throws Exception {//1.创建文件File f = new File("src/"+dir+"/vo/"+b+"QueryModel.java");//判断:如果该文件存在,终止操作if(f.exists()){return;}f.createNewFile();//2.IO写入内容BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".vo;");bw.newLine();bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseQueryModel;");bw.newLine();bw.newLine();bw.write("public class "+b+"QueryModel extends "+b+"Model implements BaseQueryModel{");bw.newLine();bw.write("  // TODO 添加自定义查询条件");bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();}

2.4、创建实体类的hibernate的配置文件

//2.Hbm.xmlprivate void generatorHbmXml() throws Exception {//1.创建文件File f = new File("src/"+dir+"/vo/"+b+"Model.hbm.xml");if(f.exists()){return;}f.createNewFile();//2.IO写入内容BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");bw.newLine();bw.write("<!DOCTYPE hibernate-mapping PUBLIC");bw.newLine();bw.write("        '-//Hibernate/Hibernate Mapping DTD 3.0//EN'");bw.newLine();bw.write("        'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>");bw.newLine();bw.write("<hibernate-mapping>");bw.newLine();bw.write("    <class name=\""+pkg+".vo."+b+"Model\" table=\"tbl_"+s+"\">");bw.newLine();bw.write("        <id name=\"uuid\">");bw.newLine();bw.write("            <generator class=\"native\" />");bw.newLine();bw.write("        </id>");bw.newLine();//hibernate的映射配置文件中要对原始模型类中的属性进行配置,反射获取所有字段Field[] fds = clazz.getDeclaredFields();for(Field fd:fds) {//如果字段的修饰符是private,生成if(fd.getModifiers() == Modifier.PRIVATE && !fd.getName().equals("uuid")){//如果是关联关系不生成,不是关联关系(Long,Integer,Double,String)if( fd.getType().equals(String.class)||fd.getType().equals(Long.class)||fd.getType().equals(Integer.class)||fd.getType().equals(Double.class)){bw.write("        <property name=\""+fd.getName()+"\"/>");bw.newLine();}}}bw.write("    </class>");bw.newLine();bw.write("</hibernate-mapping>");bw.newLine();bw.flush();bw.close();     }

2.5、创建dao接口

 //3.Daoprivate void generatorDao() throws Exception {File f = new File("src/"+dir+"/dao/dao/"+b+"Dao.java");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".dao.dao;");bw.newLine();bw.newLine();bw.write("import "+pkg+".vo."+b+"Model;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseDao;");bw.newLine();bw.newLine();bw.write("public interface "+b+"Dao extends BaseDao<"+b+"Model> {");bw.newLine();bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();       }

2.6、创建dao实现类

//4.Implprivate void generatorImpl()  throws Exception {File f = new File("src/"+dir+"/dao/impl/"+b+"Impl.java");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".dao.impl;");bw.newLine();bw.newLine();bw.write("import org.hibernate.criterion.DetachedCriteria;");bw.newLine();bw.write("import org.hibernate.criterion.Restrictions;");bw.newLine();bw.newLine();bw.write("import "+pkg+".dao.dao."+b+"Dao;");bw.newLine();bw.write("import "+pkg+".vo."+b+"Model;");bw.newLine();bw.write("import "+pkg+".vo."+b+"QueryModel;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseImpl;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseQueryModel;");bw.newLine();bw.newLine();bw.write("public class "+b+"Impl extends BaseImpl<"+b+"Model> implements "+b+"Dao{");bw.newLine();bw.newLine();bw.write("    public void doQbc(DetachedCriteria dc,BaseQueryModel qm){");bw.newLine();bw.write("       "+b+"QueryModel "+l+"qm = ("+b+"QueryModel)qm;");bw.newLine();bw.write("     // TODO 添加自定义查询条件");bw.newLine();bw.write("   }");bw.newLine();bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();      }

2.7、创建service的接口

//5.Ebiprivate void generatorEbi()  throws Exception {File f = new File("src/"+dir+"/business/ebi/"+b+"Ebi.java");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".business.ebi;");bw.newLine();bw.newLine();bw.write("import org.springframework.transaction.annotation.Transactional;");bw.newLine();bw.newLine();bw.write("import "+pkg+".vo."+b+"Model;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseEbi;");bw.newLine();bw.newLine();bw.write("@Transactional");bw.newLine();bw.write("public interface "+b+"Ebi extends BaseEbi<"+b+"Model>{");bw.newLine();bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();  }

2.8、创建service的实现类

//6.Eboprivate void generatorEbo()  throws Exception {File f = new File("src/"+dir+"/business/ebo/"+b+"Ebo.java");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".business.ebo;");bw.newLine();bw.newLine();bw.write("import java.io.Serializable;");bw.newLine();bw.write("import java.util.List;");bw.newLine();bw.newLine();bw.write("import "+pkg+".business.ebi."+b+"Ebi;");bw.newLine();bw.write("import "+pkg+".dao.dao."+b+"Dao;");bw.newLine();bw.write("import "+pkg+".vo."+b+"Model;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseQueryModel;");bw.newLine();bw.newLine();bw.write("public class "+b+"Ebo implements "+b+"Ebi{");bw.newLine();bw.write("  private "+b+"Dao "+s+"Dao;");bw.newLine();bw.write("  public void set"+b+"Dao("+b+"Dao "+s+"Dao) {");bw.newLine();bw.write("        this."+s+"Dao = "+s+"Dao;");bw.newLine();bw.write("  }");bw.newLine();bw.newLine();bw.write("  public void save("+b+"Model "+l+"m) {");bw.newLine();bw.write("       "+s+"Dao.save("+l+"m);");bw.newLine();bw.write("  }");bw.newLine();bw.newLine();bw.write("  public void update("+b+"Model "+l+"m) {");bw.newLine();bw.write("     "+s+"Dao.update("+l+"m);");bw.newLine();bw.write("    }");bw.newLine();bw.newLine();bw.write("  public void delete("+b+"Model "+l+"m) {");bw.newLine();bw.write("     "+s+"Dao.delete("+l+"m);");bw.newLine();bw.write("    }");bw.newLine();bw.newLine();bw.write("  public "+b+"Model get(Serializable uuid) {");bw.newLine();bw.write("      return "+s+"Dao.get(uuid);");bw.newLine();bw.write("  }");bw.newLine();bw.newLine();bw.write("  public List<"+b+"Model> getAll() {");bw.newLine();bw.write("        return "+s+"Dao.getAll();");bw.newLine();bw.write("   }");bw.newLine();bw.newLine();bw.write("  public List<"+b+"Model> getAll(BaseQueryModel qm, Integer pageNum,Integer pageCount) {");bw.newLine();bw.write("        return "+s+"Dao.getAll(qm,pageNum,pageCount);");bw.newLine();bw.write("   }");bw.newLine();bw.newLine();bw.write("  public Integer getCount(BaseQueryModel qm) {");bw.newLine();bw.write("        return "+s+"Dao.getCount(qm);");bw.newLine();bw.write("   }");bw.newLine();bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();          }

2.9、创建action类

//7.Actionprivate void generatorAction() throws Exception {File f = new File("src/"+dir+"/web/"+b+"Action.java");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("package "+pkg+".web;");bw.newLine();bw.newLine();bw.write("import java.util.List;");bw.newLine();bw.newLine();bw.write("import "+pkg+".business.ebi."+b+"Ebi;");bw.newLine();bw.write("import "+pkg+".vo."+b+"Model;");bw.newLine();bw.write("import "+pkg+".vo."+b+"QueryModel;");bw.newLine();bw.write("import org.sihai.qualitycontrol.util.base.BaseAction;");bw.newLine();bw.newLine();bw.write("public class "+b+"Action extends BaseAction{");bw.newLine();bw.write("    public "+b+"Model "+l+"m = new "+b+"Model();");bw.newLine();bw.write("   public "+b+"QueryModel "+l+"qm = new "+b+"QueryModel();");bw.newLine();bw.newLine();bw.write("   private "+b+"Ebi "+s+"Ebi;");bw.newLine();bw.write("  public void set"+b+"Ebi("+b+"Ebi "+s+"Ebi) {");bw.newLine();bw.write("        this."+s+"Ebi = "+s+"Ebi;");bw.newLine();bw.write("  }");bw.newLine();bw.newLine();bw.write("  //列表");bw.newLine();bw.write("    public String list(){");bw.newLine();bw.write("       setDataTotal("+s+"Ebi.getCount("+l+"qm));");bw.newLine();bw.write("       List<"+b+"Model> "+s+"List = "+s+"Ebi.getAll("+l+"qm,pageNum,pageCount);");bw.newLine();bw.write("     put(\""+s+"List\", "+s+"List);");bw.newLine();bw.write("        return LIST;");bw.newLine();bw.write("    }");bw.newLine();bw.newLine();bw.write("  //到添加");bw.newLine();bw.write("   public String input(){");bw.newLine();bw.write("      if("+l+"m.getUuid()!=null){");bw.newLine();bw.write("            "+l+"m = "+s+"Ebi.get("+l+"m.getUuid());");bw.newLine();bw.write("       }");bw.newLine();bw.write("       return INPUT;");bw.newLine();bw.write("   }");bw.newLine();bw.newLine();bw.write("  //添加");bw.newLine();bw.write("    public String save(){");bw.newLine();bw.write("       if("+l+"m.getUuid() == null){");bw.newLine();bw.write("         "+s+"Ebi.save("+l+"m);");bw.newLine();bw.write("      }else{");bw.newLine();bw.write("          "+s+"Ebi.update("+l+"m);");bw.newLine();bw.write("        }");bw.newLine();bw.write("       return TO_LIST;");bw.newLine();bw.write(" }");bw.newLine();bw.newLine();bw.write("  //删除");bw.newLine();bw.write("    public String delete(){");bw.newLine();bw.write("     "+s+"Ebi.delete("+l+"m);");bw.newLine();bw.write("        return TO_LIST;");bw.newLine();bw.write(" }");bw.newLine();bw.newLine();bw.write("}");bw.newLine();bw.flush();bw.close();          }

2.10、创建spring的配置文件

//8.applicationContext.xmlprivate void generatorApplicationContextXml() throws Exception {File f = new File("resources/applicationContext-"+s+".xml");if(f.exists()){return;}f.createNewFile();BufferedWriter bw = new BufferedWriter(new FileWriter(f));bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");bw.newLine();bw.write("<beans xmlns=\"http://www.springframework.org/schema/beans\"");bw.newLine();bw.write(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");bw.newLine();bw.write("  xsi:schemaLocation=\"");bw.newLine();bw.write("     http://www.springframework.org/schema/beans ");bw.newLine();bw.write("        http://www.springframework.org/schema/beans/spring-beans.xsd");bw.newLine();bw.write("        \"> ");bw.newLine();bw.write("    <!-- Action -->");bw.newLine();bw.write("   <bean id=\""+s+"Action\" class=\""+pkg+".web."+b+"Action\" scope=\"prototype\">");bw.newLine();bw.write("      <property name=\""+s+"Ebi\" ref=\""+s+"Ebi\"/>");bw.newLine();bw.write("  </bean>");bw.newLine();bw.write("   <!-- Ebi -->");bw.newLine();bw.write("  <bean id=\""+s+"Ebi\" class=\""+pkg+".business.ebo."+b+"Ebo\">");bw.newLine();bw.write("      <property name=\""+s+"Dao\" ref=\""+s+"Dao\"/>");bw.newLine();bw.write("  </bean>");bw.newLine();bw.write("   <!-- Dao -->");bw.newLine();bw.write("  <bean id=\""+s+"Dao\" class=\""+pkg+".dao.impl."+b+"Impl\">");bw.newLine();bw.write("     <property name=\"sessionFactory\" ref=\"sessionFactory\"/>");bw.newLine();bw.write("  </bean>");bw.newLine();bw.write("</beans>");bw.newLine();bw.flush();bw.close();          }

2.11、对struts.xml配置文件修改

private void modifyStrutsXml() throws Exception {//1.读取原始的内容//2.读取到特定位置(package)添加指定内容//我们要读的文件与写的文件是同一个文件/*RandomAccessFile类读写文件时读取,一共100,读70,写,写的内容会覆盖后30111222333444在333的后面写5111222333544在333的后面写5111222333555*///方案一:/*读取原始文件,将内容写入新文件写之前判断,读取的内容是否是特定内容,特定内容写之前,加入新的内容写完毕之后生成了新的文件,删除老的文件,使用新文件更名为老的文件*///方案二://1.读取原始文件的文件大小,字节总数1000File f = new File("resources/struts.xml");long len = f.length();//2.创建一个字节数组,大小等于原始文件字节总数byte[] buf = new byte[(int)len];//3.将原始文件读入该byte数组InputStream is = new FileInputStream(f);is.read(buf);is.close();//4.将buf转化为字符串String all = new String(buf);//5.查找固定位置int idx = all.lastIndexOf("    </package>");//6.将要写入的内容插入该位置String info = "        <!-- "+b+" -->\r\n        <action name=\""+s+"_*\" class=\""+s+"Action\" method=\"{1}\">\r\n       </action>\r\n\r\n";//7.将info加入all的指定位置StringBuilder sbf = new StringBuilder(all);sbf.insert(idx, info);//8.将sbf中的组合最终内容写入struts.xmlFileOutputStream fos = new FileOutputStream(f);fos.write(sbf.toString().getBytes());fos.close();}

2.12、生成工具方法

private Class clazz;
private String b ;      //User
private String l ;      //e
private String s ;      //user
private String pkg ;    //org.sihai.qualitycontrol.auth.user
private String dir ;    //org/sihai/qualitycontrol/auth/user/vo
public GeneratorUtil(Class clazz) throws Exception{this.clazz = clazz;//生成所有的内容//-1.数据初始化dataInit();//0.创建目录generatorDirectory();//1.QueryModelgeneratorQueryModel();//2.Hbm.xmlgeneratorHbmXml();//3.DaogeneratorDao();//4.ImplgeneratorImpl();//5.EbigeneratorEbi();//6.EbogeneratorEbo();//7.ActiongeneratorAction();//8.applicationContext.xmlgeneratorApplicationContextXml();//9.struts.xml(选作)//modifyStrutsXml();}

三、测试

public static void main(String[] args) throws Exception {new GeneratorUtil(ResModel.class);
}

【struts2+hibernate+spring项目实战】java读写实现代码生成器(ssh)相关推荐

  1. 【struts2+hibernate+spring项目实战】统一异常处理(ssh)

    一.概述 在项目中总会出现各种异常.bug,为了使得用户体验更好,当系统出现异常的时候,我们需要有我们的处理方式,使得用户能够理解系统出现了什么问题. 二.异常类 首先我们需要编写一个异常类 pack ...

  2. 【struts2+hibernate+spring项目实战】实现用户登录功能(ssh)

    一.概述 从今天才开始有时间来总结总结以前自己练习的一些东西,希望总结出来对以后可以更加便捷的来学习,也希望可以帮助到正需要这些东西的同行人,一起学习,共同进步. 二. 登录功能总结 2.1.登录功能 ...

  3. 【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh)

    一.权限控制系统 权限控制系统即用户登录后,如果操作了不能访问的操作,系统将其拦截. 权限控制系统设计需求: 系统功能并不是所有功能都需要被控制,例如登录功能无需校验 设计方案:资源中没有出现的功能将 ...

  4. 【struts2+hibernate+spring项目实战】数据报表jxl及生成excel(ssh项目实战)

    一.数据报表jxl jxl是一款java读写office--Excel文件的工具.通过java程序进行Excel文件的读写操作. 操作Excel首先应该明确操作过程中java针对Excel文件的对象分 ...

  5. 【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh)

    一.常用数据频度维护 对于系统使用度较高的数据,客户在查看时希望这些数据最好先出现,此时需要为其添加排序规则.在进行排序时,使用次数成为排序的依据.因此需要设置一个字段用来描述某种数据的使用次数,也就 ...

  6. 【struts2+hibernate+spring项目实战】分页功能的完整的实现(通用分页、基类实现)

    一.概述 今天自己做了个项目练练,然后有一些分页的功能,自己把分页的功能做了一个简单的总结,然后,为了以后能够方便自己的开发,做了一个baseDao的实现. 二.代码实现 2.1.分页的实体类page ...

  7. 【struts2+hibernate+spring项目实战】Jfreechart工具使用(ssh项目实战)

    一.图形报表jfreechart 将解压的资源包拷贝出来,放置到无中文的目录中,使用下列指令运行 java -jar jfreechart-1.0.13-demo.jar 注意:不能只拷贝该文件,必须 ...

  8. 【struts2+hibernate+spring项目实战】用户登录校验(struts拦截器)

    一.概述 项目中所有页面均放入WEB-INF,所有页面安全性得到了很大程度的提高.但是当用户登录后长时间没有操作时,会造成Session数据的过期,如果此时获取Session中的数据,必定会引发WEB ...

  9. 【struts2+hibernate+spring项目实战】ajax+jquery报表数据显示(ssh)

    报表页数据显示 本项目中以商品采购信息为例,统计采购指定时间,指定供应商对应的采购报表信息,并以数据加图片的形式展示. 2.基于页面结构,设置采购链接对应的显示信息页面 当前仅制作根据商品名进行报表统 ...

最新文章

  1. mysql 定义存储过程_mysql——定义——存储过程和函数——概念
  2. 一文读懂机器学习中的模型偏差
  3. create-react-app留言板
  4. 计算机二叉树讲解ppt,数据结构二叉树.ppt
  5. php7和python3性能对比-Python 2.7与Python 3.7区别
  6. 设计模式--原型(Prototype)模式
  7. python下timer定时器常用的两种实现方法
  8. 永劫无间大神玩家ZX迷恋上单人三排,单局28杀,过程太过瘾了
  9. 2019届宝鸡理数质检Ⅰ解析版
  10. C#中控制线程池的执行顺序
  11. C#将图片白色背景设置为透明
  12. [转]网友monkeylarry研究生期间我们应该做什么
  13. 高分1、2号卫星原始遥感影像数据
  14. python编程-----利用爬虫获取自如房间信息(三)
  15. GBase xdm价值
  16. 累计薅走数百万,EOS Dapps已成黑客提款机?
  17. wtc java 代码 tpcall(servicename_WebLogic下WTC Service的配置
  18. MCE公司:新突破——癌症治疗耐药性问题有望彻底解决
  19. vb/vb.net原创文章精粹(4)
  20. 基于Verilog实现的移动机器人芯片设计

热门文章

  1. 基于汇编语言的电子琴设计(1)
  2. 嵌入式ARM Linux开发板自启动,跳过输入root用户名和密码
  3. 视口和窗口的理解方法
  4. 区块链BaaS云服务(14)华大BGI区块链“概论“
  5. [mmu/cache]-cache的一些基本概念介绍
  6. Linux和optee双系统中1020-1023号的中断号的使用
  7. 共识机制-权益证明 PoS
  8. 【攻防世界009】流浪者
  9. 2020-11-4(安卓开发)
  10. 【网络安全】域渗透之完全绕开安全组件