皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

jSqlBox 4.0.1 发布,Java 数据库持久层工具

jSqlBox是一个Java全功能数据库持久层工具,主要特点是架构优、尺寸小、功能全,基本上所有与数据库操作相关的功能,jSqlBox都已提供。

jSqlBox有Java6和Java8两个版本发布,主页:  https://gitee.com/drinkjava2/jsqlbox

本次更新内容:
1. 从本次版本起,所有依赖都用源码内嵌的方式整合在项目里,不再有任何外部库依赖了,发布的单个jar包约1M大小。虽然尺寸看起来有点大,但是它提供的功能相当于以下软件主要功能的组合,所以依然可以用短小精悍来形容:

  • DbUtils的JDBC操作
  • Spring的依赖注入和声明式事务
  • MyBatis的实体关联查询
  • Hibernate的DDL生成、数据库方言、实体CURD
  • Sharding-JDBC的分库分表
  • Seata的分布式事务(基于自动创建回滚SQL,对业务无侵入)

2. [#IUVVF] 数据库方言从原来的枚举类型改为普通类的形式,以便于用户自已添加新的数据库方言,虽然jSqlBox已经自带了80多种方言,但能够添加自定义方言是一个架构上的改进。
方言使用示例:

  • Dialect dialect = Dialect.MySQL57InnoDBDialect; //使用系统自带的方言
  • Dialect myDialect = new Dialect(“My”); //用户自定义一个新的数据库方言,方言的各个属性为空,需要手工设置
  • Dialect myDialect = new Dialect(“Oracle9iDialect”); //手工自定义一个新的方言,以已存在的”Oracle9iDialect”方言为模板,可以在这个模板基础上修改它的个别属性

3. [#I14OUZ] 改正了@Column标签与JPA定义不符的问题,在columnDefinition里可以包含额外的DDL片段,例如:

  • @Column(insertable = false, columnDefinition = “timestamp not null default now() comment ‘创建时间'”)
  • java.util.Date d9;

4. [#I11Z5L] 实体映射新增了Calendar日期类,并新增了对以下7种Java8日期类型的支持:

  • LocalDate 映射为JDBC的DATE类型(具体生成的DDL还与数据库方言相关,下同)
  • LocalTime 映射为TIME类型
  • OffsetTime 映射为TIME类型
  • Instant 映射为TIMESTAMP类型
  • LocalDateTime 映射为TIMESTAMP类型
  • OffsetDateTime 映射为JTIMESTAMP类型
  • ZonedDateTime 映射为TIMESTAMP类型

5. 更正了在Oracle数据库下java.util.Date日期映射出错的问题,并增加了对JPA标准注解@Temporal的支持。到目前为止,jSqlBox一共支持15个主要的JPA注解(但是不包括@OneToMany、@ManyToOne注解,因为jSqlBox只是一个轻量级DAO工具,没有实体容器)。

6. 日志系统独立出来成为一个jLogs模块,它通过读取配置文件来决定采用何种日志系统,如果没有配置文件存在,日志默认输出到控制台。

7. 旧版的SqlBoxContext和JSQLBOX这两个类,因为名称太长不再推荐使用,在SqlBoxContext类上作了@Depercated标记,从4.0.0版本起改用命名更短的DbContext和DB。

8. 内嵌的jBeanBox模块更新到4.0.0版,这是一个只有3000行源码的通用IOC/AOP工具,新增了@Name、@Qualifier、@Component等注解和类扫描功能(感谢centychen的class-scanner项目!)。

最后顺便说一下,jSqlBox发布时分为jre6和jre8两个版本发布,以前的做法是将Java6和Java8放在两个目录里分别开发,而从jSqlBox 4.0.0版开始,合并在一个源码目录里了,它实现的原理是通过在源代码里添加编译开关,示例如下,例如有一段源码用到了Java8才有的日期类型:

    /*- JAVA8_BEGIN */  
       JAVA_TO_TYPE_MAP.put(java.time.LocalDate.class, Type.DATE);
           ....
    /* JAVA8_END */

在JDK8下发布时按正常发布步骤即可,当在JDK6环境下发布时,只需要先将 /*- JAVA8_BEGIN */ 用IDE全局替换成 /*- JAVA8_BEGIN, 将 /* JAVA8_END */ 全局替换成 JAVA8_END */ 即可。这样虽然Java语言本身虽然不支持编译开关,但利用源码的注释和文本替换也可以很容易实现在不同的JDK版本下编译和发布。

转自 https://www.oschina.net/news/113494/jsqlbox-4-0-1-released

分享到:更多 ()