【事务】DBUtils

一代码:

1.pom.xml

<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.6</version>
</dependency>

2.DBUtils

public class TestDBUtils {
    @Test
    public void testdb(){
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        /*
        DBUtils 只是帮我们简化了CRUD的代码,
        连接的创建 和获取,不在他们的考虑范围内。
         */
        QueryRunner queryRunner =new QueryRunner(dataSource);
        try {
            queryRunner.update("insert into day1 value (null,?)","dbutils");
        } catch (SQLException e) {
            e.printStackTrace();
        }

       /*
        //针对增加 删除 修改
        queryRunner.update(sql);

        //针对 查询
        queryRunner.update(sql,rsh);*/
    }
}

在这里插入图片描述

二 new 实现匿名接口类

在这里插入图片描述
1.建立与表结构相同的dao:

package SpringWork.DBUtils;

public class Day1Dao {
    private int id;
    private String name;
    @Override
    public String toString() {
        return "Day1Dao{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2.Test

public class TestDBUtils {
    @Test
    public void testdb(){
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        /*
        DBUtils 只是帮我们简化了CRUD的代码,
        连接的创建 和获取,不在他们的考虑范围内。
         */
        QueryRunner queryRunner =new QueryRunner(dataSource);
        try {
            //增加
           // queryRunner.update("insert into day1 value (null,?)","dbutils");
            Day1Dao dd = queryRunner.query("select * from day1 where id<?", new ResultSetHandler<Day1Dao>() {
                @Override
                public Day1Dao handle(ResultSet resultSet) throws SQLException {
                    Day1Dao ddao  = new Day1Dao();
                    while (resultSet.next()){
                        int id =resultSet.getInt(1);
                        String name = resultSet.getString(2);
                        ddao.setName(name);
                        ddao.setId(id);
                    }
                    return ddao;
                }
            },14);
            System.out.println(dd.toString());
        } catch (SQLException e) {
            e.printStackTrace();
        }

       /*
        //针对增加 删除 修改
        queryRunner.update(sql);

        //针对 查询
        queryRunner.update(sql,rsh);*/
    }
}

二简化 BeanHandler

在这里插入图片描述
@Test
public void testdb(){
ComboPooledDataSource dataSource = new ComboPooledDataSource();
QueryRunner queryRunner =new QueryRunner(dataSource);
try {
Day1Dao dd = queryRunner.query(“select * from day1 where id =?”,new BeanHandler<
Day1Dao>(Day1Dao.class),14);
System.out.println(dd.toString());
} catch (SQLException e) {
e.printStackTrace();
}

    }  

三 查询多条 BeanListHandler

  @Test
    public void selectAll(){
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        QueryRunner queryRunner =new QueryRunner(dataSource);
        try {
            List<Day1Dao> list= queryRunner.query("select * from day1",new BeanListHandler<
                    Day1Dao>(Day1Dao.class));
            for (Day1Dao dd:list
                 ) {
                System.out.println(dd);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadLocal是一个线程内部的数据存储类,它可以在多线程环境下为每个线程保存一个独立的变量副本,从而保证了线程安全。DBUtils是一个Java数据库工具库,提供了简化JDBC编程的API,可以快速地完成对数据库的操作。 在使用DBUtils处理事务时,我们可以结合ThreadLocal来实现线程安全的事务处理。具体的实现步骤如下: 1. 定义一个ThreadLocal变量,用于存储Connection对象。 ``` private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<>(); ``` 2. 在业务逻辑代码中获取Connection对象,并将其保存到ThreadLocal变量中。 ``` public static void beginTransaction() throws SQLException { Connection conn = getConnection(); conn.setAutoCommit(false); connectionHolder.set(conn); } ``` 3. 在需要执行事务的代码中获取ThreadLocal中保存的Connection对象,并使用它执行数据库操作。 ``` public static void update(String sql, Object... params) throws SQLException { QueryRunner runner = new QueryRunner(); Connection conn = connectionHolder.get(); runner.update(conn, sql, params); } ``` 4. 在事务结束时提交或回滚事务,并将Connection对象从ThreadLocal变量中清除。 ``` public static void commitTransaction() throws SQLException { Connection conn = connectionHolder.get(); conn.commit(); conn.close(); connectionHolder.remove(); } public static void rollbackTransaction() throws SQLException { Connection conn = connectionHolder.get(); conn.rollback(); conn.close(); connectionHolder.remove(); } ``` 这样就可以实现在多线程环境下安全地处理事务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值