在上一篇中,jdbc的傳參形式是 ?,若是參數比較多或者是參數的位置發生改變,則傳參對應的位置也須要改變,十分的不方便。這篇中採用具名參數的形式傳參,有效的解決了上述問題。
###xml配置文件spring
<context:property-placeholder location="classpath:db.properties"/> <bean id="dataSources" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> </bean> <!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSources"></property> </bean> <!-- NamedParameterJdbcTemplate --> <!-- 必須構造器傳參 --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSources"></constructor-arg> </bean>
###方式1:sql
public class JdbcTest { private ApplicationContext ctx= null; private JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; { ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate"); namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate"); } /** * 具名參數傳參方式1 */ @Test public void testNamedParameter(){ String sql = "insert into t_thing(name,content,flag,addTime) values(:name,:content,:flag,:addTime)"; Map<String, Object> map = new HashMap<>(); map.put("name", "喬峯"); map.put("content", "降龍十八掌"); map.put("flag", "1"); map.put("addTime", "20160904175500"); namedParameterJdbcTemplate.update(sql, map); } }
###方式2app
public class JdbcTest { private ApplicationContext ctx= null; private JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; { ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate"); namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate"); } /** * 具名參數傳參方式2 */ @Test public void testNamedParameter2(){ String sql = "insert into t_thing(name,content,flag,addTime) values(:name,:content,:flag,:addTime)"; Thing thing = new Thing(); thing.setName("少林"); thing.setContent("河南"); thing.setFlag(1); thing.setAddTime("20160904180711"); SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(thing); namedParameterJdbcTemplate.update(sql, sqlParameterSource); } }