欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小码农的代码(一)----------SpringJDBC的使用 javaspring 

程序员文章站 2022-07-03 09:50:25
...
今年年初遇到一个对接ERP与WMS的项目,只做后端数据同步,不进行页面展示,简而言之就是我们接收ERP http请求传送过来的数据然后转存到自己的数据库并将数据同步到WMS系统的数据库中,(ps:我也比较奇怪为什么不直接用http请求进行对接,而来中间再转存一次)。由于项目较小又不需要前端展示就直接只用SpringJDBC进行数据库操作,项目涉及的内容包括http请求接口的开发、多数据库操作,本文先拉出来整理下SpringJDBC的直接使用。
SpringJDBC的使用目前来看非常简单,主要就是三个步骤。
一、maven加载所需要的jar包;
一、Spring配置文件进行数据源与jdbctemple的配置;
二、直接在数据访问层使用。
以下是spring配置文件的内容:
<!-- 引入属性文件 -->
	<context:property-placeholder location="classpath:config.properties" />
	<!-- 自动扫描dao和service包( 自动注入) -->
	<context:component-scan base-package="com.zh.demo" />
	<!-- 数据连接池C3P0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClass}" />
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
		<property name="user" value="${jdbc.user}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>

这里的注意点在于spring的数据源配置,不直接使用DriverManagerDataSource的原因是由于其没有实现连接池的机制,因此使用C3P0,这时需要加载c3p0的支持JAR包;
另外在数据访问层进行数据操作时如下
public class BaseDaoImpl implements BaseDao{

	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	/**
	 * sql = "insert into user (name,age) values(?,?)"
	 * */
	public void addBySql(String sql,final Object[] params) {
		//--------------methods01------------------------------------//
		jdbcTemplate.execute(sql);
		//-----------------or methods02------------------------------//
		//just like updateBySql
	}

	/**
	 * sql = “update table_name set name=?,age=?”
	 * */
	public void updateBySql(String sql,final Object[] params) {
		//--------------methods01------------------------------------//
		jdbcTemplate.update(sql,
				new PreparedStatementSetter() {
					public void setValues(PreparedStatement ps)
							throws SQLException {
						ps.setInt(1, Integer.parseInt(params[0].toString()));
					}
				});		
		//-----------------or methods02------------------------------//
		//jdbcTemplate.update(sql, params);
	}

	/**
	 * sql = "delete user where id =? and name = ?;"
	 * */
	public void deleteBySql(String sql,final Object[] params) {
		//----------just like update---------------//
		jdbcTemplate.update(sql, params);
	}

	/**
	 * RowMapper接口封装返回集合,可自定义
	 * */
	public List<UserEntity> getQueryBySql(String sql) {
		return (List<UserEntity>) jdbcTemplate.query(sql,
				new BeanPropertyRowMapper<UserEntity>(UserEntity.class));
	}

	
}
因为Spring配置文件中已经配置,可以直接依赖注入jdbcTemplate;
另外也可以继承JdbcDaoSupport类,来使用jdbcTemplate
,
public class BaseDaoImpl2 extends JdbcDaoSupport implements BaseDao{

	
	public void addBySql(String sql,final Object[] params) {
		this.getJdbcTemplate().update(sql);
	}
}

这两个类进一步论证一个接口可以有多个实现类,谁实例化则调用哪个实现类中的方法
具体的代码例子与测试文件可以下载附件参考,欢迎大家斧正。
另外对于jdbcTemplate的事务控制就是使用Spring对于事务的控制,具体内容会在后续文章中补充说明。
相关标签: java spring