C3P0+反射注释+dbutils搭建数据访问层

本文介绍如何使用C3P0连接池管理和DAO层实现数据库操作,包括连接获取与释放、事务处理及基本的CRUD操作。

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

注释:

PrimaryKey:


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrimaryKey {}


NoneField:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoneField {}


反射:上篇文章 +单一模式


C3P0连接数据池:

public class C3P0Action 
{
private static ComboPooledDataSource dataSource;
private static Connection con =null;
static
{
//获取c3p0的数据源对象,这个数据源对象提供的是连接对象。
dataSource =new ComboPooledDataSource();

}
//产生一个副本,连接对象的一个副本  作用跟锁相似 
private static ThreadLocal<Connection> local =new ThreadLocal<Connection>();
public static Connection getConnection() throws SQLException//连接Connection
{
con = local.get();
if(con==null)
{
con=dataSource.getConnection();
local.set(con);
}
return con;
}
public static void colseConnection() throws SQLException//关闭连接
{
con=local.get();
if(con!=null)
{
con.close();
local.remove();
}
}
//对当前连接开启事务操作(也就是对数据的增,删,改操作必须通过事务提交才会有效)
public static void startTransaction() throws SQLException
{
    con = local.get();
    if(con == null)
    {
   
con = dataSource.getConnection();
local.set(con);
    }
    con.setAutoCommit(false);//开启事务,
    }
    
    /**
     * 对当前的连接对象的事务提交
    * @throws SQLException
    */
   public static void commitTransaction() throws SQLException
   {
    con = local.get();
    if(con == null)
    {
   
con = dataSource.getConnection();
local.set(con);
    }
    con.commit();//事务提交
    }


}


dao层:以user为例:(dbutils技术)

public UserInfo Insert(UserInfo user) throws SQLException, IllegalArgumentException, IllegalAccessException //插入
{
String sql = fs.FSInsert(user);
Connection con =C3P0Action.getConnection();
UserInfo users = queryRunner.query(con,sql,new BeanHandler<UserInfo>(UserInfo.class));

C3P0Action.colseConnection();
return users;
}



public List<UserInfo> SelectList(UserInfo t) throws IllegalArgumentException, IllegalAccessException, SQLException 
{
String sql =fs.FSSelect(t);
Connection con =C3P0Action.getConnection();
System.out.println(sql);
List<UserInfo> userList =queryRunner.query(con,sql,new BeanListHandler<UserInfo>(UserInfo.class));

return userList;
}


@Override
public int Update(UserInfo t) throws IllegalArgumentException, IllegalAccessException, SQLException
{
  /* String sql = fs.FSUpdate(t);
   Connection con =C3P0Action.getConnection();
   int i =queryRunner.query(con, sql,new BeanHandler<UserInfo>(UserInfo.class));
   return i;*/
return 0;
   
}


@Override
public int Delete(Object o) {
// TODO Auto-generated method stub
return 0;
}


@Override
public UserInfo getModel(Object o) throws IllegalArgumentException, IllegalAccessException, SQLException 
{
UserInfo user =new UserInfo();
user.setUserid((Integer)o);
String sql =fs.FSSelect(user);
Connection con = C3P0Action.getConnection();
UserInfo u = queryRunner.query(con,sql,new BeanHandler<UserInfo>(UserInfo.class));
return u;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值