Spring(5)

1.JdbcTemplate

1.1JdbcTemplate完成对数据表的查询操作

查询:
* 查询一个pojo对象:queryForObject
* 查询一个单值 : queryForObject
* 查询一个pojo对象列表:query方法

	public double getMinSalary() {
		String sql="SELECT MIN(salary) FROM employee";
		Double salary = jdbcTemplate.queryForObject(sql, Double.class);
		return salary;
	}
	
	public List<Employee> getEmployees(){
		String sql="SELECT emp_id eid,emp_name ename,salary FROM employee";
		RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<Employee>(Employee.class);
		List<Employee> list = jdbcTemplate.query(sql, rowMapper);
		return list;
	}
	public Employee  getEmployeeByEid(Integer eid) {
		String sql="SELECT emp_id eid,emp_name ename,salary FROM employee WHERE emp_id= ?";
		RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<Employee>(Employee.class);
		Employee emp = jdbcTemplate.queryForObject(sql, rowMapper, eid);
		return emp;
	}

2.事务

如果在一个功能单元【方法】里面涉及到对数据库的多次增删改操作,而且希望这多次操作要么同时成功,要么同时失败,就要使用事务。

2.1编程式事务

Connection conn = JdbcUtils.getConnection(); //获取数据库连接
try{
    conn.setAutoCommit(false);  //2.开启事务
                                //3.写业务逻辑
    Conn.commit();              //4.提交事务
}catch(Exception ex){
	Conn.rollback();            //5.回滚事务
}finally{
    Conn.close();               //6.释放连接
}

2.2声明式事务

2.2.1基于注解的声明式事务

第一步:导入jar包
在这里插入图片描述第二步:在spring的配置文件中配置数据源事务管理器及开启基于注解的事务支持

	<!-- 配置扫描包 -->
    <context:component-scan base-package="com.offcn"/>
    <!-- 1. 加载properties配置文件信息 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 2.配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="user" value="${jdbc.userName}"/>
       <property name="password" value="${jdbc.password}"/>
       <property name="driverClass" value="${jdbc.driverClass}"/>
       <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
    </bean>
    <!-- 3.配置JdbcTemplate -->
    <bean class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 4.配置数据源事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 5.开启基于注解的事务支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

第三步:在service层的方法上加@Transactional注解

2.2.2声明式事务的五大属性

事务的四大特性:

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

声明式事务的五大属性:

  • Propagation【传播机制】: 表示一个带有事务的方法A运行在另一个带有事务的方法B的内部的时候,内层方法A是使用自己的事务还是使用外层方法B的事务。
    Required【默认值】:如果外层方法有事务,就用外层方法的事务,如果外层方法没有事务,就用内层方法自己的事务。
    Requires_new:无论外层方法有没有事务,内层方法都用自己的事务。
    Supports:如果外层方法有事务,就用外层方法的事务,如果外层方法没有事务,自己也不用事务了。
  • Isolation【隔离级别】:数据表并发访问的时候会用到。
    Read_uncommited:读未提交
    Read_commited:读已提交(oracle数据库默认的隔离级别)
    Repeatable_read:可重复读(mysql数据库默认的隔离级别)
    Serializable:串行化读
    从上到下,并发度依次降低,但是安全性依次增强!
  • rollbackFor【回滚属性】:事务默认遇到运行时异常的时候才会回滚,如果是编译时异常,默认是不会回滚的。
    编译时异常:rollbackFor
    运行时异常:norollbackFor
  • timeout【超时属性】:事务在操作过程中,必定会占用着数据库资源,如果某个事务长时间占用数据库资源,势必影响其它其他事务的执行,所以为了防止某个事务长时间占用着数据库资源,我们给事务设置了超时属性,当这个事务在指定的时间之内如果没有完成对应的操作,我们就回滚事务。
  • readOnly【只读属性】:用来加快查询效率的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值