SQL写法4 - iXxxx()办法,Inline风格,在SQL里直接写参数,参数暂存在Threadlocal中,SQL履行时主动转化为preparedStatement,这种方法的长处是被赋值的字段和实际参数可以写在同一行上,字段多时利于保护,也便利根据不肯定的前提动态拼接SQL。这是始于jSqlBox的技巧立异。
ctx.iExecute("insert into users (", // " name ,", param0("Sam"), //SqlBoxContext.param0()办法的静态惹人,下同 " address ", param("Canada"), // ") ", valuesQuesions()); param0("Tom", "China"); ctx.iExecute("update users set name=?,address=?"); Assert.assertEquals(1L, ctx .iQueryForObject("select count(*) from users where name=? and address=?" + param0("Tom", "China"))); ctx.iExecute("delete from users where name=", question0("Tom"), " or address=", question("China"));SQL写法5 - tXxxx()办法, 模板风格,应用模板来存放SQL变量:
Map<String, Object> params=new HashMap<String, Object>(); User sam = new User("Sam", "Canada"); User tom = new User("Tom", "China"); params.put("user", sam); ctx.tExecute(params,"insert into users (name, address) values(#{user.name},#{user.address})"); params.put("user", tom); ctx.tExecute(params,"update users set name=#{user.name}, address=#{user.address}"); params.clear(); params.put("name", "Tom"); params.put("addr", "China"); Assert.assertEquals(1L, ctx.tQueryForObject(params,"select count(*) from users where name=#{name} and address=#{addr}")); params.put("u", tom); ctx.tExecute(params, "delete from users where name=#{u.name} or address=#{u.address}");SQL写法6 - tXxxx()办法,模板风格和Inline风格的结合应用:
Path的where()办法定义一个表达式,用于断定节点是否可以选中,表达式支撑的关键字有: 当前实体的所有字段名、>、 <、 =、 >、=、 <=、 +、 -、 *、/、null、()、not 以及 equals、contains等常见字符串函数,详见手册或单位测试源码。
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
user = new User("Sam", "Canada"); put0("user", user); ctx.tExecute("insert into users (name, address) values(#{user.name},#{user.address})"); user.setAddress("China"); ctx.tExecute("update users set name=#{user.name}, address=#{user.address}" + put0("user", user)); Assert.assertEquals(1L, ctx.tQueryForObject("select count(*) from users where ${col}=#{name} and address=#{addr}", put0("name", "Sam"), put("addr", "China"), WordStr("col", "name"))); ctx.tExecute("delete from users where name=#{u.name} or address=#{u.address}", put0("u", user));SQL写法7 - tXxxx()办法,依然是模板风格,然则运行期切换成应用另一个模板"NamedParamSqlTemplate",采取冒号来作参数分界符。
jSqlBox是一种开放式架构设计,它对事务、日记、模板都出缺省实现,然则也支撑切换成其它第三方实现。
注:如不雅有大年夜批的插入、更新语句,可以在开端前调用ctx.nBatchBegin()办法,停止后调用ctx.nBatchEnd办法,则插入办法将主动汇总成批量操作,不过应用此功能的前提是数据库要支撑批量操作功能(如MySQL要设定rewriteBatchedStatements=true)。
NoSQL萌芽
user = new User("Sam", "Canada"); ctx.setSqlTemplateEngine(NamedParamSqlTemplate.instance()); put0("user", user); ctx.tExecute("insert into users (name, address) values(:user.name,:user.address)"); user.setAddress("China"); ctx.tExecute("update users set name=:user.name, address=:user.address" + put0("user", user)); Assert.assertEquals(1L, ctx.tQueryForObject("select count(*) from users where ${col}=:name and address=:addr", put0("name", "Sam"), put("addr", "China"), WordStr("col", "name"))); ctx.tExecute("delete from users where name=:u.name or address=:u.address", put0("u", user));
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
DB-Engines 宣布了 2017 年 12 月份的数据库排名。排前 20 名的数据库中,Oracle 稳居第一,排名在第 9 名的 Cassandra 赶超排在第>>>详细阅读
本文标题:历时一年,Java 持久层工具 jSqlBox 迎来首个正式版
地址:http://www.17bianji.com/lsqh/39474.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示