JAVAEE框架学习——Spring——整合JDBC aop中的事物

Spring整合JDBC

Spring中提供了一个可以操作数据库的对象,封装了JDBC技术

JDBCTemplate => JDBC模板对象
与DBUtils中的QueryRunner非常相似

 //准备连接池
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://103.249.130.173:3306/hibernate_crm?useUnicode=true&characterEncoding=UTF8");
        dataSource.setUser("appUser");
        dataSource.setPassword("AA1122BB");
        //创建JDBC模板对象
        JdbcTemplate jt = new JdbcTemplate();
        jt.setDataSource(dataSource);
        //书写sql语句并执行
        String sql = "insert into t_user values(null,'rose')";
        jt.update(sql);

Spring整合Dao 数据库

步骤

1 导包

  • 4+2 spring包
  • spring-test、spring-aop、junit4类库
  • c3p0连接池 JDBC驱动
  • spring-jdbc spring-tx事务

2 准备数据库

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第1张图片
数据库

书写Dao

public interface TUserDao {
    //增
    void save(TUser user);
    //删除
    void delete(Integer id);
    //改
    void update(TUser user);
    //查
    TUser getById(Integer id);

    int getTotalCount();

    List getAllTUser();
}

书写实现类impl

public class TUserDaoImpl implements TUserDao {
    private JdbcTemplate jt;

    @Override
    public void save(TUser user) {
        String sql = "insert into t_user values(null,?)";
        jt.update(sql, user.getName());
    }

    @Override
    public void delete(Integer id) {
        String sql = "delete from t_user where id = ?";
        jt.update(sql, id);
    }

    @Override
    public void update(TUser user) {
        String sql = "update t_user set name = ? where id =?";
        jt.update(sql, user.getName(), user.getId());
    }

    @Override
    public TUser getById(Integer id) {
        String sql = "select * from t_user where id = ?";
        TUser tUser = jt.queryForObject(sql, new RowMapper() {
            @Override
            public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
                TUser tUser = new TUser();

                tUser.setId(resultSet.getInt("id"));
                tUser.setName(resultSet.getString("name"));
                return tUser;
            }
        }, id);
        return tUser;
    }

    @Override
    public int getTotalCount() {
        String sql = "select count(*) from t_user";
        Integer count = jt.queryForObject(sql, Integer.class);
        return count;
    }

    @Override
    public List getAllTUser() {
        String sql = "select * from t_user";
        List query = jt.query(sql, new RowMapper() {
            @Override
            public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
                TUser tUser = new TUser();

                tUser.setId(resultSet.getInt("id"));
                tUser.setName(resultSet.getString("name"));
                return tUser;
            }
        });
        return query;
    }

    public JdbcTemplate getJt() {
        return jt;
    }

    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }
}

实现配置


    
    
        
        
        
        
    
    
    
        
    
    
    
        
    

进阶内容

JDBCDaoSupport

JDBCDapSupport根据连接池创建JDBC模板
不需要手动准备JDBC模板,从父类方法中获得即可


JAVAEE框架学习——Spring——整合JDBC aop中的事物_第2张图片
JDBCSupport

继承JDBCDaoSupport后,需要直接注入连接池就可以了

  
    
        
        
    

读取外部的Properties

  • 编写.properties文件

为防止properties key键冲突 需要添加前缀 例如 test.key jdbc.key

jdbc.jdbcUrl=jdbc:mysql://xxxxxxxxxx;characterEncoding=UTF8
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=xxxxx
jdbc.password=xxxxxx
  • 配置指定读取spring db.properties配置


    配置读取指定配置
  • 配置读取配置中的值作为配置中的值


    JAVAEE框架学习——Spring——整合JDBC aop中的事物_第3张图片
    图片.png

Spring中aop事务

Spring封装了事务管理的代码

  • 打开事务
  • 提交事务
  • 回滚事务

事务操作对象

因为在不同平台,操作事务的代码各不相同,所以Spring提供了一个接口

  • PlatformTransactionManager 接口
    • JDBC平台 DataSourceTransactionManager
    • HibernateTransitionManager
      **在Spring中玩事务管理,最为核心的对象就是TransactionManager对象

Spring管理事务的属性介绍

事务的隔离级别

是否只读

事务的传播行为

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第4张图片
事务传播行为

Spring管理事物方式

编码式

将核心事务管理器配置到Spring容器

配置核心事务管理器

配置TransactionTemplate模板

配置TransactionTemplate模板.png

将事务模板注入Service

将事务模板注入Service.png

在Service中调用模板

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第5张图片
Service中调用模板

aop xml配置方式

导包

aop
aspect
aop联盟
weaving织入包

导入新的约束(tx)

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第6张图片
图片.png

beans: 最基本
context:读取properties配置
aop:配置aop
tx:配置事务通知

配置通知

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第7张图片
图片.png

配置将通知织入目标

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第8张图片
通知织入目标

注解配置

导包

aop
aspect
aop联盟
weaving织入包

导入新的约束(tx)

JAVAEE框架学习——Spring——整合JDBC aop中的事物_第9张图片
图片.png

开启注解管理事务

开启注解管理事务

使用注解

图片.png
图片.png

你可能感兴趣的:(JAVAEE框架学习——Spring——整合JDBC aop中的事物)