Spring 框架 DAO 与 事务 的总结

本文总结了Spring框架在DAO层和事务管理方面的应用。首先介绍了Spring为何提供持久层支持,包括JDBC模板类的使用及配置。接着讨论了事务的重要性,通过银行转账案例引入,并回顾了数据库事务的基本概念和隔离级别。详细讲解了Spring中事务API的使用、传播规则,以及XML和注解方式的事务配置。最后提到了使用Java-Config配置事务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:帝国之仓-DAO

1.持久层支持

为什么需要使用Spring对持久层的支持?

	1):原生操作持久层API方式,麻烦.
	
	2):Spring对事务支持非常优秀.
	
传统JDBC:
	
	1:代码臃肿,重复
	
	2:处理异常
	
	3:控制事务
	
Spring JDBC:

	1:简洁,优雅,简单
	
	2:运行异常
	
	3:Spring事务管理
	

Spring为什么对持久层提供技术支持:
Spring为什么对持久层提供技术支持
Spring提供的对应模板类:
Spring提供的对应模板类

2.JDBC

需求:使用JDBC完成CRUD操作.

	依赖jar:
	
	mysql-connector-java-5.x.11.jar:MySQL驱动包
	
	druid连接池
	
	spring-jdbc-版本.RELEASE.jar:支持JDBC
	
	spring-tx-版本.RELEASE.jar:支持事务

dao

public interface EmployeeDAO {
   
	
	void save(Employee emp);
	
	void update(Employee emp);
	
	void delete(Long id);
	
	Employee get(Long id);
	
	List<Employee> listAll();
}

impl

public class EmployeeDAOImpl implements EmployeeDAO{
   

	private JdbcTemplate jdbcTemplate;
	
	public void setDataSource(DataSource dataSource){
   
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	public void save(Employee emp) {
   
		jdbcTemplate.update("INSERT INTO employee (name,age) VALUES (?,?)",emp.getName(),emp.getAge());
	}

	public void update(Employee emp) {
   
		jdbcTemplate.update("UPDATE employee SET name=? ,age=? WHERE id=?",emp.getName(),emp.getAge(),emp.getId());
	}

	public void delete(Long id) {
   
		jdbcTemplate.update("DELETE FROM employee where id = ?",id);
	}

	public Employee get(Long id) {
   
		List<Employee> list = jdbcTemplate.query("SELECT id,name,age eage from employee where id = ?",new Object[]{
   id},
			(rs,rowNum)->{
   //lanmda表达式其实就是匿名内部类的缩写,面向行数的编程
				Employee e = new Employee();
				e.setId(rs.getLong("id"));
				e.setName(rs.getString("name"));
				e.setAge(rs.getInt("eage"));
				return e;	
		});
		return list.size()==1? list.get(0):null;
	}

	public List<Employee> listAll() {
   
		return jdbcTemplate.query("SELECT id,name,age eage from employee",new Object[]{
   },new RowMapper<Employee>(){
   
			//把每一行结果集映射成一个Employee对象
			public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
   
				Employee e = new Employee();
				e.setId(rs.getLong("id"));
				e.setName(rs.getString("name"));
				e.setAge(rs.getInt("eage"));
				return e;
			}});
	}
}

App-context.xml

<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>
      
      <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
      	<property name="driverClassName" value="${jdbc.driverClassName}"></property>
      	<property name="url" value="${jdbc.url}"></property>
      	<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值