| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
11年前发布

SQL模板引擎:SqlTemplate

遇到过动态拼接sql字符的同学,一定深知其中痛苦,我本人也其中受害者之一。SqlTemplate 是通过模板方法解决动态sql,把模板内容构建成完成的xml,这样可以解析成相关的数据结构, 再结合Ognl强大表达式计算条件。设计上参考了MyBatis动态sql部分,为了减少学习成本,兼容Mybatis大部分用法。目前能支持以下标签:

  • if
  • choose (when, otherwise)
  • trim , where, set
  • foreach

详细用法,请参考MyBatis

源码地址:https://github.com/wenzuojing/SqlTemplate

非常欢迎大家提建议和指正

例1:动态查询

SqlTemplateEngin sqlTemplateEngin = new SqlTemplateEngin();      String sqlTpl = "select * from user_info <where><if test=' username != null' > and  username = #{username} </if><if test=' email != null' > and  email = #{email} </if></where> ";      //从字符串读取sql模板内容,还可以从单独的文件读取        SqlTemplate sqlTemplate = sqlTemplateEngin.getSqlTemplate(sqlTpl) ;        Bindings bind = new Bindings().bind("email", "wenzuojing@gmail.com");        SqlMeta sqlMeta = sqlTemplate.process(bind) ; //可传map对象或javabean对象        //System.out.println(sqlMeta.getSql());        Assert.assertEquals("select * from user_info  WHERE  email = ?   ", sqlMeta.getSql());      List<Object> parameter = sqlMeta.getParameter(); //取出参数      Assert.assertEquals(1, parameter.size());            bind.bind("username", "wenzuojing") ;      sqlMeta = sqlTemplate.process(bind) ;      Assert.assertEquals("select * from user_info  WHERE  username = ?   and  email = ?   ", sqlMeta.getSql());      List<Object> parameter2 = sqlMeta.getParameter();//取出参数      Assert.assertEquals( 2  ,parameter2.size() );

例2:动态更新 

SqlTemplateEngin sqlTemplateEngin = new SqlTemplateEngin();        Map<String ,Object > userInfo = new HashMap<String,Object>() ;        userInfo.put("id", "123456") ;    userInfo.put("email", "wenzuojing@126.com") ;        String sqlTpl =" update userinfo <set> <if test ='email != null '> email = #{email} </if>, <if test='age'> age = #{age} </if> </set> where id = #{id}" ;        SqlTemplate sqlTemplate = sqlTemplateEngin.getSqlTemplate(sqlTpl) ;        SqlMeta sqlMeta = sqlTemplate.process(userInfo) ;        Assert.assertEquals(" update userinfo  SET email = ?    where id = ? ", sqlMeta.getSql());        List<Object> parameter = sqlMeta.getParameter(); //取出参数    Assert.assertEquals(2, parameter.size());

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1384352686789.html
模板引擎 SqlTemplate