• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

sql2java: 轻量级数据库(SQL)访问代码(java)生成器

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

sql2java

开源软件地址:

https://gitee.com/l0km/sql2java

开源软件介绍:

sql2java

sql2java是一个轻量级数据库(SQL)访问代码(java)生成器,是在国外一款同名开源项目(https://sourceforge.net/projects/sql2java)的基础上重写的ORM工具,以maven 插件方式运行,目前在mysql下测试通过已经应用于实际项目开发中

  • 生成的表记录的java bean类支持thrift/swift,swagger 注释,生成的java bean对象可以直接用于thrift/swfit服务的数据类型
  • 支持表记录内存缓存(cache)机制
  • 支持侦听器(listener)机制用于通知表记录增册改事件
  • 支持事务(transaction)操作
  • 支持自增长键(AUTO_INCREMENT)
  • 支持自定义扩展模板(velocity),用户可以使用自定义的模板生成扩展代码
  • 支持乐观锁(optimisticlock)

生成的java代码结构

bean

生成的数据记录类示例

bean

编译项目

编译要求 JDK 1.7,Maven 3.5 以上版本

# 下载源码git clone https://gitee.com/l0km/sql2java.gitcd sql2java # 编译全部mvn install 

sql2java的maven插件已经发布到maven中央仓库,如果只是要运行maven插件无需编译本项目

快速使用说明

创建配置文件

如下创建一个最简的参数配置文件(mysql2java.properties),用于告诉sql2java如何生成java代码, "#"起始的行为注释

# 指定 JDBC driver,告诉sql2java如何连接数据jdbc.driver=com.mysql.jdbc.Driver# 对于 mysql 数据库,如果 useInformationSchema=false 或没指定,则无法获取表中的注释信息jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useInformationSchema=truejdbc.username=rootjdbc.password=jdbc.schema=test# 定义生成代码的包名codewriter.package=sql2java.test

生成代码

执行如下maven插件,即开始从数据库中读取表结构信息并生成对应的java代码到当前文件夹下(src/main)

$ mvn com.gitee.l0km:sql2java-maven-plugin:generate \	-Dsql2java.classpath=lib/mysql-connector-java-5.1.43-bin.jar \	-Dsql2java.propfile=mysql2java.properties[INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------------------------[INFO] Building sql2java test 0.0.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] [INFO] --- sql2java-maven-plugin:1.0.6-SNAPSHOT:generate (default-cli) @ sql2java-test ---        database properties initialization[INFO] classpath: [file:/D:/j/sql2java.test/lib/mysql-connector-java-5.1.43-bin.jar]Connecting to root on jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useInformationSchema=true ...    Connected.    Database server :MySQL.Loading table list according to pattern t_% ...    table t_book found    table t_user foundsamePrefix = [t_]Loading columns ...        t_book.id INT  default value: null        t_book.name VARCHAR  default value: null        t_book.borrower INT  default value: null    t_book found 3 columns        t_user.id INT AUTOINCREMENT default value: null        t_user.name VARCHAR  default value: null        t_user.birthdate DATE  default value: null        t_user.phone VARCHAR  default value: null        t_user.address VARCHAR  default value: null    t_user found 5 columnsDatabase::loadPrimaryKeysFound primary key (seq,name) (1,id) for table 't_book'Found primary key (seq,name) (1,id) for table 't_user'Loading imported keys ...    t_book.id -> t_user.id found seq:1 foreign key name:fk_id    UPDATE_RULE:NO_ACTION    DELETE_RULE:RESTRICTLoading indexes ...  Found interesting index phone_UNIQUE on phone for table t_userLoading procedures ...Generating template /templates/velocity/java5g/perschema/constant.java.vm .... writing to src/main\java\sql2java\test\Constant.java    java\sql2java\test\Constant.java done.Generating template /templates/velocity/java5g/perschema/database.properties.vm .... writing to src/main\resources/conf\database.properties    resources/conf\database.properties done.Generating template /templates/velocity/java5g/perschema/gu.sql2java.irowmetadata.vm .... writing to src/main\resources/META-INF/services\gu.sql2java.IRowMetaData    resources/META-INF/services\gu.sql2java.IRowMetaData done.Generating template /templates/velocity/java5g/pertable/bean.java.vm .... writing to src/main\java\sql2java\test\BookBean.java    java\sql2java\test\BookBean.java done.Generating template /templates/velocity/java5g/pertable/manager.interface.java.vm .... writing to src/main\java\sql2java\test\IBookManager.java    java\sql2java\test\IBookManager.java done.Generating template /templates/velocity/java5g/pertable/metadata.java.vm .... writing to src/main\java\sql2java\test\BookMetaData.java    java\sql2java\test\BookMetaData.java done.Generating template /templates/velocity/java5g/pertable/bean.java.vm .... writing to src/main\java\sql2java\test\UserBean.java    java\sql2java\test\UserBean.java done.Generating template /templates/velocity/java5g/pertable/manager.interface.java.vm .... writing to src/main\java\sql2java\test\IUserManager.java    java\sql2java\test\IUserManager.java done.Generating template /templates/velocity/java5g/pertable/metadata.java.vm .... writing to src/main\java\sql2java\test\UserMetaData.java    java\sql2java\test\UserMetaData.java done.[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.248 s[INFO] Finished at: 2019-12-16T13:51:20+08:00[INFO] Final Memory: 13M/308M[INFO] ------------------------------------------------------------------------

com.gitee.l0km:sql2java-maven-plugin插件已经发布到maven中央仓库,无需编译本项目就可直接运行,上面的例子中没有指定插件的版本,则默认使用最新版本的插件

参数说明:

namedescription
sql2java.classpath指定连接数据库的JDBC driver jar包
sql2java.propfile指定sql2java生成代码必须的配置文件

完整示例

参见sql2java演示项目: https://gitee.com/l0km/sqljava-test

用户可以在此演示项目的基础上修改完成自己的ORM代码项目结构

实际应用示例

参见开源项目 facelog: https://gitee.com/l0km/facelog/tree/master/db2

获取所有参数说明

为了控制java代码的生成方式,sql2java有几十个控制参数,默认情况下大部分可以不用修改,如果需要需要修改,就需要获取这些参数名字及说明,如下执行 maven 插件,显示所有配置说明以及插件本身的参数说明:

mvn com.gitee.l0km:sql2java-maven-plugin:help

如下执行 maven 插件,则在当前文件夹下生成一份名为my.properties的默认参数配置文件,你可以在此文件的基础上修改自己的代码生成配置:

$ mvn com.gitee.l0km:sql2java-maven-plugin:help -Dsql2java.output=my.properties[INFO] Scanning for projects...[INFO][INFO] ------------------------------------------------------------------------[INFO] Building sql2java test 1.0.2[INFO] ------------------------------------------------------------------------[INFO][INFO] --- sql2java-maven-plugin:1.0.2:help (default-cli) @ sql2java-test ---[INFO] OUTPUT PROPRETIES TO J:\sql2java.test\my.properties[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.495 s[INFO] Finished at: 2019-11-20T15:25:27+08:00[INFO] Final Memory: 10M/308M[INFO] ------------------------------------------------------------------------

参数说明

SQL2JAVA的参数配置及说明如下

参数以参数名=参数值形式定义,所有#开始的行皆为注释行

#______________________________________________## (1/8) 数据库访问配置(必填)#______________________________________________# JDBC驱动类名#jdbc.driver=org.hsqldb.jdbcDriver# 数据库访问的URL#jdbc.url=jdbc:hsqldb:hsql://localhost# 访问数据库的用户名#jdbc.username=sa# 访问数据库的密码#jdbc.password=# 访问的数据库名#jdbc.schema=null#______________________________________________## (2/8) 配置自增长键的检索方式(可选)#______________________________________________# 此部分配置用于在插入记录时获取自增长键的值# 对于JDBC 3.0以上支持PreparedStatement.getGeneratedKeys方法# (DatabaseMetaData.supportsGetGeneratedKeys()返回true)的JDBC 驱动不需要配置此部分## generatedkey.retrieve 可选值:## auto - [默认值]getGeneratedKeys方法自动获取,当使用JDBC 3.0 driver时适用.## before - 在插入(insert)记录之前获取自增长键值## after - 在插入(insert)记录之后获取自增长键值## generatedkey.statement用于定义获取自增长键值的SQL语句# If you set it to before or after you also need to configure the# autogeneratedkey.statement properties.# <TABLE> 占位符用于取代当前表名# <KEY> 占位符用于取代当前自增长键字段名##generatedkey.retrieve=auto#generatedkey.statement=#______________________________________________## (3/8) 生成代码配置(可选)#______________________________________________# 生成java代码的包名codewriter.package=gu.sql2java.demo# 生成java代码的文件夹codewriter.destdir=src/main# 生成扩展java代码的文件夹#codewriter.destdir.extension=# 生成扩展java代码的包名#codewriter.package.extension=# 定义被bean.converter.utils.java.vm 模板忽略的字段名#general.beanconverter.tonative.ignore=create_time,update_time# 生成的java bean是否支持facebook/swift 注释(annotation)#swift.annotation.bean = true # 生成的java bean是否支持swagger 注释(annotation)#swagger.annotation.bean = true # 对于有primitive 类型(Integer,Long,Double...)的字段是否生成primitive类型的setter方法 codewriter.bean.primitiveSetter = true# generate Long setter for Date type# 对于 java.util.Date 类型的字段是否生成 Long类型的setter方法codewriter.bean.dateLongSetter = true# Date 类型的JSON 序列化类型 :# Long 系统时间(毫秒)# String ISO8601 时间日期格式的字符串# 当指定了 swift或jackon注解时有效codewriter.bean.dateSerializeType = Long# 当 dateSerializeType 为 String 的日期格式,默认为IS8601 格式codewriter.bean.dateStringFormat=yyyy-MM-dd'T'HH:mm:ss.SSSZ# modified,initialized 字段的类型(不要修改)bitstate.type = int# 字节数对应的java类型:#  byte[]#  java.nio.ByteBuffer# default byte[] if not specialized#binary.type = byte[]#set properties file name for database database.properties.env=config_folderdatabase.properties.isdebug=falsedatabase.properties.dir=resources/confdatabase.properties=database.properties#flag for compatible with axis2#bean.compatible_axis2=true# Property file to use when initializing Velocity#codewriter.velocityprops=somefile# 默认加载模板的路径(不要修改)velocity.templates.loadingpath=/templates/velocity/includes# 为每张表(pertable)和每个方案(perschema)加载子模板的加载起始路径(不要修改)velocity.templates=/templates/velocity/############ 扩展模板 ################ 用户可以通过下面的扩展模板参数,指定自己定义的模板(.vm)文件的位置# sql2java generator会根据指定的参数执行扩展模板生成代码 # 扩展模板的加载路径#velocity.templates.loadingpath.extension=# 为每张表(pertable)和每个方案(perschema)加载扩展模板的加载起始路径	#velocity.templates.extension =# sets a prefix to prepend to all generated classes# useful if you are worried about namespace collision with reserved words# or java.lang classescodewriter.classprefix=# 是否为字段生成默认值codewriter.generate.defaultvalue=true#______________________________________________## (4/8) 表和模板过滤配置(可选)#______________________________________________## 通过表类型过滤# 用于指定需要生成代码的表类型(用逗号分隔的表类型列表)# 表类型定义为:TABLE, VIEW, SYSTEM TABLE, SYNONYMjdbc.tabletypes=TABLE, VIEW# 通过表名过滤# 使用通配%来过滤需要生成代码的表名# 你可以指定一个逗号分割的通配符过滤列表# 比如 %_name,ul_% 只对后缀为_name,或前缀为ul_的表名生成代码# 默认对schema中所有的表生成代码jdbc.tablenamepattern=%# 表名白名单/名单过滤(此特性暂未启用)# 白名单# 空格分隔的表名列表,只在此名单中的表才会被生成代码# 黑名单# 空格分隔的表名列表,在此名单中的表不会被生成代码# 白名单和黑名单只能定义一个,如果同时指定了白名单和黑名单则忽略黑名单  # 白名单过滤tables.include=# 黑名单过滤tables.exclude=# 模板文件夹名白名单/名单过滤# 白名单# 空格分隔的表名列表,只在此名单中的模板文件夹中的模板才会被生成代码# 黑名单# 空格分隔的表名列表,在此名单中的模板文件夹中的模板不会被生成代码# 白名单和黑名单只能定义一个,如果同时指定了白名单和黑名单则忽略黑名单  template.folder.exclude=template.folder.include=java5g   # java5g : general bean & manager templates for java5#______________________________________________## (7/8) JDBC 类型映射(可选)#______________________________________________## jdbc DATE类型映射的java类型,可选值:#  java.sql.Date#  java.util.Datejdbc2java.date=java.util.Date# jdbc TIME类型映射的java类型,可选值:#  java.sql.Time#  java.util.Datejdbc2java.time=java.util.Date# jdbc TIMESTAMP类型映射的java类型,可选值:#  java.sql.Timestamp#  java.util.Datejdbc2java.timestamp=java.util.Date#______________________________________________## (8/8) 乐观锁配置(可选)#______________________________________________# optimisticlock.type 有两个可选项值:# none - 乐观锁机制未启用(default).# timestamp - 乐观锁字段包含 System.currentTimeMillis() 值.## optimisticlock.column 定义乐观锁的字段名,如果字段名不存在则乐观锁机制不会启用# 乐观锁的字段类型可以是java.lang.Long or java.lang.String.optimisticlock.type=timestampoptimisticlock.column=version_time

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap