当前位置: 代码迷 >> SQL >> SpringSide_2技术分析_Velocity创造动态SQL
  详细解决方案

SpringSide_2技术分析_Velocity创造动态SQL

热度:11   发布时间:2016-05-05 13:56:59.0
SpringSide_2技术分析_Velocity创建动态SQL

这里主要介绍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