Spring(三)

1、什么是JdbcTemplate

  • Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库的操作

2、JdbcTemplate增删改查

(1)新增

public void insert(){
    String sql = "insert into book values(?,?,?)";
    Object[] args = {1,2,3};
    int update = jdbcTemplate.update(sql,args); 
}
//批量插入
public void batchInsert(List<Object[]> args){
    String sql = "insert into book values(?,?,?)";
    int[] ints = jdbcTemplate.batchUpdate(sql,args);
}

(2)修改

public void update(){
    String sql = "update book set name=?,status=? where id=?";
    Object[] args = {1,2,3};
    int update = jdbcTemplate.update(sql,args); 
}
//批量修改
public void batchUpdateBook(List<Object[]> batchArgs) {
 String sql = "update t_book set name=?,status=? where id=?";
 int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
}

(3)删除

public void delete(){
    String sql = "delete from book where id = ?";
    int update = jdbcTemplate.update(sql,1);
}
//批量删除
public void batchDeleteBook(List<Object[]> batchArgs) {
 String sql = "delete from book where id=?";
 int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
}

(4)查询

//查询数量
public void selectCount(){
    String sql = "select count(*) from book";
    Integer count = jdbcTemplate.qqueryForObject(sql,Integer.class);
}
//查询单条记录
public void selectById(){
    String sql = "select * from book where id = ?";
    Book book = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
}
//返回list集合
public void findAll(){
    String sql = "select * from book";
    List<Book> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
}

3、什么是事务

  • 事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败则所有操作都失败

4、事务特性

  • 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用
  • 一致性(Consistency):一旦事务完成(不论成功失败),系统必须确保它所建的业务处于一致状态
  • 隔离性(Isolation):多个事务同时处理相同数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏
  • 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响 

5、在Spring进行事务管理操作有两种方式

  •  编程式事务管理
  •  声明式事务管理

6、Spring事务管理底层使用的是AOP原理

7、在Service类上面或者方法上面添加注解@Transactional开始事务

8、propagation:事务传播机制 

  • PROPAGATION_REQUIRED:Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则内层使用外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行
  • PROPAGATION_REQUES_NEW:该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可
  • PROPAGATION_SUPPORT:如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务
  • PROPAGATION_NOT_SUPPORT:该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码
  • PROPAGATION_NEVER: 该传播机制不支持外层事务,即如果外层有事务就抛出异常
  • PROPAGATION_NESTED:该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。                

 9、事务隔离级别

  • 脏读:发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的
  • 不可重复读:发生在一个事务执行相同的查询两次或两次以上,但每次查询结果都不相同时。这通常是由于另一个并发事务在两次查询之间更新了数据
  • 幻读:和不可重复读相似。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入了一些记录时,幻读就发生了。在后来的查询中,第一个事务(T1)就会发现一些原来没有的额外记录。

 

 10、timeout:超时时间

  • 事务需要在一定时间内进行提交,如果不提交则回滚
  • 默认值是-1不超时,时间单位是秒        

11、readOnly:只读

  •  默认值false:表示可以增删改查,设置成true后只能查询

12、rollbackFor和 noRollbackFor

  • 出现相应异常进行回滚和不回滚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值