SpringDao

SpringDao

模板化的访问方式

  • 在直接使用具体的持久化技术时,我们大多需要处理整个流程。Spring为支持的持久化技术分别提供了模板访问的方式,降低了使用各种持久化技术的难度,可以大幅提高开发效率。
  • 使用模板和回调机制
  • Spring为各种支持的持久化技术都提供了简化操作的模板和回调,在回调中编写具体的数据操作逻辑,使用模板执行数据操作,在Spring中,这是典型的数据操作模式。
  • JDBCTemplate
  • 如果我们直接使用模板类,一般都需要在DAO中定义一个模板对象并提供数据资源,Spring为每一个持久化技术都提供了支持类,支持类中已经为我们完成这样的功能。这样,我们只需要扩展这些支持类就可以直接编写实际的数据访问逻辑,没有丝毫阻隔。
  • JdbcDaoSupport
  • 数据源,不管通过何种持久化技术,都必须拥有数据连接,在Spring中,数据连接是通过数据源获得的,可以直接在Spring容器中配置数据源。

先来介绍JdbcTemplate

spring 提供用于操作JDBC工具类,类似:DBUtils。
依赖 连接池DataSource (数据源)

环境:

com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
dbcp
commons pool
spring-jdbc-3.2.0.RELEASE.jar
spring-tx-3.2.0.RELEASE.jar

操作:

public static void main(String[] args) {
		//1 创建数据源(连接池) dbcp
		BasicDataSource dataSource = new BasicDataSource();
		// * 基本4项
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/hibernate3");
		dataSource.setUsername("root");
		dataSource.setPassword("root");
		//2  创建模板
		JdbcTemplate jdbcTemplate = new JdbcTemplate();
		jdbcTemplate.setDataSource(dataSource);
		//3 通过api操作
		jdbcTemplate.update("insert into user(username,password) values(?,?);", "1601","1601");
	}
<!-- 配置DBCP -->
<!-- 创建数据源 -->
	<bean id="dataSourceId" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/hibernate3"></property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
	</bean>
	<!-- 创建模板 ,需要注入数据源-->
	<bean id="jdbcTemplateId" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSourceId"></property>
	</bean>
	
	<!-- 配置dao -->
	<bean id="userDaoId" class="com.dream.dao.UserDao">
		<property name="jdbcTemplate" ref="jdbcTemplateId"></property>
	</bean>
//编写dao
public class UserDao {
	//jdbc模板将由spring注入
	private JdbcTemplate jdbcTemplate;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	public void update(User user){
		String sql = "update user set username=?,password=? where id =?";
		Object[] args = {user.getUsername(),user.getPassword(),user.getId()};
		jdbcTemplate.update(sql, args);
	}
	public List<User> findAll() {
		return jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<User>(User.class));
	}
}

<!--最后配置C3P0 创建数据源 c3p0-->
	<bean id="dataSourceId" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/hibernate3"></property>
		<property name="user" value="root"></property>
		<property name="password" value="root"></property>
	</bean>

接下来看看JdbcDaoSupport的使用

//编写DAO
public class UserDao extends JdbcDaoSupport{
	public void update(User user){
		String sql = "update user set username=?,password=? where id =?";
		Object[] args = {user.getUsername(),user.getPassword(),user.getId()};
		this.getJdbcTemplate().update(sql, args);
	}
	public List<User> findAll() {
		return this.getJdbcTemplate().query("select * from user", ParameterizedBeanPropertyRowMapper.newInstance(User.class));
	}
}
<!-- 配置更改 -->
<bean id="userDaoId" class="com.itheima.e_jdbcdaosupport.UserDao">
		<property name="dataSource" ref="dataSourceId"></property>
	</bean>
<!-- properties-->
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernate3
jdbc.user=root
jdbc.password=root

<!-- 加载配置文件 
		"classpath:"前缀表示 src下
		在配置文件之后通过  ${key} 获得内容
	-->
	<context:property-placeholder location="classpath:com/dream/properties/jdbcInfo.properties"/>
	
	<!-- 创建数据源 c3p0-->
	<bean id="dataSourceId" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password"  value="${jdbc.password}"></property>
	</bean>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值