作家
登录

历时一年,Java 持久层工具 jSqlBox 迎来首个正式版

作者: 来源: 2017-12-05 13:04:46 阅读 我要评论

运行一下单位测试,没有报错,解释数据库已成功插入了一行数据。 以上示例应用了jDialects的功能创建了数据库脚本并在jSqlBox中运行并创建了数据库表。jDialects支撑15个重要的JPA注解,有9种主键生成方法,详情请见jDialects项目。在实际开辟情况中,往往用Spring或jBeanBox之类的IOC对象设备连接池单例和SqlBoxContext单例,例如:

  SqlBoxContext ctx = BeanBox.getBean(CtxBox.class);//由IOC对象来获取SqlBoxContext单例

应用IOC对象对各类常见数据库进行连接池的设备可详见单位测试的DataSourceConfig.java示例,因为我是jBeanBox的作者,所以用jBeanBox来演示,如不雅换采取Spring来设备也是一样的。

分页

ctx.nQuery(new MapListHandler(), ctx.paginate(3, 5, "select * from users")); ctx.nQuery(new MapListHandler(), SqlBoxContext.pagin(3, 5) + "select * from users"); ctx.nQuery(new MapListHandler(), "select * from users" + pagin(3,5));//静态惹人办法

动态设备

    User u=new User(); u.tableModel().setTableName("user_tb2");//动态改变映射数据表名为"user_tb2" u.tableModel().fkey().columns("teamId").refs("team", "id");//动态给teamId字段添加外键束缚 u.columnModel("id").pkey();//动态设定命据库表中的id列为主键 u.box().setContext(ctx2);//动态切换到新的高低文 u.box(). ...

以上示例中User持续于ActiveRecord类,拥有box()等办法,可以在运行期动态拜访并改变User类对应的TableModel设备(见jDialects项目)。

事务

jSqlBox项目本身不供给事务办事,而是应用jTransactions项目进行事务治理,这是一个包含了TinyTx和SpringTx两个事务实现的自力的事务办事对象。如不雅是大年夜DbUtils移植过来的旧项目,也可保持本来的事务运作方法,因为jSqlBox与DbUtils兼容。

重头戏 - jSqlBox支撑的10种SQL写法:

SQL写法1 - DbUtils对JDBC的包装棘手工负责连接的获取和封闭,获取连接用prepareConnection()办法,封闭连接用close(conn)办法。

    TinyNet net = ctx.netLoad(new User(), new Role(), Privilege.class, UserRole.class, RolePrivilege.class); Set<Privilege> privileges = net.findEntitySet(Privilege.class, new Path(User.class).where("id='u1' or id='u2'").autoPath(Privilege.class)); for (Privilege privilege : privileges) System.out.print(privilege.getId()+" ");

因为SqlBoxContext是DbUtils的QueryRunner类的子类,所以可以直接应用DbUtils的所有办法。

     Connection conn = null; try { conn = ctx.prepareConnection(); ctx.execute(conn, "insert into users (name,address) values(?,?)", "Sam", "Canada"); ctx.execute(conn, "update users set name=?, address=?", "Tom", "China"); Assert.assertEquals(1L, ctx.queryForObject(conn, "select count(*) from users where name=? and address=?", "Tom", "China")); ctx.execute(conn, "delete from users where name=? or address=?", "Tom", "China"); } catch (SQLException e) { e.printStackTrace(); } finally { try { ctx.close(conn); } catch (SQLException e) { e.printStackTrace(); } }

netLoad办法将根据所给参数,调入地点表的所有内容,在内存中拼成TinyNet实例代表的图状构造。留意TinyNet不是线程安然类,在多线程情况下应用要当心。

  • SQL写法2 - DbUtils对JDBC的包装之二,无需关怀连接的获取和封闭,应用这种方法要留意SqlBoxContext的生成必须供给一个dataSource构造参数。

        try { ctx.execute("insert into users (name,address) values(?,?)", "Sam", "Canada"); ctx.execute("update users set name=?, address=?", "Tom", "China"); Assert.assertEquals(1L, ctx.queryForObject("select count(*) from users where name=? and address=?", "Tom", "China")); ctx.execute("delete from users where name=? or address=?", "Tom", "China"); } catch (SQLException e) { e.printStackTrace(); }
        ctx.nExecute("insert into users (name,address) values(?,?)", "Sam", "Canada"); ctx.nExecute("update users set name=?, address=?", "Tom", "China"); Assert.assertEquals(1L, ctx.nQueryForObject("select count(*) from users where name=? and address=?", "Tom", "China")); ctx.nExecute("delete from users where name=? or address=?", "Tom", "China");	
    				
    			

      推荐阅读

      12 月全球数据库排名:PostgreSQL 稳步上升

    开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 DB-Engines 宣布了 2017 年 12 月份的数据库排名。排前 20 名的数据库中,Oracle 稳居第一,排名在第 9 名的 Cassandra 赶超排在第>>>详细阅读


    本文标题:历时一年,Java 持久层工具 jSqlBox 迎来首个正式版

    地址:http://www.17bianji.com/lsqh/39474.html

  • 关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)