JAVA:JDBC连接MySQL数据库

本文详细介绍了如何使用Druid数据库连接池配置,JDBCUtil工具类进行数据库连接管理,并通过BaseDao抽象类展示了如何在Spring Boot中实现基本的CRUD操作。OrderItemDao接口和OrderItemDaoImpl实现展示了DAO层的典型应用,包括插入订单项的示例和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:
在这里插入图片描述

在这里插入图片描述
所需jar包可以用maven导入

1.JABCUtil 工具类:

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

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

/**
 * @ClassName JDBCUtil
 * @Description TODO
 * @Author 86188
 **/
public class JDBCUtil {

    private static DruidDataSource dataSource;
    private static ThreadLocal<Connection> coons=new ThreadLocal<Connection>();
    static{

        try {
            Properties properties=new Properties();
            //读取配置文件属性
            InputStream inputStream= JdbcUtils.class.getClassLoader ().getResourceAsStream ("Druid.properties");
            //从流中加载数据
            properties.load(inputStream);
            //创建了数据库连接池
            dataSource= (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /** @author dl
     * @Description 获取连接
     * @Param []
     * @return java.sql.Connection
     **/
    public static Connection getConnection(){

        Connection connection=coons.get();
        if(connection==null){
            try {
                connection=dataSource.getConnection();//从数据库连接池获取连接
                coons.set(connection);//保存到ThreadLocal对象中,让后面的Jdbc操作使用
                connection.setAutoCommit(true); //设置为手动管理事务
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return connection;
    }





    public static void close(Connection coon){
        try {
            if(coon!=null)
                coon.close ();
        } catch (SQLException throwables) {
            throwables.printStackTrace ( );
        }
    }
}

Druid.proterties 数据库配置文件:

	
	username=数据库名字
	password=数据库密码
	url=jdbc:mysql://localhost:3306/mydatabase1?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
	driverClass=com.mysql.jdbc.Driver

3.测试连接:

	public class JDBCTest {
    public static void main ( String[] args ) throws Exception {
        Connection connection = JDBCUtil.getConnection ();
        System.out.println (connection);
        JDBCUtil.close (connection);
    }
}

连接成功:

在这里插入图片描述

4. BaseDao类:

本类封装了增删改查方法:

	import com.dl.uitl.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

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

/**
 * @ClassName BaseDao
 * @Description TODO
 * @Author 86188
 * @DAte 2021/4/25
 **/
public abstract class BaseDao {
    //使用DbUtils操作数据库;
    private QueryRunner queryRunner = new QueryRunner ();

    /** @author dl
     * @Description upDate()方法用来执行:Insert,Update,Delete语句
     * @Date 14:48 2021/4/25
     * @Param
     * @return int 如果返回-1说明执行失败,返回其他说明影响的行数
     **/
    public int upDate(String sql,Object...args){
        Connection coon = JdbcUtils.getConnection ();
        try {
            int update = queryRunner.update (coon, sql, args);
            System.out.println ("操作成功");
            return update;
        } catch (SQLException throwables) {
            throwables.printStackTrace ();

        }finally {
            JdbcUtils.close (coon);
        }
        return -1;
    }
    /** @author dl
     * @Description 查询返回一个javaBean的sql语句
     * @Date 14:57 2021/4/25
     * @Param [type, sql, args] type 返回的对象数据类型  sql:执行的sql语句;args:sql语句中的参数值;
     * @return T
     **/
    public <T> T queryForOne(Class<T> type, String sql,Object...args){
        Connection coon = JdbcUtils.getConnection ();
        try {
            return queryRunner.query (coon,sql,new BeanHandler<T> (type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace ();
        }finally {
            JdbcUtils.close (coon);
        }
        return null;
    }

    /** @author dl
     * @Description 返回多个JavaBean 的sql语句
     * @Date 15:02 2021/4/25
     * @Param [type, sql, args]type 返回的对象数据类型  sql:执行的sql语句;args:sql语句中的参数值;
     * @return java.util.List<T>
     **/
    public <T>List<T> queryForList(Class<T>type,String sql,Object...args){
        Connection coon = JdbcUtils.getConnection ();
        try {
            return queryRunner.query (coon,sql,new BeanListHandler<T> (type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace ();
        }finally {
            JdbcUtils.close (coon);
        }
        return null;
    }

    /** @author dl
     * @Description 执行返回一行一列的sql语句
     * @Date 15:08 2021/4/25
     * @Param [sql, args]   sql:执行的sql语句;args:sql语句中的参数值;
     * @return java.lang.Object
     **/
    public Object queryForSingleValue(String sql,Object...args){
        Connection coon = JdbcUtils.getConnection ();

        try {
            return queryRunner.query (coon,sql,new ScalarHandler (),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace ();
        }finally {
            JdbcUtils.close (coon);
        }
        return null;

    }

}

使用时候只需要继承此类,重写方法就可!

5.下面给个dao层的实例:

5.1 OrderDao 接口:

	import com.dl.pojo.orderItem;

public interface OrderItemDao {
    /** @author 86188
    * @Description 生成订单项
    * @Date 21:01 2021/6/7
    * @Param [orderItem]
    * @return int
    **/
    public int saveOrderItem( orderItem orderItem );
}

5.2 OrderDaoImpl 实现类:

	package com.dl.dao.impl;

import com.dl.dao.OrderItemDao;
import com.dl.pojo.orderItem;

/**
 * @ClassName OrderItemDaoImpl
 * @Description TODO
 * @Author 86188
 * @DAte 2021/6/7
 **/
public class OrderItemDaoImpl extends BaseDao implements OrderItemDao {
    @Override
    public int saveOrderItem ( orderItem orderItem ) {
        String sql="insert into t_order_item(id,name,count,price,total_price,order_id) values(?,?,?,?,?,?)";
        return upDate (sql,orderItem.getId (),orderItem.getName (),orderItem.getCount (),orderItem.getPrice (),orderItem.getTotalPrice (),orderItem.getOrderId ());
    }
}

5.3 测试:

	import com.dl.dao.OrderDao;
import com.dl.dao.impl.OrderDaoImpl;
import com.dl.pojo.order;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.util.Date;

public class OrderDaoTest {

    @Test
    public void savaOrderTest(){
        OrderDao orderDao =new OrderDaoImpl ();
        orderDao.saveOrder (new order ("12345678",new Date (),new BigDecimal (100),0,1));
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值