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

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

内容简介:在删除了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使用说明,请见它码云主页的 用户手册


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

查看所有标签

猜你喜欢:

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

The Art of Computer Programming, Volumes 1-3 Boxed Set

The Art of Computer Programming, Volumes 1-3 Boxed Set

Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99

This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具