用户关系管理系统(一)

用户关系管理系统

1.架构搭建

1.1 DAO层

1.1.1 c3p0连接池

为什么用连接池

考虑到多线程连接的问题,需要使用连接池。连接池提供多个连接,不同请求可以复用空闲的连接,当没有空闲的连接,且连接数没有到达最大限制时,那么连接池就会创建一个新的连接。当访问请求结束后,连接池并没有真正的断开连接,而是将其放入空闲队列中,这样就节省了连接数据库所需要的资源。

怎么使用连接池

c3p0连接池依赖两个jar包:c3p0-0.9.2-pre1和mchange-commons-0.2和一个配置文件:c3p0-config.xml

1.1.2 TreadLocal

ThreadLocal是什么

用一张map来管理线程,每个线程都能赋值。**

1.1.3 DBUtilis

DBUtils是什么

JDBC(见1.1.4)的封装。

1.1.3.1 QueryRunner

QueryRunner是什么

用户提供连接,sql模板和参数,QueryRunner实现对数据库的操作。

1.1.3.2 TxQueryRunner

TxQueryRunner是什么

对QueryRunner的增强,一旦连接不是当前线程(一个线程对应一个事务)中的连接,TxQueryRunner能做到将线程返回连接池。

TxQueryRunner怎么实现

通过装饰者模式来实现。列如:

`public int[] batch(String sql, Object[][] params) throws SQLException {       
	Connection con = JdbcUtils.getConnection();       
	int[] result = super.batch(con, sql, params);      
 	JdbcUtils.releaseConnection(con);       
	 return result;
 }`

1.1.4 JDBC

JDBC是什么

一种和数据库的连接, 用java语言来生成数据库语言来对数据库实现增删改查。

1.1.4.1 JDBC事务

    try { 
     con.setAutoCommit(false); //开启事务
     … …. …con.commit();//最后提交事务} 
    catch() {
      con.rollback();//回滚事务
     }
    

来处理事务,这样一旦事务抛出异常,立刻能回滚,保证了事务的原子性。

1.1.5 JDBCUtils

JDBCUtils是什么

自定义工具类,用连接池实现连接,用于管理事务和连接。

JDBCUtlis怎么实现

开启线程,将连接信息放到TreadLocal中。如果没有连接创建连接, 如果有连接,那么得到当前连接。一旦开启业务给连接设值,提交事务时,只有连接中有值才能提交。并且提供了release方法一旦连接中的值不同,并且该连接没有关闭,那么将其关闭。

1.1.6 handler

handler是什么

handler是一种结果结果集查询器,将数据库查询结果封装到类中

1.1.7 小结

因此我们需要准备:dbutils, 自定义工具类TxQueryRunner,c3p0相关jar包,配置文件,beanutils,connnection等。

先来实现add方法,对我来说已经是大工程。。

public class CustomerDao {
//实例化TxQueryRunner类,返回值是QueryRunner类,将其定义为私有类型
    private QueryRunner qr=new TxQueryRunner();
    //接下来 要实现添加用户的功能
    @Test
    public void add(Customer c){
        //首先需要得到sql模板
        try {
            String sql="insert into t_customer values(?,?,?,?,?,?,?)";
            //先创建Object数组来存储参数
            Object[] params={c.getCid(),c.getCname(),c.getSex(),c.getBirthday(),c.getCellphone(),c.getMail(),c.getDescribe()};
            //然后调用qr的update方法来对数据库进行更改
            qr.update(sql, params);
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }
}在这里插入代码片

猜你喜欢

转载自blog.csdn.net/weixin_43330321/article/details/82953730
今日推荐