C3P0 + apache的dbutils 实现公用的增删改查功能

首先导入C3P0、mysql连接、apache的dbutils 的jar包

jar包获取地址:http://www.mvnrepository.com/进入搜索关键字即可下载相应jar包

文档树构建

c3p0配置文件c3p0-config.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

	<!-- default-config 默认的配置,  -->
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/bank</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </default-config>
  
   <!-- This app is massive! -->
  <named-config name="oracle"> 
    <property name="acquireIncrement">50</property>
    <property name="initialPoolSize">100</property>
    <property name="minPoolSize">50</property>
    <property name="maxPoolSize">1000</property>

    <!-- intergalactoApp adopts a different approach to configuring statement caching -->
    <property name="maxStatements">0</property> 
    <property name="maxStatementsPerConnection">5</property>

    <!-- he's important, but there's only one of him -->
    <user-overrides user="master-of-the-universe"> 
      <property name="acquireIncrement">1</property>
      <property name="initialPoolSize">1</property>
      <property name="minPoolSize">1</property>
      <property name="maxPoolSize">5</property>
      <property name="maxStatementsPerConnection">50</property>
    </user-overrides>
  </named-config>

 
</c3p0-config>
	

数据库连接池获取工具类  MyDataSource

package conn;

import org.apache.commons.dbcp.BasicDataSource;

/**
 * 单例模式
 * 
 * 
 * @author Administrator
 *
 */
public class MyDataSource extends  BasicDataSource{
    
    /**
     * 私有构造器,外部不能访问
     */
    private MyDataSource() {
        this.setDriverClassName("com.mysql.jdbc.Driver");
        setUrl("jdbc:mysql://172.31.88.78:3306/test?characterEncoding=utf8");
        setUsername("user");
        setPassword("user");
    }
    
    /**
     * 单例模式
     */
    private static final MyDataSource ds =new MyDataSource();
    public static MyDataSource newInstance() {
        return ds;
    }
    
    /**
     * 测试
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        System.out.println(MyDataSource.newInstance().getConnection());
    }
}
 

公用增删改查工具接口  IBaseDao

package dbUtil;

import java.io.Serializable;
import java.util.List;

/**
 * 公共的持久层接口
 * 
 * @author Administrator
 *
 */
public interface IBaseDao {
	
	public boolean add(String sql);

	public boolean add(String sql, Object[] params);

	public boolean update(String sql);

	public boolean update(String sql, Object[] params);

	public boolean delete(String sql);

	public boolean delete(String sql, Object[] params);

	public boolean delete(String sql, Serializable id);

	public List<?> query(String sql, Class clzss);

	public List<?> query(String sql, Class clzss, Object[] params);

	public Object find(String sql, Class clzss);

	public Object find(String sql, Class clzss, Object[] params);

	public int count(String sql);

	public int count(String sql, Object[] params);
}

IBaseDao的实现类IBaseDaoImp

package dbUtil.impl;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import javax.sql.DataSource;

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

import conn.MyDataSource;
import dbUtil.IBaseDao;

/**
 * 增删改都可以用update 实现
 * 
 * 查要用query实现
 * 
 * @author 游四海 email 2191962413@qq.com
 * @Time 2018年9月27日  下午4:12:57
 */
public class BaseDaoImpl implements IBaseDao {
	
	//添加不指定参数,即sql语句中不指定insert的字段,要写全所有字段的数据
	public boolean add(String sql) {
		return add(sql, null);
	}

	//添加时指定参数
	@Override
	public boolean add(String sql, Object[] params) {
		return update(sql, params);
	}

	//更新时不指定参数,即sql语句中update的字段值已知
	@Override
	public boolean update(String sql) {
		return update(sql, null);
	}

