JDBC开发步骤

学习了JDBC后对JDBC的开发步骤做一个简单的整理
JDBC详细学习笔记 提取码:k0a8

三层架构项目结构

  • utils 存放工具类(DBUtils)
  • entity 存放实体类
  • dao存放DAO接口(PersonDao)
    • impl存放DAO接口的实现类
  • service存放service接口(PersonService)
    • impl存放service接口的实现类
  • view存放程序启动类(main)
  • 程序设计时,考虑易修改、易扩展,为Service层和DAO层设计接口,便于为了更换实现类
1. 引入相关jar包
  1. 新建名lib文件夹
  2. 复制jar包到该文件夹
  3. 右键lib文件夹选择Add as Libaray
  • mysql连接驱动jar包
  • druid-1.15.jar
  • commons-dbutils-1.7.jar

获取jar包 提取码:kb4d

2. 创建配置文件
  1. 项目上右键 New >> Resource Bundle输入文件名database
  2. 配置文件中输入以下配置信息
#驱动
driver=com.mysql.jdbc.Driver
#连接到本地3306端口(MySQL服务的端口号) compandb表示要连接的数据库
#?useUnicode=true&characterEncoding=utf8表示连接到数据库使用的编码格式是UTF-8
url=jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf8
#连接数据库的用户名
username=root
#连接数据库的密码
password=123456

#连接池配置
#初始化连接
initialSize=10
#最大连接数量
maxActive=30
#最小空闲连接
minIdle=5
#超时等待时间 单位:毫秒
maxWait=3000

3.编写 DBUtils工具类

API设计:

类名 DbUtils
成员变量 private static DruidDataSource ds:数据库连接池
private static final ThreadLocal THREAD_LOCAL:控制事务
静态代码块 创建连接池
成员方法 1. public static Connection getConnection():获取连接
2. public static void begin():开启事务
3. public static void commit():提交事务
4. public static void rollback():回滚事务
5.public static void closeAll():释放资源

具体代码:


import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DbUtils {
    //数据库连接池
    private static DruidDataSource ds;
    //用于控制事务
    private static final ThreadLocal<Connection> THREAD_LOCAL  = new ThreadLocal<>();
    static {
        Properties  PROPERTIES = new Properties();
        //获取指定配置文件的字节输入流
        InputStream inputStream = DbUtils.class.getResourceAsStream("/database.properties");
        try {
            //加载到 PROPERTIES
            PROPERTIES.load(inputStream);
            //创建连接池
            ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(PROPERTIES);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return 返回一个连接对象
     */
    public static Connection getConnection(){
        //先在THREAD_LOCAL拿
        Connection connection = THREAD_LOCAL.get();
        if(connection == null){
            try {
                //THREAD_LOCAL拿没有拿到,从连接池拿
                connection = ds.getConnection();
                //拿到后,存到THREAD_LOCAL
                THREAD_LOCAL.set(connection);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

    /**
     * 开启事务
     */
    public static void begin(){
        Connection connection = null;
        connection = getConnection();
        //设置自动提交为false,开启事务
        try {
            connection.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 事务提交
     */
    public static void commit(){
        Connection connection = null;
        connection = getConnection();
        try {
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            closeAll(connection,null,null);
        }
    }

    /**
     * 回滚事务
     */
    public static void rollback(){
        Connection connection = null;
        connection = getConnection();
        try {
            connection.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            closeAll(connection,null,null);
        }
    }

    //释放资源
    public static void closeAll(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
        try {
            if(resultSet!=null){
                resultSet.close();
            }
            if(preparedStatement!=null){
                preparedStatement.close();
            }
            if(connection!=null){
                connection.close();
                THREAD_LOCAL.remove();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4.创建实体类

实体类完成数据库中表的映射,表名为类名,列名为属性。

5.编写Dao层实现类

Dao使用Apache的DbUtils完成增、删、改、查。
DbUtils使用步骤:

  1. 创建QueryRunner对象
  2. 增、删、改调用:update()
  3. 查询调用:query()
//创建QueryRunner对象
 private QueryRunner queryRunner = new QueryRunner();
//增、删、改  参数1:数据库连接对象 参数2:sql语句  参数3:sql语句的占位填充
 Object[] param = {};
 int result = queryRunner.update(DbUtils.getConnection(),"sql语句",param);
 //查寻到的数据封装成指定对象
 Admin admin = queryRunner.query(DbUtils.getConnection(), "sql语句", new BeanHandler<Admin>(Admin.class), "sql语句占位填充");
 //查寻所有 封装成集合 指定泛型
  List<Admin> adminList = queryRunner.query(DbUtils.getConnection(), "sql语句", new BeanListHandler<Admin>(Admin.class));

6.编写Service层实现类

步骤:

  1. 开启事务
  2. 调用DAO层
  3. 处理数据
  4. 提交或回滚

你可能感兴趣的:(MySQL+JDBC,java,mysql,jdbc,数据库)