资讯专栏INFORMATION COLUMN

spring 入门 3 整合JDBC和AOP事务

CHENGKANG / 433人阅读

摘要:整合提供了很多模板整合技术持久化技术模板类中提供了一个可以操作数据库的对象对象封装了技术模板对象与中的非常相似准备连接池创建模板对象书写并执行步骤导包基础包类库新增连接池驱动包包事务包准备数据库本地数据库和表书写使用模板实现增删改查

spring整合JDBC

spring提供了很多模板整合Dao技术

ORM持久化技术 模板类
JDBC org.springframework.Jdbc.core.JdbcTemplate
Hibernate3.0 org.springframework.orm.hiberate3.HibernateTemplate
IBatis(MyBatis) org.springframework.orm.sqlMapClientTemplate
JPA org.springframework.orm.jpa.JpaTemplate

spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术.

// JDBCTemplate => JDBC模板对象
// 与DBUtils中的QueryRunner非常相似.
// 0 准备连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///hibernate_32");
dataSource.setUser("root");
dataSource.setPassword("1234");
// 1 创建JDBC模板对象
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
// 2 书写sql,并执行
String sql = "insert into t_user values(null,"rose") ";
jt.update(sql);

步骤
1.导包

基础包4 + 2
spring-test
spring-aop
junit4类库
新增c3p0连接池JDBC驱动包
spring-jdbc包
spring-tx事务包

2.准备数据库

本地数据库和表

3.书写dao

// 使用JDBC模板实现增删改查
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
    @Override
    public void save(User u) {
        String sql = "insert into t_user values(null,?) ";
        super.getJdbcTemplate().update(sql, u.getName());
    }
    @Override
    public void delete(Integer id) {
        String sql = "delete from t_user where id = ? ";
        super.getJdbcTemplate().update(sql,id);
    }
    @Override
    public void update(User u) {
        String sql = "update  t_user set name = ? where id=? ";
        super.getJdbcTemplate().update(sql, u.getName(),u.getId());
    }
    @Override
    public User getById(Integer id) {
        String sql = "select * from t_user where id = ? ";
        return super.getJdbcTemplate().queryForObject(sql,new RowMapper(){
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                return u;
            }}, id);
        
    }
    @Override
    public int getTotalCount() {
        String sql = "select count(*) from t_user  ";
        Integer count = super.getJdbcTemplate().queryForObject(sql, Integer.class);
        return count;
    }

    @Override
    public List getAll() {
        String sql = "select * from t_user  ";
        List list = super.getJdbcTemplate().query(sql, new RowMapper(){
            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                return u;
            }});
        return list;
    }
}

4.spring配置






    
    
    
    





    




    


// 若UserDao类继承了JdbcDaoSupport,则无需将JDBCTemplate注入到容器中,省略第二步,第三步改为
 

    
spring中aop事务

事务
事务特性:acid
事务并发问题:脏读、不可重复读、幻读
事务的隔离级别:1 读未提交、2 读已提交、4 可重复读、8 串行化
spring封装了事务管理代码
事务操作:1、打开事务、2、提交事务、3、回滚事务
事务操作对象
因为在不同平台,操作事务的代码各不相同.spring提供了一个接口
PlatformTransactionManager 接口

DataSourceTransactionManager
HibernateTransitionmanager
注意:在spring中玩事务管理.最为核心的对象就是TransactionManager对象

spring管理事务的属性介绍
事务的隔离级别:1 读未提交、2 读已提交、4 可重复读、8 串行化
是否只读: true只读 false可操作
事务的传播行为:决定业务方法之间调用,事务应该如何处理

* 保证同一个事务中
PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认、推荐99.99%用这种)
PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
* 保证没有在同一个事务中
PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

spring管理事务方式

// 编码式
// 1.将核心事务管理器配置到spring容器


    

// 2.配置TransactionTemplate模板


        

// 3.将事务模板注入Service


    
    
    

xml配置(aop)

  // 1.导包
  // aop、aspect、aopliance、aspect.weaver
  // 2.导入新的约束(tx)
  // beans: 最基本、context:读取properties配置、aop:配置aop、tx:配置事务通知
  // 3.配置通知
  

    
        
        
        
        
        
        
        
        
        
        
    

// 4.配置将通知织入目标


    
    
    
    

注解配置(aop)

// 1.导包(如xml配置一样)
// 2.导入约束(同上)
// 3.开启注解管理事务


// 4.使用注解
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public class AccountServiceImpl implements AccountService {

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
public void transfer(final Integer from,final Integer to,final Double money) {

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76564.html

相关文章

  • Spring笔记04_AOP注解开发_模板_事务

    摘要:后置增强周杰伦环绕通知在切面类中添加以下方法环绕通知环绕前增强环绕前增强测试前置增强保存订单。。。不使用事务管理。 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 创建项目,导入jar包 需要导入Spring基础包4+2 需要导入AOP联盟包、AspectJ包、Spring整合Aspect包Spring-aop包 Spring整合单...

    youkede 评论0 收藏0
  • Spring学习笔记

    摘要:介绍并不局限于某一层是对象的容器帮我们管理项目中的所有对象搭建导包直接新建项目,一般的都有,除了依赖准备类书写配置书写代码测试中的概念反转控制创建对象的方式反转了从我们自己创建对象反转给程序来创建依赖注入将必须的属性注入到对象当中是实现思想 1.spring介绍 spring并不局限于某一层.spring是对象的容器,帮我们管理项目中的所有对象 2.spring搭建 1.导包(idea...

    FleyX 评论0 收藏0
  • Java3y文章目录导航

    摘要:前言由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 前言 由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 由于更新比较频繁,因此隔一段时间才会更新目录导航哦~想要获取最新原创的技术文章欢迎关注我的公众号:Java3y Java3y文章目录导航 Java基础 泛型就这么简单 注解就这么简单 Druid数据库连接池...

    KevinYan 评论0 收藏0
  • ssh(Spring+Struts2+hibernate)整合

    摘要:需求整合框架做一个保存用户的业务,业务比较简单,重在框架整合。 需求:整合ssh框架做一个保存用户的业务,业务比较简单,重在ssh框架整合。创建数据库和表 CREATE DATABASE ssh01; USE DATABASE; 表由Hibernate创建,可以看配置是否成功 一:导入jar包 Hibernate需要jar Hibernate基本jar mysql驱动 ...

    tulayang 评论0 收藏0
  • 慕课网_《Spring入门篇》学习总结

    摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...

    Ververica 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<