jDialects 5.0.12 更新,数据库方言工具,添加动态增删列功能

栏目: 软件资讯 · 发布时间: 2年前

内容简介:简介 jDialects是一个Java数据库方言工具,目的是解决跨数据库问题,支持80多种关系数据库方言,具有分页、函数变换、类型变换、DDL生成、JPA注解解析等功能。它可以与JDBC工具组合使用,也可以作为ORM工具的一个...

简介

jDialects是一个 Java 数据库方言工具,目的是解决跨数据库问题,支持80多种关系数据库方言,具有分页、函数变换、类型变换、DDL生成、JPA注解解析等功能。它可以与JDBC工具组合使用,也可以作为ORM工具的一个组件。

优点

  • 无侵入:jDialects原理基于对 SQL 文本进行变换,对持久层 工具 无侵入
  • 依赖少:不依赖任何第三方库,基至把源码拷到项目里也能工作
  • 从Annotation创建DDL:根据实体注解生成解析,包括一些主要的JPA注解的解析
  • 从Java方法创建DDL:提供Java方法配置来创建DDL,同样的语法也可以在运行期修改配置。
  • 从数据库生成实体类源码:可以读取数据库结构,生成各种可定制格式的实体类源码或导出Excel。
  • 主键生成器:提供十多种主键生成器,和一个分布式主键生成器,为开发ORM工具提供便利
  • 分页:提供跨数据库的分页方法
  • 函数变换:对不同的数据库解析成对应方言的函数,尽量做到一次SQL到处运行。
  • 类型变换:对不同的数据库字段类型,提供与Java类型的互相变换。
  • 保留字检查:提供数据库保留字检查功能。

本次更新:

1. 添加运行期增删列DDL生成功能,这个要求已多次出现,据说可以用于动态表单。胳膊拧不过大腿,这次就增加这个功能。结合jSqlBox的使用示例如下:

    @Test
    public void testAddDropColumnsAtRuntime() {//动态添加删除列
        DbContext db = new DbContext(ds);
        Dialect dialect = db.getDialect(); 
        TableModel t1 = new TableModel("tb_test");
        t1.column("id").INTEGER().pkey();
        db.quiteExecute(db.toDropAndCreateDDL(t1));//新建表

        db.exe("insert into tb_test (id) values(?)", DB.par(1));
        Systemout.println("此时只有1列=" + db.qryMapList("select * from tb_test")); 

        
        ColumnModel name = new ColumnModel("name").STRING(10).comment("新增的列");//column可以单独创建,再设定它的tableModel
        name.setTableModel(t1); 
        String[] add = dialect.toAddColumnDDL(name, t1.column("age").INTEGER(), t1.column("price").DOUBLE());
        db.executeDDL(add); //新增三个列
        db.exe("insert into tb_test (id, name, age, price)", DB.par(2, "tom", 5, 100.0), DB.VQ);
        Systemout.println("此时有4列 =" + db.qryMapList("select * from tb_test ") ); 
        
        db.executeDDL(dialect.toDropColumnDDL(t1.column("name"), t1.column("age"))); //删除两个列
        Systemout.println("此时有2列=" + db.qryMapList("select * from tb_test")); //此时有2列
        
        //改名和改类型目前不能直接做到,但可以新建一列,再用SQL拷贝,然后再删除旧列
        db.executeDDL(dialect.toAddColumnDDL(t1.column("new_price").DECIMAL(5, 2)));
        db.exe("update tb_test set new_price=price");
        db.executeDDL(dialect.toDropColumnDDL(t1.column("price")));
        Systemout.println("此时price被改名成了new_price=" + db.qryMapList("select * from tb_test")); //此时price被改名成了new_price
    }

使用jDialects生成的DDL,是跨数据库的,这是和直接使用原生SQL的区别。当然如果有bug发现请提交issue,因为条件所限,我不能做到在所有数据库上一一测试。
另外动态增删列要注意3点:
1).动态修改数据库结构后,可能需要关闭数据连接池并重新初始化,否则某些数据连接池(如HikariCP)因为PreparedStatement缓存没有清除的原因,用"select *"读取所有列时会出错。
2).在jDialects中,为了维护简单化,动态增删的列不能有外键、主键、约束、自增、索引,只允许是普通的列。
3).目前不支持直接改列名或改变列属性定义,这个可以通过新建一列,拷贝旧列内容到新列再删除旧列的方法变通实现。

2. 更正Decimal、Datatime类型在生成DDL时出错的bug

3. 更正cast函数不支持的bug
4. 重构源码,以便于阅读和扩展新的方言。如需扩展新方言可见jSqlBox项目test目录下的SampleDialectTest.java示例。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站重构(第3版)

网站重构(第3版)

[美] Jeffrey Zeldman、[美] Ethan Marcotte / 傅捷、祝军、李宏 / 电子工业出版社 / 2011-3 / 59.00元

《网站重构:应用Web标准进行设计(第3版)》内容简介:畅销书作家、设计师、网页标准教父jeffrey zeldman再次更新了他经典的、颠覆行业的指南书。这已经是《网站重构:应用Web标准进行设计(第3版)》的第3版了,此次更新基本涵盖了随着环境和技术的变化,web标准所面临的挑战以及因此而发生的改善。第3版让基于标准的设计思想更加清晰,更加易于理解,帮助你在这个领域中保持聪明和领先。 ......一起来看看 《网站重构(第3版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具