spring--(23)具名參數

在上一篇中,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);
		
	}
}
相關文章
相關標籤/搜索