侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

SqlTemplate ——sql模板引擎

2022-06-27 星期一 / 0 评论 / 0 点赞 / 73 阅读 / 2871 字

遇到过动态拼接sql字符的同学,一定深知其中痛苦,我本人也其中受害者之一。SqlTemplate 是通过模板方法解决动态sql,把模板内容构建成完成的xml,这样可以解析成相关的数据结构, 再结合Og

遇到过动态拼接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", "[email protected]");    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", "[email protected]") ;				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());


广告 广告

评论区