# mapleLeaf **Repository Path**: so_so/mapleLeaf ## Basic Information - **Project Name**: mapleLeaf - **Description**: 代码生成,扒取网页 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 17 - **Forks**: 10 - **Created**: 2019-01-24 - **Last Updated**: 2024-11-21 ## Categories & Tags **Categories**: code-generator **Tags**: None ## README # mapleLeaf #### mapleLeaf程序员工具现包含 代码生成工具和扒取工具 两大模块 #### 一、本项目主要特点: 1. 项目运行不依赖数据库,简单方便。 2. 代码生成功能。 3. 扒取工具现有扒取网页,支持有用户登录的页面扒取,通过设置cookie(可用浏览器工具查看cookie)。可用作自己项目的模板,也可以静态演示。 #### 二、代码生成功能有哪些优势 >1. 主持多种主流数据库:mysql,oracle,sqlserver,postgresql等;还能很容易扩展需要支持的数据库。 >2. 支持多种类型的持久层:mybatis,hibernate等other持久层。 >3. 支持表之间的复杂关联关系,一对一,一对多,多对一,多对多,单双向的关联。 >4. 支持模块化生成代码,各模块之间相互独立,互不影响。 >5. 支持模板文件内容自定义,可自由编辑新增模板,生成自己业务需要的代码。模板使用了freemarker。 >6. 页面的代码生成有很好的支持;比如:字段表单类型分类,字段所在页面位置标识等。 >7. 不仅支持默认的java项目的dao,service,controller三层架构,而且支持强大的自定义,只要使用模板中现有的数据编辑模板,可以生成其他编程语言的文件。比如:页面jsp,js等等。可自定义参数,比如定义了 author作者,date日期等。 >8. 操作简单,只需要配置config.xml配置文件。 #### 三、项目部署及代码生成演示: 1. 如果用maven打成jar包运行时,需要在jar包所在目录下加入config.xml配置文件与template模板文件。(推荐) ![](https://s1.ax1x.com/2020/05/12/YUQx1A.png "") 2. 用maven打成war包运行,则不需要这些,直接启动服务即可。 ##### 以mysql数据库演示,分别生成mybatis,hibernate。 ##### 表结构 ``` CREATE TABLE sys_user ( user_id INT NOT NULL AUTO_INCREMENT COMMENT '用户ID', dept_id INT COMMENT '部门ID', user_info_id INT COMMENT '用户个人信息ID', login_name VARCHAR(30) NOT NULL COMMENT '登录账号', password VARCHAR(50) COMMENT '密码', user_name VARCHAR(30) NOT NULL COMMENT '用户昵称', email VARCHAR(50) COMMENT '用户邮箱', phonenumber VARCHAR(11) COMMENT '手机号码', sex CHAR(1) DEFAULT '0' COMMENT '用户性别;radio;0:男,1:女,2:未知', status CHAR(1) DEFAULT '0' COMMENT '账号状态;select;0:正常 ,1:停用', remark VARCHAR(500) COMMENT '备注', PRIMARY KEY (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'; CREATE TABLE sys_dept ( dept_id INT NOT NULL AUTO_INCREMENT COMMENT '部门id', parent_id INT DEFAULT '0' COMMENT '父部门id', dept_name VARCHAR(30) COMMENT '部门名称', leader VARCHAR(20) COMMENT '负责人', phone VARCHAR(11) COMMENT '联系电话', status CHAR(1) DEFAULT '0' COMMENT '部门状态;select;0:正常 ,1:停用', PRIMARY KEY (dept_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='部门表'; CREATE TABLE sys_user_info ( user_info_id INT NOT NULL AUTO_INCREMENT COMMENT '用户个人信息ID', real_name VARCHAR(30) NOT NULL COMMENT '真实姓名', address VARCHAR(100) COMMENT '住址', height DOUBLE COMMENT '身高', birthday TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '出生日期', PRIMARY KEY (user_info_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户个人信息表'; CREATE TABLE sys_role ( role_id INT NOT NULL AUTO_INCREMENT COMMENT '角色ID', role_name VARCHAR(30) NOT NULL COMMENT '角色名称', status CHAR(1) NOT NULL COMMENT '角色状态;radio;0:正常 ,1:停用', remark VARCHAR(500) COMMENT '备注', PRIMARY KEY (role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色信息表'; CREATE TABLE sys_user_role ( user_id INT NOT NULL COMMENT '用户ID', role_id INT NOT NULL COMMENT '角色ID', PRIMARY KEY (user_id, role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户和角色关联表'; ``` + 用户表 1-->1 用户个人信息表;用户表 n-->1 部门表; + 用户表 n-->n 角色表,用户和角色关联表为中间表; + COMMET约定格式(不区分中英逗号,分号,推荐中文;自动去除空格): 字段文本;表单类型;val1:text1,val2:text2 + 程序会自动加载这些属性,来支持页面的代码生成;当然也可在配置文件中再重新配置或新增。 + 表单类型现支持text,textarea,date,select,checkbox,radio,hidden,file。 ##### config.xml配置 ``` mysql demo2 root q123 com.mysql.jdbc.Driver Jsp_list,Jsp_add,Jsp_view user_id=user_id dept_id=dept_id user_info_id=user_info_id 0=男,1=女
role_id=role_id
dept_id=dept_id
``` ##### 生成的部分代码展示 + hibernate生成的实体类(SysUser部分代码) ![User类部分代码](https://s1.ax1x.com/2020/05/12/YU1EVK.png) + mybatis生成的xml配置(SysUserMapper.xml部分) ![](https://s1.ax1x.com/2020/05/12/YU8ecd.png) ![](https://s1.ax1x.com/2020/05/12/YUGURe.png) + 页面生成的代码(简单处理了) ![表单输入](https://s1.ax1x.com/2020/05/12/YUttiV.png "表单输入") ![查询](https://s1.ax1x.com/2020/05/12/YUt2RO.png "查询") #### 四、模板代码片段: (有自定义宏标签和函数,template/lib/mf.ftl) ##### 获取表字段信息 ``` <#list columns as col> ${col.propName} //实体类属性名 ${col.propType} //实体类属性java类型 ${col.colName} //表字段名 ${col.pk} //是否主键 ... //也可以使用 temlate/lib/mf.ftl中的自定义标签<@list>,对null进行了初始化 <@mf.list columns;col> ${col.propName} //实体类属性名 ``` ##### 获取所有关联表信息 ``` <@mf.list refTables;reftb> ${reftb.entName} //实体类 ${reftb.refType} //关联关系 如OneToOne,OneToMany等 ${reftb.lowEntName} //实体类名首字母小写,可用作变量名 ... ``` ##### 获取唯一索引(组合索引)或主键(组合主键) ``` // 如果表存在主键(组合主键),则uniIdxCols存主键字段 // 如果没有主键,查询唯一索引,取其中一组 // 如果主键,唯一索引都没有,则为空集合 <@mf.list uniIdxCols;col> ${col.colName} //表字段名 ${col.propName} //字段对应属性 ... ``` ##### 扒取登陆用户页面时,通过浏览器工具获取cookies,把HTTP打钩的name,value填进cookie文本域就行: ![](https://gitee.com/uploads/images/2019/0506/193643_baffe7d2_1135865.gif "在这里输入图片标题") #### 五、留言: [freemarker模板学习网址](http://freemarker.foofun.cn/index.html) v2.0.1已发布。