UML软件工程组织

基于JDBC实现的DAO
来源:电脑报
第一节 DAO的特点
  • 易用
  • 支持大字段
  • 支持分页(包括多表“串联”分页)
  • 单表查询所得到的结果是与该表对应的Bean的列表,操作方便
  • 多表联查所得到的结果是与各表对应的Bean的对象数组的列表(对象数组中的Bean的顺序与查询时所指定的表名的顺序一致),操作方便
  • 插入记录时,可直接插入Bean,不需要写SQL——insert(Bean obj)
  • 支持事务处理
  • 支持批处理
  • 提供直接执行SQL的API,增加了灵活性
  • 每秒插入500条记录

详见第三节

第二节 使用DAO的步骤

1、 使用DAOTool生成与数据库表对应的BEAN和一个配置文件(如下图所示)

2,创建DAOFactory(参数表示上一步中由DAOTool生成的属性文件的全限定名)
DAOFactory factory=DAOFactory.getInstance("com.huahai.sdk.framework.user.DBConf");

3,创建DAO(可以使用下面的四种方式)
DAO dao=factory.createDAO(String jndi);
DAO dao=factory.createDAO(String driver,String url ,String user,String pass);
DAO dao=factory.createDAO(String driver,String url);
DAO dao=factory.createDAO(Connection conn);

第三节 简单的示例代码

一,单表查询
List results=dao.query(String tblName,String condition);//不翻页
List results=dao.query(String tblName,String condition,int 每页记录,int 第几页);//翻页
例如:dao.query(“USER”,”USER_ID =’xiaojiong’”);
例如:dao.query(“USER”,”USER_ID =’xiaojiong’”,10,3);
返回结果results中的每一个元素为与数据库表对应的Bean的对象

二,多表查询
List results=dao.query(String[] tblNames,String condition);//不翻页
List results=dao.query(String[] tblNames,String condition,int 每页记录,int 第几页);//翻页
返回结果results中的每一个元素为Object[],对象数组中元素为与数据库表对应的Bean的对象,其顺序与参数tblNames中指定的表名的顺序一致

三,直接写SQL查询,返回ResultSet
ResultSet rs=dao.find(“select * from user”);

四,插入一条记录
User user=new User();
User.setUSER_ID(“XIAO”);
……
dao.insert(user);

五,插入多条记录
List users=new LinkedList();

User user=new User();
User.setUSER_ID(“XIAO”);
……
User user1=new User();
User1.setUSER_ID(“jiong”);
……
users.add(user);
users.add(user1);

dao.insert(users);

六,插入多条记录,并指定每次commit的记录条数
List users=new LinkedList();

User user=new User();
User.setUSER_ID(“XIAO”);
……
User user1=new User();
User1.setUSER_ID(“jiong”);
……
users.add(user);
users.add(user1);

dao.insert(users,2);

七,更新记录
//更新User的USER_NAME,USER_DESC
Map columnsBeUpated=new HashMap();
dolumnsBeUpated.put(“USER_NAME”,”xiaojiong”);
dolumnsBeUpated.put(“USER_DESC”,”超人”);
dao.update(“USER”,columnsBeUpated,”user_id= ‘xiao’”);

八,删除记录
dao.delete(“USER”,”USER_NAME = ‘xiaojiong’”);

九,多表“串联”分页
List results=dao.query(String[] tblNames,String[] conditions,int 每页记录,int 第几页);
当把多个表的记录“串联”在一起进行分页处理时,按照tblNames中申明的表的顺序读取每页记录,其中conditions为与tblNames中表按顺序一一对应的查询条件

十,事务操作
dao.setAutoCommit(false);
//……
dao.commit();//如果成功,则提交
//dao.rollback();//如果失败,则回滚

十一,其它方法
a, dao.getRecordCnt(“user”,”user_name like ‘jordan’”);//得到符合条件的记录数
dao.getRecordCnt(“user”,””);//得到全部记录数
b, dao.executeSQL(String sql);//执行SQL语句
c, dao.executeBatch(List sqlList, int commitCount);//批量执行sql,commitCount
为每次commit的条数
d, dao.getMaxValue(String tblName,String colName,String condition);
得到指定表、指定列的符合条件的记录中的最大值
e, dao.getMinValue(String tblName,String colName,String condition);
得到指定表、指定列的符合条件的记录中的最小值

十二,执行完操作后,一定要调用下面的函数,释放数据库连接:dao.close();

 

 

 

版权所有:UML软件工程组织