这里主要介绍SpringSide使用Velocity+Spring创建动态SQL,有点类似ibatis
参考文件
1. showcase org.springside.examples.showcase.common.dao.UserJdbcDao类里面的
属性 private String searchUserSql;
2. showcase applicationContext-jdbc.xml
<bean id="userJdbcDao" class="org.springside.examples.showcase.common.dao.UserJdbcDao"> <property name="searchUserSql"> <value><![CDATA[ SELECT id, name, login_name FROM ss_user WHERE 1=1 ## Dynamic Content #if ($loginName) AND login_name=:loginName #end #if ($name) AND name=:name #end ORDER BY id ]]></value> </property> </bean>
利用Spring的注入功能,把searchUserSql 注入进去
3.查看下面的方法(注释有问题,应该是Velocity不是freemarker)
/** * 使用freemarker创建动态SQL. */ public List<User> searchUserByFreemarkerSqlTemplate(Map<String, ?> conditions) { String sql = VelocityUtils.render(searchUserSql, conditions); logger.info(sql); return jdbcTemplate.query(sql, userMapper, conditions); }
VelocityUtils是一个工具类,调用的代码为
VelocityContext velocityContext = new VelocityContext(model); StringWriter result = new StringWriter(); Velocity.evaluate(velocityContext, result, "", template);
通俗点讲,就是将xml里面的searchUserSql 和 变量给Velocity模板,然后去渲染,用的是字符串模板,不是文件模板。这个freemarker也可以做到。
freemarker实现 可参考:
http://balaschen.iteye.com/blog/51591
http://www.zhuoda.org/lunzi/102545.html