文章目录
前言:
所需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));
}
}
结果: