当前位置:编程学习 > 网站相关 >>

高可用JDBC操作类

最近最一个搜索引擎项目的系统集成模块,数据量比较大,达到千万级。在这个应用中,除了繁杂的系统接口定义,复杂的业务逻辑以及一些诸如投票机制之类的复杂算法之外,还需要编写业务量巨大,性能要求显著的数据库操作接口。目前,系统的model层代码换了3次。

第一次:在项目一开始,由我的一个同事搭建项目,并且初始化了一个他写的数据库操作处理类:http://www.cnblogs.com/sunwubin/p/3187603.html我拿到代码,直接用这个工具类做基础,写了业务逻辑代码。在开始的时候,系统运行的还将就。当数据量达到10万级的时候,出现了一些问题:数据库连接太多,查询问题,继承关系问题。

第二次:针对以上问题,我对这个系统打了一些补丁,使用了c3p0连接池,以及订正了继承关系中整个代码瘫痪的问题。打完上述的补丁,系统现在已经可以撑到100万级的数据操作。在前几日的实际网络情况下,代码运行没有出现过大的问题。

第三次:走到上面的这一步似乎没有什么大的问题了,但是,在我重构代码的时候,发现这个代码写的太恶心了,不成模块,没扩展性,唯有考虑线程共享数据问题等等。于是,我这次推翻以前的所有代码,重新做了一个jdbc的基础操作类库。实现的依赖于spring的jdbc工具类。以及使用了c3p0做数据库连接池。为什么要依赖于spring-jdbc呢?

1、  轻量级(使用spring-jdbc仅需要额外实例化2个类)

2、  免去对象实例化的繁琐操作。

写到这里,突然想到一个很好笑的事情,身边有些哥们儿,很排斥用框架,觉得自己写的代码牛逼,觉得自己写的代码安全。其实呢,在我看来,这些个人,纯粹吊丝了,

第一,   要写框架,大多要用大反射,那么首先你觉得你写的反射的工具类有commons-beanutils这个包的代码写的好吗?写不到这么好就别瞎闹。只知道用Class,Method就当自己把反射玩得转了,那叫乳臭未干。java.beans.*;这个包下面的东西没学好,就别在哪里扯自己可以写框架

第二,   做的项目乱new,乱final,没有接口,没有抽象类的,基本上你连对象管理都没打理好,更别说什么高内聚,低耦合了。

第三,   还有就是那些整天吼着天南海北,动不动大数据,动不动高性能的,那简直他妈的就胡扯。代码都写不好,还谈什么优化。孰不知写不好代码,就如小孩还不能完整清晰的认识世界。何谈治国何谈兴家。

 

说了一大堆,还是贴几句自己写的代码吧:下面给一个通用的系统数据操作方案。

一般来说,须具备一下功能:

1、  Crud(增删改查)

2、  分页

3、  自定义异常处理

4、  高复用性

 

首先贴一个使用的代码:

 


 
 1 public interface BookDao extends BaseDao<Book, Integer>{
 2     boolean isExit(String isbn);
 3     Book getBookByISBN(String isbn);
 4 }
 5
 6 @Repository("bookDao")
 7 class BookDaoImpl extends BaseDaoMysqlImpl<Book, Integer> implements BookDao{
 8     BookDaoImpl(){
 9         super(Book.class);
10     }
11
12     @Override
13     public boolean isExit(String isbn) {
14         List<String> keys = new ArrayList<String>();
15         List<Object> values = new ArrayList<Object>();
16         keys.add("ISBN");
17         values.add(isbn);
18         return this.isExit(keys, values);
19     }
20
21     @Override
22     public Book getBookByISBN(String isbn) {
23         Map<String,Object> map = new HashMap<String,Object>();
24         map.put("ISBN", isbn);
25         return this.searchOne(map);
26     }
27 }
View Code
 

然后是一个基础类的接口代码:

 


 
  1 package com.bimoku.persistence.dao;
  2 
  3 import java.io.Serializable;
  4 import java.util.List;
  5 import java.util.Map;
  6
  7 import com.bimoku.persistence.bean.PageBean;
  8
  9
 10 /**
 11  * 基础数据操作接口
 12  * 包含:
 13  * 批量增删改查
 14  * 获取单一类型(int,long)类型的值
 15  * 基本数据查询
 16  * @date 2013-8-20
 17  * @version v0.1.2[last version]
 18  * @author LPM
 19  * @param <T>
 20  * @param <ID>
 21  */
 22 public interface BaseDao<T,ID extends Serializable> {
 23    
 24     //*******************************
 25     //jdbc implements with jdbcsupport
 26     //*******************************
 27    
 28     /**
 29      * 基础接口之一</br>
 30      * 批量添加接口
 31      * @param sql
 32      * @param values
 33      * @return
 34      */
 35     public int[] batchAdd(String sql, List<List<Object>> values);
 36    
 37     /**
 38      * 基础接口之一</br>
 39      * 批量删除记录接口
 40      * @param sql
 41      * @param values
 42      * @return
 43      */
 44     public int del(String sql, List<Object> values);
 45    
 46     /**
 47      * 基础接口之一</br>
 48      * 更新接口
 49      * @param sql
 50      * @param values
 51      * @return
 52      */
 53     public int update(String sql, List<Object> values);
 54    
 55     /**
 56      * 基础接口之一</br>
 57      * 查询一个long值
 58      * @param sql
 59      * @param values
 60      * @return
 61      */
 62     public long getLong(String sql, List<Object> values);
 63    
 64     /**
 65      * 基础接口之一</br>
 66      * 查询一个int值
 67      * @param sql
 68      * @param values
 69      * @return
 70      */
 71     public int getInt(String sql, List<Object> values);
 72    
 73     /**
 74      * 基础接口之一</br>
 75    

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,