dbutils和druid包的导入和使用

一. 导入druid.jar包(德鲁伊)

1、导入德鲁伊连接池jar包,并把它放在lib目录下

这里博主提供了一下我用jar包的链接:
链接:https://pan.baidu.com/s/13hMKnv6LMBkmocK936qScw?pwd=1111
提取码:1111
在这里插入图片描述
在这里插入图片描述

2、编写德鲁伊连接池代码

在这里插入图片描述

(1) 在src目录下创建properties类型配置文件,设置数据库连接池信息。
例:

url=jdbc:mysql://localhost:3306/db2
username=root
password=root
driverClassName=com.mysql.jdbc.Driver
initialSize=10
maxActive=20
maxWait=1000

(2)【进行测试】: 在自己项目目录下创建pool包,并在pool包下创建一个PoolDemo1.class文件,文件写:

/**
 * 德鲁伊连接池
 */
public class PoolDemo1 {

    public static void main(String[] args) throws Exception {
        //读取properties内容
        Properties properties = new Properties();
        //properties.load(new FileInputStream("C:\\Users\\lenovo\\Desktop\\0621\\jdbc_database\\src\\db.properties"));
        //通过类加载器读取类路径下内容
        properties.load(PoolDemo1.class.getClassLoader().getResourceAsStream("db.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        //通过返回数据源对象,获取数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }
}

(3). **【书写工具类】:**在pool包下创建一个JdbcUtils.class文件,文件写:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 数据库连接池工具类
 */
public class JdbcUtils {

    //定义成员变量
    private static DataSource dataSource;
    private static ThreadLocal<Connection> threadLocal;

    //静态代码块
    static {
        try {
            //加载连接池配置文件,创建DataSource
            Properties properties = new Properties();
            properties.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
            //初始化threadLocal对象
            threadLocal = new ThreadLocal<>();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取数据库连接池连接
    public static Connection getConnection() {
        //1 ThreadLocal可以把线程和连接绑定在一起
        //从ThreadLocal获取连接
        Connection connection = threadLocal.get();
        //如果获取不到,dataSource取出来,放到ThreadLocal里面
        if(connection == null) {
            try {
                connection = dataSource.getConnection();
                threadLocal.set(connection);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
       //如果获取到,直接返回
        return  connection;
    }

    //释放资源
    public static void closeResource() {
        Connection connection = threadLocal.get();
        if(connection != null) {
            try {
                //close()
                connection.close();
                threadLocal.remove();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

(4). 【书写测试类】在pool包下创建一个文件TestUtils.java ,文件写:

import com.atguigu.dbutils.Dept;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TestUtils {

    public static void main(String[] args) {
        PreparedStatement preparedStatement = null;
        ResultSet rs = null;
        try {
            //获取数据库连接
            Connection connection = JdbcUtils.getConnection();

            String sql = "select * from dept";
            preparedStatement = connection.prepareStatement(sql);
            rs = preparedStatement.executeQuery();
            List<Dept> list = new ArrayList();
            while(rs.next()) {
                int did = rs.getInt("did");
                String dname = rs.getString("dname");

                Dept dept = new Dept();
                dept.setDid(did);
                dept.setDname(dname);

                list.add(dept);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                preparedStatement.close();
                JdbcUtils.closeResource();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

二. 导入dbutils.jar包

1. 导入dbutils.jar包并把它放在lib目录下

这里博主同样提供了一下我用jar包的链接:
链接:https://pan.baidu.com/s/1u_USlgpOH3Td8oa-DMb3-Q?pwd=1111
提取码:1111
在这里插入图片描述
在这里插入图片描述

2.进行配置

  1. 在自己项目目录下创建dbutils包,并在dbutils包下创建一个DBUtilsDemo1.java文件,文件写:
    (使用dbutils进行添加,修改,删除操作)
import com.atguigu.pool.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

import java.sql.SQLException;

public class DBUtilsDemo1 {

    //删除操作
    @Test
    public void test03() throws Exception {
        //创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner();
        // 编写sql语句
        String sql = "delete from dept where did=?";
        //调用方法执行sql
        queryRunner.update(JdbcUtils.getConnection(),sql,200);
        //释放资源
        JdbcUtils.closeResource();
    }

    //修改操作
    @Test
    public void test02() throws Exception {
        //创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner();
        // 编写sql语句
        String sql = "update dept set dname=? where did=?";
        //调用方法执行sql
        queryRunner.update(JdbcUtils.getConnection(),sql,"研发测试部",200);
        //释放资源
        JdbcUtils.closeResource();
    }

    //添加操作
    @Test
    public void test01() throws Exception {
        //创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner();
        // 编写sql语句
        String sql = "insert into dept values(?,?)";
        //调用方法执行sql
        queryRunner.update(JdbcUtils.getConnection(),sql,200,"测试部");
        //释放资源
        JdbcUtils.closeResource();
    }
}

2…在dbutils包下创建一个Dept.java文件,文件写:


public class Dept {
    private int did;
    private String dname;

    public int getDid() {
        return did;
    }

    public void setDid(int did) {
        this.did = did;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "did=" + did +
                ", dname='" + dname + '\'' +
                '}';
    }
}

3.在dbutils包下创建一个DBUtilsDemo2.java文件,文件写:
(使用dbutils进行查询操作)

import com.atguigu.pool.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import java.util.List;

public class DBUtilsDemo2 {

    //查询操作-返回多条记录
    @Test
    public void test02() throws Exception {
        QueryRunner runner = new QueryRunner();
        String sql = "select * from dept";
        List<Dept> list =
                runner.query(JdbcUtils.getConnection(), sql, new BeanListHandler<Dept>(Dept.class));
        System.out.println(list);
        JdbcUtils.closeResource();
    }

    //查询操作-返回一条记录
    @Test
    public void test01() throws Exception {
        //创建QueryRunner对象
        QueryRunner runner = new QueryRunner();
        //编写sql
        String sql = "select * from dept where did=?";
        //调用方法执行sql语句
        Dept dept =
                runner.query(JdbcUtils.getConnection(),sql,new BeanHandler<Dept>(Dept.class),1);
        System.out.println(dept);
        //释放资源
        JdbcUtils.closeResource();
    }
}

三. Dao层操作数据库最终封装

1.在自己项目目录下创建standard.dao包,并在standard.dao包下创建一个DeptDao的接口(interence)文件,

import java.util.List;

public interface DeptDao {
    //添加
    public void insertDept(Dept dept);

    //修改
    public void updateDept(Dept dept);

    //删除
    public void removeDept(int did);

    //根据id查询
    public Dept findDeptById(int did);

    //查询所有记录
    public List<Dept> findAll();
}

2.在standard.dao包下创建一个impl包,并在impl包下创建一个DeptDaoImpl.java文件

import java.util.List;

public class DeptDaoImpl extends BasicDeptDaoImpl implements DeptDao {
    @Override
    public void insertDept(Dept dept) {

    }

    @Override
    public void updateDept(Dept dept) {

    }

    @Override
    public void removeDept(int did) {

    }

    @Override
    public Dept findDeptById(int did) {
        String sql = "select * from dept where did=?";
        Dept dept = getBean(JdbcUtils.getConnection(), sql, Dept.class, did);
        return dept;
    }

    @Override
    public List<Dept> findAll() {
        String sql = "select * from dept";
        List<Dept> listBean = getListBean(JdbcUtils.getConnection(), sql, Dept.class);
        return listBean;
    }
}

3.在impl包下创建一个BasicDeptDaoImpl.java文件


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class BasicDeptDaoImpl {

    //封装查询返回一条记录
    public <T> T getBean(Connection conn,String sql,Class<T> type,Object...params) {
        QueryRunner runner = new QueryRunner();
        try {
            T t = runner.query(conn, sql, new BeanHandler<T>(type), params);
            return t;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //封装查询返回多条记录
    public <T> List<T> getListBean(Connection conn,String sql,Class<T> type,Object...params) {
        QueryRunner runner = new QueryRunner();
        try {
            List<T> list = runner.query(conn, sql, new BeanListHandler<T>(type), params);
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}

这是jdbc连接mysql进行配置一的博客连接:
jdbc 连接mysql 8.0 以上版本出现的错误解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值