3 Star 16 Fork 10

break_pointer / mapleLeaf

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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模板文件。(推荐)
  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配置
<?xml version="1.0" encoding="UTF-8"?>
<configure>
	<global>
		<!--生成代码路径 ,默认项目所在目录-->
		<property name="baseDir" value="f:\\code" />
		<!--基础包名,默认mapleLeaf.code-->
		<property name="basePackage" value="com.test" />
		<!-- 实体类名是否去掉表名前缀 ,默认false-->
		<property name="deleteTabPrefix" value="true" />
		<!-- 全局表名前缀,多个逗号分隔 ,默认""-->
		<property name="baseTabPrefix" value="sys_" />
		<!-- 表字段是否下划线转驼峰命名 ,默认false-->
		<property name="columnCamel" value="true" />
		<!-- 持久层框架(mybatis,hibernate,other),默认"mybatis" -->
		<property name="persistence" value="hibernate" />
		<!-- 一些公共类,工具类,父类等原样输出,不必需(包名=模板文件名(也是类名),多个逗号隔开) -->
		<!-- 这里配置了分页类,mybatis分页拦截器, mybatis通用配置-->
		<!--  
		<common>common=Page,common=PageInterceptor,resource=Xml_mybatis</common>
		-->
	</global>

	<!-- 数据库配置 -->
	<db>
		<!-- 数据库类型(mysql,oracle,sqlserver,postgresql,informix) -->
		<dbType>mysql</dbType>
		<!-- 数据库名 -->
		<dbName>demo2</dbName>
		<user>root</user>
		<pwd>q123</pwd>
		<driver>com.mysql.jdbc.Driver</driver>
		<url><![CDATA[jdbc:mysql://localhost:3306/demo2?useUnicode=true&characterEncoding=UTF-8]]></url>
	</db>

	<!-- 模块化配置,可以配置多个module,
			各模块相互独立,name属性为模块名 -->
	<module name="test">
		<!-- 
			package标签 主要支持大多数  dao,service,controller三层架构
			包名配置,如果为空或没配置,则该包对应的类不会生成代码 
		-->
		<package>
			<property name="entityPkg" value="entity"/>
			<property name="daoPkg" value="dao"/>
			<property name="servicePkg" value="service"/>
			<property name="controllerPkg" value="controller"/>
			<property name="mapperPkg" value="mapper"/>
		</package>
		<!--
			customArea自定义区域,只要提供可用模板,可任意生成代码,
			不仅仅java语言
		-->
		<customArea>
			<!-- 自定义生成,可以配置多组标签,不限于java语言,属性customPkg包名,属性suffix 文件后缀;
				标签内容为模板文件(不需要后缀),多个逗号分隔-->
			<codeFile customPkg="page" suffix="jsp">Jsp_list,Jsp_add,Jsp_view</codeFile>
			<!-- 自定义参数设置 ,模板中可以通过${param['author']!}获取参数值 -->
			<param key="author" value="mapleLeaf"></param>
		</customArea>
		
		<!-- table配置表,属性tabName表名,
			  exclude排除指定模板代码生成,多个逗号分隔(dao,service,controller,entity,custom)
			,prefix表前缀,有全局配置,感觉没什么用了-->
		<table tabName="sys_user" prefix="">
			<!-- 
			ref标签(单向)关联表,如果需要双向关联  两个table都需配置对应对方的ref
			ref所对应的 tabName,必须配置table
			ref标签内容为 主表字段=关联表字段,默认可以多组,逗号分隔(推荐单组字段)(多对多时,则为 主表字段=中间表字段)
			多对多时:需配置midTabName和midRefCol属性
			midTabName中间表 不用配置table;midRefCol属性为(中间表字段=关联表字段)
			多对一时:需配置forKey 主表的关联字段(即外键)
			一对一时:关联字段(即外键)是否在 主表中,如果是,则配置forKey
			-->
			<ref tabName="sys_role" type="ManyToMany" midTabName="sys_user_role" midRefCol="role_id=role_id">
				user_id=user_id
			</ref>
			<ref tabName="sys_dept" type="ManyToOne" forKey="dept_id">dept_id=dept_id</ref>
			<ref tabName="sys_user_info" type="OneToOne" forKey="user_info_id">
			user_info_id=user_info_id
			</ref>
			<!-- columnGroup字段集合标签,对字段属性设置
				exclude:排除字段,多个字段逗号分隔,以下属性一样。
				searchPos:页面查询条件;listPos:页面查询结果列表;inputPos:页面表单输入
			 -->
			<columnGroup searchPos="login_name,status" 
				inputPos="user_id,login_name,email,phonenumber,sex,status">
				<!-- 
					column字段标签,可自定义字段属性。
					colName:字段名;tagType:表单类型,默认text;labelName:字段文本
					column标签内容:字段值
				 -->
				<column colName="sex" tagType="radio" labelName="性别">
					0=男,1=女</column>
				<column colName="remark" tagType="textarea" />
			</columnGroup>
		</table>
		
		<table tabName="sys_role">
			<ref tabName="sys_user" type="ManyToMany" midTabName="sys_user_role" midRefCol="user_id=user_id">
				role_id=role_id
			</ref>
		</table>
		
		<table tabName="sys_dept" exclude="custom">
			<ref tabName="sys_user" type="OneToMany">dept_id=dept_id</ref>
		</table>
		
		<table tabName="sys_user_info"></table>
	</module>
</configure>
生成的部分代码展示
  • hibernate生成的实体类(SysUser部分代码)

User类部分代码

  • mybatis生成的xml配置(SysUserMapper.xml部分)

  • 页面生成的代码(简单处理了)

表单输入

查询

四、模板代码片段:

(有自定义宏标签和函数,template/lib/mf.ftl)

获取表字段信息
<#list columns as col>
	 ${col.propName}  //实体类属性名
	 ${col.propType}  //实体类属性java类型
	 ${col.colName}  //表字段名
	 ${col.pk}  //是否主键
     ...
</#list>
//也可以使用 temlate/lib/mf.ftl中的自定义标签<@list>,对null进行了初始化
<@mf.list columns;col>
	${col.propName}   //实体类属性名
</@mf.list>
获取所有关联表信息
<@mf.list refTables;reftb>
    ${reftb.entName}  //实体类
    ${reftb.refType}  //关联关系 如OneToOne,OneToMany等
    ${reftb.lowEntName} //实体类名首字母小写,可用作变量名
    ...	    
</@mf.list>
获取唯一索引(组合索引)或主键(组合主键)
// 如果表存在主键(组合主键),则uniIdxCols存主键字段
// 如果没有主键,查询唯一索引,取其中一组
// 如果主键,唯一索引都没有,则为空集合
<@mf.list uniIdxCols;col>
    ${col.colName}  //表字段名
    ${col.propName}  //字段对应属性
       ...
</@mf.list>
扒取登陆用户页面时,通过浏览器工具获取cookies,把HTTP打钩的name,value填进cookie文本域就行:

五、留言:

freemarker模板学习网址

v2.0.1已发布。

MIT License Copyright (c) 2019 mapleLeaf Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

代码生成,扒取网页 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/so_so/mapleLeaf.git
git@gitee.com:so_so/mapleLeaf.git
so_so
mapleLeaf
mapleLeaf
master

搜索帮助