jSqlBox 2.0.4 发布,基于 DbUtils 内核的全功能 DAO 工具

栏目: 数据库 · 发布时间: 5年前

内容简介:在删除了SQL注解模式后,jSqlBox主模块的源码数量从30多个一下子降到了只有21个,清爽多了。多行文本支持需要配置Maven插件或手工拷贝源码到resources目录。jSqlBox中,所有ActiveRecord类自动具备Tail功能,查询时未映射到实体字段上的列将作为tail添加到实体中。当不想定义实体类时,也可以直接使用一个Tail实例来操作数据库,Tail类只有两行源码,继承于ActiveRecord类,相当于一个属性为空的实体。

本次更新内容如下:

  • 添加了根据数据库生成实体类源码功能, 实际上是在jDialects模块中增加了一个方法,将所有数据库表格按表名生成实体POJO或ActiveRecord类源码输出到指定目录下,现在jSqlBox不仅具有生成DDL的功能,也有了由数据库生成实体源码的功能了:

TableModelUtils.db2JavaSrcFiles(DataSource ds, Dialect dialect, boolean linkStyle, boolean activeRecord,String packageName, String outputfolder)
  • Sharding功能添加一个shard()方法, 当分库注解和分表注解出现在同一个主键上时,SQL中只需要使用一个shard()方法就可以了:

//对于同时具有分库、分表注解的实体类
    public class TheUser extends ActiveRecord<TheUser> {
        @ShardDatabase({ "MOD", "3" })    
        @ShardTable({ "MOD", "3" })
        @Snowflake
        @Id
        private Long id;

        private String name;
        ...
     }    
//旧版本的 SQL 写法:
iExecute(TheUser.class, "insert into ", shardTB(3), shardDB(3), " (id, name) values(?,?)", param(3, "u1"));

//新版的SQL写法为:
iExecute(TheUser.class, "insert into ", shard(3), " (id, name) values(?,?)", param(3, "u1"));

//ActiveRecord写法保持不变, 依然是透明式分库分表
new TheUser().setId(3).setName("Tom").insert();
  • 删除了Sql注解方式及对抽象类实例化的支持,因为发现这种用法带来的复杂性超过它的收益,不如直接利用Text类将SQL文本放在代码里。也就是说下面这种将SQL标注在方法上的写法在jSqlBox中不再支持:

  @Sql("select * from users where name=? and address=?")
  public List<Map<String, Object>> selectUsers(String name, String address);

在删除了SQL注解模式后,jSqlBox主模块的源码数量从30多个一下子降到了只有21个,清爽多了。

  • 增加Text类来支持多行SQL文本,支持IDE定位(利用类名)和重构,例如下面是jSqlBox中一个单元测试实例:

public class TextTest extends TestBase {
    public static class InsertDemoSQL extends Text {
        /*-  
        insert into demo
        (id, name)
        values(?, ?)
        */
    }
    public static class UpdateDemoSQL extends Text {
        /*-  
         update demo
         set name=#{d.name}
         where id=:d.id
        */
    }
    public static class SelectNameByIdSQL extends Text {
        /*-  
        select name from demo
             where id=?
        */
    }
    @Test
    public void test() {
        pExecute(new InsertDemoSQL(), "1", "Foo");
        Demo d = new Demo().putField("id", "1", "name", "Bar");
        tExecute(UpdateDemoSQL.class, bind("d", d));
        Assert.assertEquals("Bar", pQueryForString(SelectNameByIdSQL.class, "1"));
    }
}

多行文本支持需要配置Maven插件或手工拷贝源码到resources目录。

  • 新增了tail功能(在jSqlBox模块的ActiveRecord类中),这个借签了BeetlSql的Tail和jFinal的Record,原来ActiveRecord中的put和putFiels方法取消,取而代之的是putField/putTail以及forFields方法等。在jSqlBox的ActiveRecord中,Tail和普通setter/setter可以混用:

//setter方法、Tail方法、实体属性赋值方法可以混用, tail()方法中如果不加表名,表示使用与实体类相同的表
new User().setId("u1").putTail("usr_addr","Beijing").putField("userName","Tom").update(tail());  

//基于实体属性批量赋值
t.forFields("userName", "age", "birthDay");
t.putValues("Foo", 10, new Date()).insert();
t.putValues("Bar", 20, new Date()).insert();

//基于tail的批量赋值
t.forTails("user_name", "age", "birth_Day");
t.putValues("Foo", 30, new Date()).insert(TAIL);
t.putValues("Bar", 40, new Date()).insert(tail("tb_user"));

jSqlBox中,所有ActiveRecord类自动具备Tail功能,查询时未映射到实体字段上的列将作为tail添加到实体中。当不想定义实体类时,也可以直接使用一个Tail实例来操作数据库,Tail类只有两行源码,继承于ActiveRecord类,相当于一个属性为空的实体。

  • 个别方法名调整,而且原来entity系列方法全部改为采用单个e字母打头,如:

    List<User> users = ctx.entityFindBySample(u1);  ==>  现写为 List<User> users = ctx.eFindBySample(u1);
    List<User> users = ctx.entityFindAllList(User.class);  ==>  现写为 List<User> users = ctx.eFindAll(User.class);
  • jSqlBox中用到的jDialects项目,开源协议从LGPL改为更开放的Apache 2.0开源协议。

  • jTransactions声明式事务项目添加jFinal连接管理器支持。

  • jBeanBox项目(这是个独立发行的IOC/AOP工具,被jSqlBox-Java8版引用)更新到2.4.9版本,修复了不能获取父类属性的Bug。

  • 项目的demo目录下添加了三个常见MVC框架SpringBoot、ActFramework、jFinal的整合示例, 以及在SpringBoot环境下,jSqlBox和MyBatis混搭使用的演示(效果基本上就等同于MyBatis+MyBatisPlus)。

另外还在Wiki附录中添加了一个"DAO工具对比表" 详见 这里 ,将jSqlBox与其它DAO工具作了一个对比,对初学者、以及其它开源DAO软件作者来说可能都有借签意义,开源的优点就是可以互相借签、抄袭其它项目的设计思路、功能、甚至是源码(在符合开源协议前提下)而互相改进。

对比表中的打分和解释纯属个人看法,如有说错的还望指正。

以上为本次更新内容,完整的jSqlBox使用说明,请见它码云主页的 用户手册


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

秩序之美

秩序之美

Vinh / 人民邮电 / 2011-5 / 35.00元

怎样才能设计出简洁大方而不落于俗套的超人气网站?纽约时报网站的资深设计师Khoi Vinh在这《秩序之美——网页中的网格设计》一书中将为你揭示其中的奥秘。   《秩序之美——网页中的网格设计》将源自传统平面设计、被众多平面设计大师推崇的网格设计方法应用于网页设计,向读者详细介绍了网格设计成熟而经典的设计模式,并以整个网站的设计为例,对工作流程、设计工具和方法进行了系统而全面的介绍,手把手教读......一起来看看 《秩序之美》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

UNIX 时间戳转换