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

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

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

本次更新内容如下:

  • 添加了根据数据库生成实体类源码功能, 实际上是在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使用说明,请见它码云主页的用户手册


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


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

查看所有标签

猜你喜欢:

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

长尾理论

长尾理论

[美] 克里斯·安德森 / 乔江涛 / 中信出版社 / 2006-12 / 35.00元

书中阐述,商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”(hits)的头部; 而是那条代表“冷门商品”(misses)经常为人遗忘的长尾。 举例来说, 一家大型书店通常可摆放10万本书,但亚马逊网络书店的图书销售额中,有四分之一来自排名10万以后的书籍。这些“冷门”书籍的销售比例正以高速成长,预估未来可占整体书市的一半。 这意味着消费者在面对无限的选择时,真正想要的东西、和想要取得......一起来看看 《长尾理论》 这本书的介绍吧!

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

各进制数互转换器

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

在线XML、JSON转换工具

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

RGB CMYK 互转工具