jdbc 生成建表语句_kunter-generator: Kunter代码生成工具 从数据库和Excel模板读取表结构生成基于MyBatis的DAO、SQLMap和EO,实现了从Excel生成数据库...

kunter-generator

特别声明:因为采用了12c特有分页语法,本工具Oracle暂时不支持Oracle 12c以下版本

本工具参考MyBatis官方generator设计而成,参考版本为(1.3.2)。具有生成项目基础代码、根据数据库生成Excel格式的设计文档、根据Excel格式生成创建数据库脚本功能,

为了方便项目随时更换底层,生成的基础代码独立目录,不建议对生成的代码进行修改;目前设计支持Oracle、MySQL、PostgreSQL

添加Service层代码生成,老的代码生成器不支持Service生成,调整了生成代码结构、整合了BaseDAO和BaseService,代码运行GeneratorService会生成整套新代码

更新日志

2019-5-7 添加生成getSelectByPrimaryKeyForUpdate方法,处理MySQL的DATETIME类型,调整SMALLINT类型在Java中映射为Integer,通过Excel生成Java或者SQL的时候过滤表结构模板,调整生成的建表SQL默认编码为utf8mb4

2018-6-6 升级部分依赖包,修正已过时方法的调用,优化代码

2017-11-24 ignore增加IDEA的忽略文件,对超长表名的处理及简化后Sheet名称重复问题,使用WorkbookFactory创建Workbook对象,去除采用文件名后缀判断Excel类型的操作

2016-7-18 修复生成的Example文件中currentSize属性get方法名称的问题

2016-7-14 修复因升级MySQL Connector Java版本升级造成的获取字段备注中文乱码问题

2016-4-28 调整代码,共通dao和service引用jar包

2016-4-21 调整项目包结构,添加Service层代码生成

2016-4-20 修正Example文件生成的格式,修正Page计算逻辑,修改文件生成日期为当前日期,Example文件中添加由当前页和当前页显示条数计算当前页起始条数,添加分页对象Page的生成

2015-12-21 添加JDBC连接参数,修复生成Excel一览页面表名称链接问题,修复Excel生成SQL类型读取错误

2015-12-18 修复PostgreSQL读取不到表列表的BUG

2015-12-8 添加表的别名,为了自定义联合查询可以方便使用生成的SQL片段,别名规则:表名存在“_”分隔符额取每段首字母,不存在分隔符则截取表名前三位,不满前三位的使用表全称。

2015-9-21 合并 loocao 推送的 非逻辑删除生成insertSelective方法时,加上_physical的问题

2015-9-11 修复MyBatisConfig和CreateTableSQL在分模块生成文件的错误;修改类名生成逻辑,支持不同模块下相同表名

2015-9-10 修改代码生成逻辑,变更代码生成方式支持跨模块生成

2015-9-2 修改BaseDAO和BaseXML方法名称,在不需要逻辑操作的时候将物理操作的_physical后缀去除

2015-8-28 修复Excel数据源读取不出数据的错误,修复Excel数据源长度读取问题,修复insertListSelective、insertListSelective_physical方法的SQL错误

2015-8-21 修改实体生成实现Serializable接口

2015-7-30 修复一些Bug,删除分支Dev,因为一些分支在Dev上修改还没同步到Master上面,一些通过Master代码生成会出现相应错误

2015-7-2 调整生成策略,数据逻辑操作可配置

2015-6-30 修复Sonar扫描出的阻断性BUG

基础代码生成

生成文件列表:

Page *

BaseService *

BaseServiceImpl *

Service *

ServiceImpl *

BaseDAO ^

DAO

BaseMapper

Mapper

EO(实体)

EOExample(实体对应查询条件)

mybatis-config-*.xml

CreateTableSQL-*.sql(从EXCEL设计文档生成指定数据库的建表语句)

表结构一览.xlsx(从数据库生成EXCEL设计文档)

标*的表示新的代码生成文件,标^的表示两套生成的不一致不兼容

配置说明:

####1. 配置文件目录:/src/main/resources

1.1 jdbc.properties

[a] SourceType:数据源类型,可选择(DB、EXCEL)

[b] path.dictionary:数据字典目录,设置数据源类型为EXCEL时必须设值,支持中文目录 ** 注意路径,必须为双斜杠或者反斜杠 **

[c] DB:数据库类型,必须设值,可选择(ORACLE、MYSQL、POSTGRESQL)

[d] DB.xx:数据库连接属性,数据库类型相关连接属性,设置DB类型必须设值

1.2 config.properties

[a] model:是否按模块生成,值:true|false;如果设置为true,则通过“_”截取表名称第一个作为模块化包名称

[b] logical:是否逻辑操作,值:true|false;配置需要逻辑操作需要库表中存在字段:delete_flag、create_date、create_user_id、update_date、update_user_id,正常数据delete_flag值为“0”,逻辑删除将delete_flag的值变更为“1”,其他四个字段也相应的由系统控制