	//更新时需要有变量参数
	public boolean update(String sql, Object[] params) {
		System.out.println("---sql:" + sql);
		System.out.println("---传递的 参数params:" + Arrays.toString(params));
		// 返回数据源
		DataSource dataSource = MyDataSource.newInstance();
		QueryRunner qr = new QueryRunner(dataSource);
		int num = -1;
		try {
			if (params == null || params.length == 0) { // 非预编译sql持久化
				num = qr.update(sql);
			} else { // 预编译sql持久化
				num = qr.update(sql, params);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return (num > 0 ? true : false);
	}

	//删除表
	@Override
	public boolean delete(String sql) {
		return delete(sql, null);
	}

	//删除符合条件的一行
	@Override
	public boolean delete(String sql, Object[] params) {
		return update(sql, params);
	}

	//删除指定id的行
	@Override
	public boolean delete(String sql, Serializable id) {
		return delete(sql, new Object[] { id });
	}

	//查询所有行
	@Override
	public List<?> query(String sql, Class clzss) {
		return query(sql, clzss, null);
	}

	//查询符合条件的所有行
	@Override
	public List<?> query(String sql, Class clzss, Object[] params) {
		System.out.println("---sql:" + sql);
		System.out.println("--传入的参数params:" + Arrays.toString(params));
		// 返回数据源
		DataSource dataSource = MyDataSource.newInstance();
		
		QueryRunner qr = new QueryRunner(dataSource);
		
		List<?> list = null;
		try {
			if (params == null || params.length == 0) { // 非预编译sql持久化
				list = (List<?>)qr.query(sql, new BeanListHandler(clzss));
			} else { // 预编译sql持久化
				list = (List<?>)qr.query(sql, new BeanListHandler(clzss), params);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return list;
	}

	//查询一行
	@Override
	public Object find(String sql, Class clzss) {
		return find(sql, clzss, null);
	}

	//查询符合条件的一行
	@Override
	public Object find(String sql, Class clzss, Object[] params) {
		List list = query(sql, clzss, params);
		if (list != null && list.size() > 0) {
			return list.get(0);
		}
		return null;
	}

	@Override
	public int count(String sql) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int count(String sql, Object[] params) {
		// TODO Auto-generated method stub
		return 0;
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要引入相关的依赖: ```xml <!-- C3P0 数据库连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> <!-- DBUtils --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> ``` 然后在代码中使用C3P0数据源获取数据库连接,并使用DBUtils执行SQL语句: ```java import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import javax.sql.DataSource; import java.sql.SQLException; public class UserDao { // 数据源 private DataSource dataSource; public UserDao() { // 初始化数据源 dataSource = new ComboPooledDataSource(); } /** * 用户注销 * * @param userId 用户ID * @throws SQLException SQL异常 */ public void logout(int userId) throws SQLException { // 创建QueryRunner对象 QueryRunner queryRunner = new QueryRunner(dataSource); // 执行SQL语句 String sql = "UPDATE user SET token = NULL WHERE id = ?"; queryRunner.update(sql, userId); } } ``` 上述代码中,我们使用`ComboPooledDataSource`类创建C3P0数据源,然后使用`QueryRunner`类执行SQL语句。`logout`方法接收一个`userId`参数,用于更新`user`表中对应的用户记录,将`token`字段设置为`NULL`表示用户已注销。 在具体的业务代码中,我们可以像下面这样调用`UserDao`类的`logout`方法: ```java public class UserService { // UserDao对象 private UserDao userDao; public UserService() { userDao = new UserDao(); } /** * 用户注销 * * @param userId 用户ID * @throws SQLException SQL异常 */ public void logout(int userId) throws SQLException { userDao.logout(userId); } } ``` 上述代码中,我们定义了一个`UserService`类,它包含了一个`UserDao`对象,用于操作用户数据表。`logout`方法接收一个`userId`参数,然后调用`UserDao`对象的`logout`方法进行用户注销操作。 总的来说,使用C3P0DBUtils实现用户注销功能非常简单,只需要引入相关的依赖,然后在代码中使用相应的类即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值