栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Spring】【JdbcTemplate】【事务处理】【学习笔记】Spring开学很好学1.2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Spring】【JdbcTemplate】【事务处理】【学习笔记】Spring开学很好学1.2

还不上网课,老师们也太敬业了,他们真的好温柔,我真的要哭死了,能在这么好的学校学习,我是多么的荣幸珞

文章目录

JdbcTemplate

1、前置需要2、CRUD

2.1、添加、删除、修改2.2、查询

2.2.1、返回某个值2.2.2、返回对象2.2.3、返回集合 3、批量操作 事务处理

1、注解声明式事务管理2、声明事务管理参数配置

2.1、propagation2.2、ioslation2.3、其他参数 3、XML声明事务管理4、完全注解声明式事务管理

JdbcTemplate

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

1、前置需要

1、导包襤襤襤襤襤

2、在spring配置文件配置数据库连接池


    
    
    
    

3、配置JdbcTemplate对象,注入DateSource


    
    
2、CRUD

使用JdbcTemplate对象

2.1、添加、删除、修改

update()方法

第一个参数 : sql 语句

第二个参数 : 可变参数,设置sql语句值

// 添加
String sql = "insert into t_user value(?,?,?)";
Object args[] = {user.getUserID(),user.getUsername(),user.getUstatus()};
int update = jdbcTemplate.update(sql, args);


// 删除
String sql = "delete from t_user where uid = ?";
Object args[] = {id};
int update = jdbcTemplate.update(sql, args);

// 修改
String sql = "update t_user set username=?,ustatus=? where uid = ?";
Object args[] = {user.getUsername,user.getUstatus};
int update = jdbcTemplate.update(sql, args);

题外话,接口不会被扫描,刚刚试了


2.2、查询 2.2.1、返回某个值

queryForObject(String sql,Class requiredType)方法

第一个参数 : sql语句

第二个参数 : 返会类型Class

String sql = "select count(*) from t_user";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
2.2.2、返回对象

queryForObject(String sql,RowMapper rowMapper,Object… args)方法

第一个参数 : sql 语句

第二个参数 : RowMapper 是接口,针对返回不同类型数据,使用这个接口里实现类完成数据封装

第三个参数 sql 语句值

String sql = "select * from t_user where uid = ?";
User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper(User.class),id);
2.2.3、返回集合

query(String sql,RowMapper rowMapper,Object… args)方法

第一个参数 : sql 语句

第二个参数 : RowMapper 是接口,针对返回不同类型数据,使用这个接口里实现类完成数据封装

第三个参数 sql 语句值

String sql = "select * from t_user";
List userList = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper(User.class));
3、批量操作

batchUpdate(String sql,List batchArgs)

第一个参数 : sql 语句

第二个参数 : List集合,添加多条记录数据

// 批量添加
String sql = "insert into t_user values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);	// List batchArgs

// 批量修改
String sql = "update t_user set username = ?,ustatus = ? where uid = ?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);	// List batchArgs

// 批量删除
String sql = "delete from t_user where uid = ?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);	// List batchArgs

题外话:JdbcTemplate自动注入的时候出现空指针异常,是因为不能通过new实例化,只能通过IOC容器获得bean

事务处理

事务添加到Service层

在Spring 进行声明式事务管理,底层使用AOP原理

Spring 事务管理API

提供了一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类

1、注解声明式事务管理

需要

1、创建事务管理器 2、引入名称空间tx 3、开启事务注解 4、添加事务注解


    

xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

@Service
@Transactional
public class AccountServiceImpl {

@Transactional

这个注解可以用在类上,也可以用在方法上

加到类上,这个类的所有方法都会加上事务加到方法上,这个方法加上事务 2、声明事务管理参数配置 2.1、propagation

事务传播行为

事务解释
REQUIRED如果add()方法本身有事务,调用update()方法之后,update使用当前add方法里面事务。如果add()方法本身没有事务,调用update方法之后,创建事务
REQUIRED_NEW使用add方法调用update方法,如果add无论是否有事务,都创建新的事务
SUPPORTS如果有事务在运行,当前方法就是在这个事务内运行,否则它可以不运行在事务中
NOT_SUPPORTES当前的方法不应该运行在事务中,如果有运行的事务,将它挂起
MANDATORY当前的方法必须在事务内部,如果没有正在运行的事务,就抛异常
NEVER当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常
NESTED如果事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就开启一个新的事务,并在它自己的事务内运行
@Transactional
public void add(){
    update();
}
public void add()
@Transactional(propagation = Propagation.REQUIRED)
2.2、ioslation
隔离级别脏读不可重复读幻读
READ UNCOMMITTED(读未提交)
READ COMMITTED(读已提交)
REPEATABLE READ(可重复读)
SERIALIZABLE(串行化)
@Transactional(isolation = Isolation.REPEATABLE_READ)
2.3、其他参数
参数作用
timeout(超时时间)事务需要在一定时间内进行提交,不交就回滚,默认是-1,设置以秒为单位
readonly(是否只读)readOnly默认是false,表示可以CRUD
rollbackFor(回滚)设置出哪些异常进行事务回滚
noRollbackFor(不回滚)设置出哪些异常不进行事务回滚
3、XML声明事务管理

1、创建事务管理器 2、配置通知 3、配置切入点和切面


    


    
        
    


    
    
    
    

4、完全注解声明式事务管理
@Configuration
@ComponentScan(basePackages = "com.jzlf")
@EnableTransactionManagement    // 开启事务
public class TxConfig {
    // 创建数据库连接池
    @Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///db03");
        dataSource.setUsername("root");
        dataSource.setPassword("xxz");
        return dataSource;
    }
    @Bean
    public JdbcTemplate getJdbcTemplate(DruidDataSource dataSource){
        // 到ioc容器中更具类型找到dataSource
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        // 注入dataSource
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

强校有我,厦工放心‍♂️‍♂️‍♂️

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号