阅读SSH项目之ERP(一)

简介: 本博文主要是记录我阅读过的SSH项目所学习到的知识,并不是相关系列教程。该SSH项目的gitHub地址:ERP项目地址

前言

本博文主要是记录我阅读过的SSH项目所学习到的知识,并不是相关系列教程。该SSH项目的gitHub地址:ERP项目地址

删除数据

实际业务中真正意义上的数据删除操作比较少见,多数情况是在数据中设置标记,通过标记的值来区分该数据是否可以用,而不是将数据真正的删除

根据业务需求,为数据添加标记位,同时对数据的维护中添加启用/停用切换按钮,用于替换删除业务。所有的查询操作默认携带条件值为标记为可以的数据。除特殊业务外,标记为不可用的数据将不参与日常数据操作。

javaScript数值数据操作

javascript中如果需要对页面组件获取的值进行数字加操作,必须保障两个操作数据都是数字,否则将进行字符串连接运算。此处使用*1操作,将字符串快速转换为数字格式

代码生成器

由于我们的Dao、Service、Controller、配置文件都有很多重复的地方,我们可以通过“代码生成器”来将我们的文件生成出来。

  • 主要是依靠反射和IO的技术来进行生成对应的文件
  • 我个人认为它不够通用、如果使用SSM来进行开发的话,那这段代码的用处就不大了,并且还要遵循它固有的习惯开发。
  • 主要是看看原来还能有这种操作