[c] package:基础包名,所有包前缀,例:cn.kunter

[d] table:表名称,支持通配符“%”,多表名通过“,”分割 例:%|base_%|base_%,admin_account

** 数据源类型为EXCEL,则参数无效 建议使用EXCEL的时候分模块保存设计文档 **

[e] target:输出目录,可以为绝对目录或者相对目录,例:target/ 当前kunter-generator下的target/

根据以上配置,模拟生成如下所述文件:

BaseDAO:cn.kunter.base.dao.base

DAO:cn.kunter.base.dao

BaseMapper:cn/kunter/base/xml/base

Mapper:cn/kunter/base/xml

EO:cn.kunter.base.eo

EOExample:cn.kunter.base.eo

mybatis-config-base.xml:指定的target目录下

如果target参数直接指定的开发项目,如果需要,手动将BaseMapper和Mapper挪到/src/main/resources

新的生成器,模拟生成如下所述文件:

Page:cn.kunter.common.eo

BaseService:cn.kunter.common.service

BastServiceImpl:cn.kunter.common.service.impl

Service:cn.kunter.base.service

ServiceImpl:cn.kunter.base.service.impl

BaseDAO:cn.kunter.common.dao

DAO:cn.kunter.base.dao

BaseMapper:cn/kunter/base/xml/base

Mapper:cn/kunter/base/xml

EO:cn.kunter.base.eo

EOExample:cn.kunter.base.eo

mybatis-config-base.xml:指定的target目录下

如果target参数直接指定的开发项目,如果需要,手动将BaseMapper和Mapper挪到/src/main/resources

Main

cn/kunter/common/generator/main/Generator.java

cn/kunter/common/generator/main/GeneratorService.java

两套代码DAO不兼容,老版本的生成的DAO无法适用生成的Service

单文件生成

cn/kunter/common/generator/make/Make*.java

DAO方法列表

int countByExample(>Example example);

int countByExample_physical(>Example example);

List> selectByExample(>Example example);

List> selectByExample_physical(>Example example);

int insert(> record);

int insert_physical(> record);

int insertList(List> record);

int insertList_physical(List> record);

int insertSelective(> record);

int insertSelective_physical(> record);

int insertListSelective(List> record);

int insertListSelective_physical(List> record);

int updateByExample(@Param("record") > record, @Param("example") >Example example);

int updateByExample_physical(@Param("record") > record, @Param("example") >Example example);

int updateByExampleSelective(@Param("record") > record, @Param("example") >Example example);

int updateByExampleSelective_physical(@Param("record") > record, @Param("example") >Example example);

int deleteByExample(>Example example);

int deleteByExample_physical(>Example example);

> selectByPrimaryKey(Map map);

> selectByPrimaryKeyForUpdate(Map map);

> selectByPrimaryKey_physical(Map map);

> selectByPrimaryKeyForUpdate_physical(Map map);

int updateByPrimaryKey(> record);

int updateByPrimaryKey_physical(> record);

int updateByPrimaryKeySelective(> record);

int updateByPrimaryKeySelective_physical(> record);

int deleteByPrimaryKey(Map map);

int deleteByPrimaryKey_physical(Map map);

Service方法列表

int countByExample(>Example example);

int countByExample_physical(>Example example);

List> selectByExample(>Example example);

List> selectByExample_physical(>Example example);

Page selectPageByExample(>Example example);

Page selectPageByExample_physical(>Example example);

int insert(> record);

int insert_physical(> record);

int insertList(List> record);

int insertList_physical(List> record);

int insertSelective(> record);

int insertSelective_physical(> record);

int insertListSelective(List> record);

int insertListSelective_physical(List> record);

int updateByExample(> record, >Example example);

int updateByExample_physical(> record, >Example example);

int updateByExampleSelective(> record, >Example example);

int updateByExampleSelective_physical(> record, >Example example);

int deleteByExample(>Example example);

int deleteByExample_physical(>Example example);

> selectByPrimaryKey(Map map);

> selectByPrimaryKey_physical(Map map);

int updateByPrimaryKey(> record);

int updateByPrimaryKey_physical(> record);

int updateByPrimaryKeySelective(> record);

int updateByPrimaryKeySelective_physical(> record);

int deleteByPrimaryKey(Map map);

int deleteByPrimaryKey_physical(Map map);

>为对应实体,ByPrimaryKey的方法有主键时生成,_physical包含表中所有数据,无_physical的包含删除标识未标识删除的数据

示例

>Example example = new >Example();

example.or().andxxEqualTo(XXX);

example.or().andxxEqualTo(XXX);

example.or().andxxEqualTo(XXX);

List> list = >Dao.selectByExample(example);

#####或

>Example example = new >Example();

>Example.Criteria criteria = example.createCriteria();

criteria.andxxEqualTo(XXX);

criteria.andxxEqualTo(XXX);

criteria.andxxEqualTo(XXX);

List> list = >Dao.selectByExample(example);

技术交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值