package cn.itcast.erp.util.generator;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import cn.itcast.erp.invoice.operdetail.vo.OperDetailModel;
public class GeneratorUtil {
    private Class clazz;
    private String b ;      //Emp
    private String l ;      //e
    private String s ;      //emp
    private String pkg ;    //cn.itcast.erp.auth.emp
    private String dir ;    //cn/itcast/erp/auth/emp/vo
    public static void main(String[] args) throws Exception {
        //EmpModel,RoleModel,ResModel,MenuModel
        //SupplierModel,GoodsTypeModel,GoodsModel
        //OrderModel,OrderDetailModel
        //StoreModel,StoreDetailModel,OperDetailModel
        new GeneratorUtil(OperDetailModel.class);
        System.out.println("struts.xml未进行映射");
        System.out.println("HbmXml未添加关联关系");
        System.out.println("QueryModel未添加自定义范围查询条件");
        System.out.println("DaoImpl中未对自定义查询条件形式条件设置");
    }
    public GeneratorUtil(Class clazz) throws Exception{
        this.clazz = clazz;
        //生成所有的内容
        //-1.数据初始化
        dataInit();
        //0.创建目录
        generatorDirectory();
        //1.QueryModel
        generatorQueryModel();
        //2.Hbm.xml
        generatorHbmXml();
        //3.Dao
        generatorDao();
        //4.Impl
        generatorImpl();
        //5.Ebi
        generatorEbi();
        //6.Ebo
        generatorEbo();
        //7.Action
        generatorAction();
        //8.applicationContext.xml
        generatorApplicationContextXml();
        //9.struts.xml(选作)
        //modifyStrutsXml();
    }
    private void modifyStrutsXml() throws Exception {
        //1.读取原始的内容
        //2.读取到特定位置(package)添加指定内容
        //我们要读的文件与写的文件是同一个文件
        /*
        RandomAccessFile类读写文件时
        读取,一共100,读70,写,写的内容会覆盖后30
        111
        222
        333
        444
        在333的后面写5
        111
        222
        333
        544
        在333的后面写5
        111
        222
        333
        555
        */
        //方案一:
        /*
        读取原始文件,将内容写入新文件
        写之前判断,读取的内容是否是特定内容,特定内容写之前,加入新的内容
        写完毕之后生成了新的文件,删除老的文件,使用新文件更名为老的文件
        */
        //方案二:
        //1.读取原始文件的文件大小,字节总数1000
        File 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.xml
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(sbf.toString().getBytes());
        fos.close();
    }
    //8.applicationContext.xml
    private 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();         
    }
    //7.Action
    private 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 cn.itcast.erp.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();         
    }
    //6.Ebo
    private 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 cn.itcast.erp.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();         
    }
    //5.Ebi
    private 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 cn.itcast.erp.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(); 
    }
    //4.Impl
    private 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 cn.itcast.erp.util.base.BaseImpl;");
        bw.newLine();
        bw.write("import cn.itcast.erp.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();     
    }
    //3.Dao
    private 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 cn.itcast.erp.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.Hbm.xml
    private 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)
                    ){
                    if(!fd.getName().endsWith("View")){
                        bw.write("        <property name=\""+fd.getName()+"\"/>");
                        bw.newLine();
                    }
                }
            }
        }
        bw.write("    </class>");
        bw.newLine();
        bw.write("</hibernate-mapping>");
        bw.newLine();
        bw.flush();
        bw.close();     
    }
    //1.QueryModel
    private 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 cn.itcast.erp.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();
    }
    //0.创建目录
    private void generatorDirectory() {
        //business/ebi
        //               src+//cn.itcast.erp.auth.emp+business/ebi .vo
        File f = new File("src/"+dir+"/business/ebi");
        f.mkdirs();
        //business/ebo
        f = new File("src/"+dir+"/business/ebo");
        f.mkdirs();
        //dao/dao
        f = new File("src/"+dir+"/dao/dao");
        f.mkdirs();
        //dao/impl
        f = new File("src/"+dir+"/dao/impl");
        f.mkdirs();
        //web
        f = new File("src/"+dir+"/web");
        f.mkdirs();
    }
    //-1.数据初始化
    private void dataInit() {
        String className = clazz.getSimpleName();                   //EmpModel
        b = className.substring(0, className.length()-5);   //Emp
        String first = b.substring(0,1);                            //E
        l = first.toLowerCase();                        //e
        s = l+b.substring(1);                       //emp
        String rootPkg = clazz.getPackage().getName();              //cn.itcast.erp.auth.emp.vo
        pkg = rootPkg.substring(0,rootPkg.length()-3);      //cn.itcast.erp.auth.emp
        dir = pkg.replace(".","/");                         //cn/itcast/erp/auth/emp/vo
    }
    /*
    public static void main(String[] args) throws Exception {
        //核心工作原理:文件IO+反射
        File f = new File("src/EmpAction.java");
        f.createNewFile();
        BufferedWriter bw = new BufferedWriter(new FileWriter(f));
        bw.write("public class EmpAction{}");
        bw.flush();
        bw.close();
    }
    */
}
目录
相关文章
|
2月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
55 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
WXM
|
3月前
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
Eclipse运行SSM/SSH项目教程
WXM
110 0
|
JavaScript Java 网络安全
从零玩转之JPOM自动化部署本地构建 + SSH 发布 java 项目
从零玩转之JPOM自动化部署本地构建 + SSH 发布 java 项目
303 0
|
5月前
|
Shell 网络安全 开发工具
GitLab创建项目的时候需要SSH Keys
GitLab创建项目的时候需要SSH Keys
34 0
|
Java 网络安全 Maven
16Maven - maven构建ssh项目(Eclipse版本)
16Maven - maven构建ssh项目(Eclipse版本)
69 0
|
JavaScript Java 网络安全
从零玩转之JPOM自动化部署本地构建 + SSH 发布 java 项目
从零玩转之JPOM自动化部署本地构建 + SSH 发布 java 项目
362 0
从零玩转之JPOM自动化部署本地构建 + SSH 发布 java 项目
|
前端开发 安全 Java
基于SSH框架的管理系统【完整项目源码】
基于SSH框架的管理系统【完整项目源码】
基于SSH框架的管理系统【完整项目源码】
|
前端开发 网络安全
ssh项目出现Bean property 'xxx' is not writable or has an invalid setter method解决方案!
ssh项目出现Bean property 'xxx' is not writable or has an invalid setter method 的解决方案
290 0
ssh项目出现Bean property 'xxx' is not writable or has an invalid setter method解决方案!
|
SQL Java 数据库连接
SSH项目,hibernate的查询操作出错org.hibernate.hql.ast.QuerySyntaxException
SSH项目,hibernate的查询操作出错org.hibernate.hql.ast.QuerySyntaxException
301 0
|
Java 网络安全
SSH开发项目:实现一组功能的步骤
本文主要讲实现一组功能的步骤
148 0