已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 1 页 共 24 页 通用通用 DAO 开发手册开发手册 第 2 页 共 24 页 文档历史文档历史 日期日期作者作者版本版本注释注释 第 3 页 共 24 页 目目 录录 1 概述概述 4 2 DAO 框架框架 4 2 1配置文件 5 2 1 1配置文件说明 5 2 1 2配置文件解析 7 2 2数据访问 10 2 3COMMDAO 11 2 4异常类 13 3 实现实现 14 3 1JAVA 文件 14 3 2配置文件 14 4 使用使用 15 4 1XML的使用 15 4 2前台的使用 17 4 3后台的使用 18 4 4权限控制 22 4 5日志输出 22 4 6FAQ 23 第 4 页 共 24 页 1 概述概述 在每一个具体项目中都有大量对数据库表的操作 例如对某个表的增加 修改 删除等 这样的操作对系统所有的表几乎都有要求 而无论采用那一种 后台处理方式 ENTITY BEANS JDO DAO 都会有很大的重复性劳动 另外一个常用功能是 需要为每张表写很多查询 根据不同的参数 ENTITY BEANS CMP 可能在这两个方面做的很好 但是他是以牺牲系统资源和降低 系统性能为代价换来的 各种方式都个有所长 从各个项目经验中 STALESS SESSION BEANS DAO 是实现后台实体操作的最佳方式 为此设计通用 DAO 将数据库操作封装在 DAO 中 解决上述问题 2 DAO 框架框架 DAO 在 1 00 版本上形成了 dao 的开发框架 且经过不少的项目运行 验证 性能 使用等都反映良好 为了更好的适应厦门地税 在 V1 00 基础上 做了 以下改进 1 将数据库访问的 sql 全部移到 xml 的配置文件上 以方便调整和优化访 问数据库的 sql 2 增加对权限的支持 3 增加对模糊查询的支持 4 结合 log4j 实现灵活控制执行 sql 的打印 5 加入对 PL SQL 访问的支持 6 加入了对多个 xml 文件的支持 7 加入了对 xml 文件解析的校验 8 加入对查询记录数据条数的控制 9 加入一个 dao 的配置文件 dao config properties 10 加入对批量数据处理 分次提交的算法 11 加入 Model 继承一层的功能 12 加入一个不用 session 的数据分页标签 使 DAO 只返回指定页的数据 第 5 页 共 24 页 通用 DAO 主要包括三部分 DAO 配置文件 数据访问 CommDao 2 1 配置文件配置文件 2 1 1配置文件配置文件说明说明 通用 DAO 包含多个配置文件 dao config xml 这个整个 DAO 的核心 需 要在开发系统时逐渐完善该文件 dao config xml 的 DTD 说明 第 6 页 共 24 页 说明如下 1 是XML文件的根节点 下面包含多个节点 每个 节点对应一个数据访问对象 ValueObject Name是数据访问对象 ValueObject 引用名称 2 节点包含 十个节点 该节点定义了具体的访 问数据库实体的相关信息 3 节点定义了数据库表的名称 4 节点定义了数据库表的字段名称 该节点包含name tabField type 三个属性 Name属性字段的引用名称 TabField属性是数据库的字段名 称 Type属性是字段的类型 取值范围及含义如下表 取值含义说明 0数据库字段默认字段为此类型 1保留目前未用 2非数据库字段该字段不参与 insert update操作 5 节点定义该表的查询方法 在dao config xml中可以定义多个查询 方法 类是于ENTITY BEANS的HOME接口中的FIND方法 可以将查询条 第 7 页 共 24 页 件定义在dao config xml中 输入参数用 号表示 在调用查询方法时输入参 数顺序要和定义的参数顺序相同 其中 内的内容为模糊查询部 分 内容为数据权限部分的字段 例如 当该字段传 入值为空时 该条件不起作用 swjg dm 当传入的数据数据分区为 001001 001202 100012 时 组织的sql支持数据权限的sql是 swjg dm like 001001 or swjg dm like 001202 swjg dm like 100012 6 节点定义该表的update方法 在dao config xml中可以定义多个 update方法 可以将update定义在dao config xml中 输入参数用 号表示 在调用更新方法时输入参数顺序要和定义的参数顺序相同 7 节点定义该表的delete方法 在dao config xml中可以定义多个 delete方法 可以将delete定义在dao config xml中 输入参数用 号表示 在 调用更新方法时输入参数顺序要和定义的参数顺序相同 8 节点定义该表的insert方法 在dao config xml中可以定义多个insert 方法 可以将insert定义在dao config xml中 输入参数用 号表示 在调用 insert方法时输入参数顺序要和定义的参数顺序相同 9 节点定义该表的pl sql方法 在dao config xml中可以定义多个 pl sql方法 可以将定义在dao config xml中 输入参数用 号表示 在调用 pl sql方法时输入参数顺序要和定义的参数顺序相同 10 节点定义数据库表中的主键 允许是联合主键 11 节点定义数据库表中字段的唯一性检查 允许定义多个 12 节点定义该表是否要求做同步检查 要求做同步检查的表必须要有 一个做数据同步的字段 并且数据类型为Timestamp或String 缺省是 Timestamp 如果定义了要求表同步操作 当系统提交更新操作之前被其他 人已做过更新 系统将给出提示 目前 在社保的核心系统中还没有把这 部分考虑进去 2 1 2配置文件解析配置文件解析 配置文件解析部分共有五个对象 这些对象是通用 DAO 内部使用对象 建议在业务程序不要直接使用这些对象 第 8 页 共 24 页 下面是各对象的关系 第 9 页 共 24 页 第 10 页 共 24 页 2 2 数据访问数据访问 对象的关系 第 11 页 共 24 页 DBAccessor 对象负责保存数据连接 DBReader 对象和 DBWriter 对象 DBReader 对象负责从数据库中获取数据信息 提供了分页处理 目前 只支持 ORACLE DBWriter 对象负责向数据库写入数据信息 2 3 CommDao CommDao 部分 包括 CommDao BaseDAO ObjectValue 这些对象是通 用 DAO 对外接口 可以直接使用这些类 完成操作 第 12 页 共 24 页 CommDao 对象是通用 DAO 的核心 他提供了丰富的 API 提供数据访 问 该类可以通过不同数据访问对象 ObjectValue 对象的子类 作为 参数 调用 CommDao 的同一方法即可实现对不同表的操作 因为 在 数据访问对象 ObjectValue 对象的子类 中已经包含了数据库表的相 关信息 通过调用 CommDao 对象增加 删除 修改方法实现数据库操 作 BaseDAO 对象实现数据访问的基本方法 第 13 页 共 24 页 ObjectValue 对象是所有应用中数据访问对象的基类 同时他是 ContentModel 对象的子类 2 4 异常类异常类 异常类是 DAO 操作失败时抛出的错误信息 不同的异常标识了不同的含 义 类图如下 FinderException 当查询主键不存在或没有查询结果时 抛出该异常 DoublePrimaryKeyException 当向数据库增加数据时 如果主键重复将 抛出该异常 NotUniqueException 当唯一键重复时 抛出该异常 SynchronizationException 当发生同步错误时 抛出该异常 第 14 页 共 24 页 MethodNotFoundException 当调用的查询方法没有定义在 dao config xml 时 抛出该异常 OverQryRowsException 查询条数超过系统设置的最大值的异常 ConfigException dao 系统配置异常 3 实现实现 3 1 JAVA 文件文件 作业调度服务在 mons dao 包下 下面讲述每个包的含义 db 定义了数据库访问的管理方法 包括读数据和写数据 tablemodel Dao 的模型 定义了访问对象的结构 taglib 一个不依赖 session 的通用分页标签实现 xml GenXml 工具的实现类 util 常用工具类 包括常量类 StringUitl 数据权限接口等 3 2 配置文件配置文件 配置文件包括放在 classpath 下的 dao config properties 文件 其内容如下 配置文件 1 文件放的目录 同时这个也成为 dao 的命名空间 多个文件之间用英 文件逗号 分开 xmlpaths test remark dao config xml dao config xml 2 默认最大的查询条数 qrymaxrows 1000 3 默认批量操作提交的条数 batchcommitrows 1000 4 运行模式 development 开发模式 支持 xml 的动态装载 方便开发 但频繁装载 xml 影响系统效率 product 运行 不支持 xml 的动态装载 runmode development 第 15 页 共 24 页 4 使用使用 4 1 Xml 的使用的使用 1 通过 GenXml 工具生成 xml 2 xml 文件命名规范 建议以以下形式命名数据库定义文件 dao config XXX xml 其中 XXX 表示模块名 sql 定义文件命名如下 dao config XXX ext xml 其中 XXX 表示模块名 3 需要自定义 sql 方法的 再用 ext dao config xml 做模板建立一个 xml 文 件 增加自己的方法 4 需要继承 model 的 加入 extends model1 model2 多个父 model 中间用 隔开 如果继承的父 model 和子 model 名称一样 将把两个 model 合并 如果继承的父 model 和子 model 的名称不一样 仅仅合并 model 的 fields 5 根据需要书写自己的 sql 方法 加入 remark 内容 6 对于查询方法 支持 的写法 表示条件仅在有输入值传入时 起作用 7 支持 数据分区字段 1 数据分区字段 2 的写法 表示数据分区 1 和数据分区 2 是数据分区的分区字段 将根据这两个字段和调用该 时传入的用户对象中的权限分区集合 生成带有数据权限的 sql dao config xml示例 sys param 第 16 页 共 24 页 CDATA select id name value from sys param where and and a sqjg dm b swjg dm 第 17 页 共 24 页 sys param dwxx CDATA select a id a name b value from sys param a dwxx b where and and a sqjg dm b swjg dm 4 2 前台的使用前台的使用 form 中定义 ValueObject 作为属性 例如 ValueObject vo new ValueObject Test dao 第 18 页 共 24 页 下面是 Jsp 中的用法 如果字段为 String double int 写法为 vo string COL1 如果为 yyyy 的日期型数据 写法为 vo dateyyyy COL2 如果为 yyyy MM 的日期型写法为 vo dateyyyyMM COL3 如果为 yyyy MM dd 的日期型写法为 vo dateyyyyMMdd COL4 如果为 yyyy MM dd hh mm ss 的日期型写法为 vo date COL5 4 3 后台的使用后台的使用 详细的类方法 参见 javadoc 以下列出了在开发中会使用的类 操作保存数据对象 ValueObject 方法统一在 ValueObject 中 其中 对 String double int long 的付值直接使用 setString 和 getString 方法 对 date 的访问使用 setDate setDateyyyyMM setDateyyyyMMdd setDate setPatternD ateStr 等方法 访问数据库的方法统一在 Commdao 中 该类在构建时需要将数据库链 接作为参数传入 事务由外部控制 具体方法参见以下说明 访问数据 库类型 是否支 持权限 操作 是否支 持仅在 有输入 参数时 才作为 条件 否则忽 略条件 方法返回 值 方法 查询表否否 RowSetRowSet commSearch String sql List values 查询数据库的记录 通用 DAO 提供访问数据库的一般方法 当 sql 不能在 xml 中定义时 直接在外部写 SQL 语句 更新表 包括增 删 改 intint commUpdate String sql List values 更新数据库的记录 通用 DAO 提供访问数据库的一般方法 当 第 19 页 共 24 页 sql 不能在 xml 中定义时 直接在外部写 SQL 语句 删除表否否 Boolean 是否成功 仅当更新 的条数和 valueObj ectList 的 size 相等时为 true deleteBatchByPk java util ArrayList valu eObjectList 批量删除 valueobject 的 ArrayList 删除表否否 int deleteBatchByPk java util ArrayList valu eObjectList int onceCommitSizes 批量删除 valueobject 的 ArrayList 该删除方法将按照系统配置的一 次提交的条数来提交 删除表否否 intdeleteByMethod java lang String modelNam e java lang String deleteMethodName java util List paramentValue 根据 model 名称和方法名 将 paramentValue 更新到需要 delete 的字段 删除表否否 boolean deleteByPk ValueObject valueObject 根据主键 delete valueobject 中 的字段 valueobject 中的主键必须存在 查询表否否 java ut il Array List find ValueObject valueObject 根据指定值对象查询某个表 该对 象中如果字段有赋值 该字段就做为查询条件 查询表是是 java ut il Array List findByMethod ValueObject valueObject java lang String queryMethodName java util List paramentValue 根据 dao 配置的查询方法查询对象 生成 Valueobject 的 ArrayList 返回的记录 条数不能超过系统定义的参数 查询表是是 java ut il Array List findByMethodAndRows ValueObject valueObj ect java lang String queryMethodName java util List paramentValue int maxRows 根据 dao 配置的查询方法查询对象 生成 Valueobject 的 ArrayList 返回的记录 条数不能超过该方法传的参数 查询表否否 ValueOb findByPk ValueObject valueObject 第 20 页 共 24 页 ject 根据 ValueObject 的主键查出该对 象 返回该主键对应的 ValueObject 通过该方 法可以查 看到解析 xml 的 model 结 果 N AN Astatic T ableMode l getTableModel java lang String modelName 根据 model 名称返回 model 查询表是是 java ut il Array List grantedFindByMethod ValueObject valueObj ect java lang String queryMethodName java util List paramentValue DataGrant dataGrant 根据 dao 配置的查询方法查询对象 生成 Valueobject 的 ArrayList 返回的记录 条数不能超过系统定义的参数 查询表是是 java ut il Array List grantedFindByMethodAndRows ValueObject v alueObject java lang String queryMethodName java util List paramentValue int maxRows DataGrant dataGrant 根据 dao 配置的查询方法查询对象 生成 Valueobject 的 ArrayList 返回的记录 条数不能超过该方法传的参数 插入表否否 boolean insert ValueObject valueObject 根据主键 insert valueobject 中 的字段 valueobject 中的主键必须存在 插入表否否 Boolean 是否成功 仅当更新 的条数和 valueObj ectList 的 size 相等时为 true insertBatch java util ArrayList valueObj ectList 批量插入 valueobject 的 ArrayList 该插入方法将用系统设置的一次 提交的条数来提交 插入表否否 int insertBatch java util ArrayList valueObj ectList int onceCommitSizes 批量插入 valueobject 的 ArrayList 该插入方法将 OnceCommitSizes 设置的一次提交的条数来提交 插入表否否 intinsertByMethod java lang String modelNam 第 21 页 共 24 页 e java lang String insertMethodName java util List paramentValue 根据 model 名称和方法名 将 paramentValue 更新到需要 insert 的字段 存储过程 否否 voidprocedureNoOutByMethod java lang String modelName java lang String procedureMethodName java util List paramentValue 根据 model 名称和方法名 将 paramentValue 传给 sql 存储过程 否否 java ut il Array List procedureOfResultByMethod java lang Stri ng modelName java lang String procedureMethodName java util List paramentValue 根据 model 名称和方法名 将 paramentValue 传给 sql 该方法不 再使用 N AN A voidsetDebugLevel int debugLevel Deprecated 更新表否否 Boolean 是否成功 仅当更新 的条数和 valueObj ectList 的 size 相等时为 true updateBatchByPk java util ArrayList valu eObjectList boolean updateValuesIgnoreNull 批量更新 valueobject 的 ArrayList 如果 updateValuesIgnoreNull 为 true 将忽略对 null 的更新 更新表否否 int updateBatchByPk java util ArrayList valu eObjectList int onceCommitSizes boolean updateIgnoreNull 批量更新 valueobject 的 ArrayList 更新表否否 intupdateByMethod java lang String modelNam e java lang String updateMethodName java util List paramentValue 根据 model 名称和方法名 将 paramentValue 更新到需要 update 的字段 更新表否否 boolean updateByPk ValueObject valueObject boolean updateIgnoreNull 根据主键 update valueobject 中 的字段 valueobject 中的主键必须存在 第 22 页 共 24 页 4 4 权限控制权限控制 系统数据权限的控制是体现在 DAO 中 DAO 控制数据权限的方式通过在 SQL 中支持 数据分区字段 1 数据分区字段 2 的写法 表示 数据分区 1 和 数据分区 2 是数据分区的分区字段 将根据这两个字段和调用该 SQL 时传入的用户对象中的权限分区集合 生成带有数据权限的 SQL 如果该 SQL 不需要控制数据权限就不需要在 SQL 中用以上写法 4 5 日志输出日志输出 通过 log4j 给 CommDao 和调用 dao 的级别设置为 debug 当调用 commdao 时即可看到一个 log4j 输出 commdao 的信息 一个例子为 2004 11 04 11 39 10 DEBUG CommDao java 1390 dao message is call dao location is TestCommDao java 261 testGrantedFindByMethodAndRows 调用 dao 的类的和方法的位置 execute model name is TEST DAO 执行的 model 的名称 execute sql is select COL1 COL2 from TEST DAO where COL6 1 执行的 sql 语句 execute time cost is 6s 当执行成功 执行花费的时间 WARN sql need optimize 当执行时间超过 5 秒 显示警告信息 执行 的 sql 需要优化 4 6 FAQ 1 如何书写正确的 xml 用工具生成访问单表的基本的 xml 然后手工书写扩展的 xml 可以通过 以下方法检验 xml 的正确性 看运行时后台的异常堆栈信息 会报告错误的情况
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云课堂:《庖丁解牛》《烛之武退秦师》习题讲评课-学习任务单
- 2025年二手高端别墅个人购买合同
- 2026年蔬菜种植公司种子、农药、肥料专项采购管理制度
- 蹦床场地施工方案
- 人死了应急预案
- 晚间装修施工方案
- 社群咖啡活动策划方案
- 2025-2026学年度江西省上饶市余干县私立蓝天中学高二上学期期中考试历史试题(含答案)
- 考察医德医风试题及答案
- 2025年应急管理试题及答案
- 采购岗位招聘笔试题(某大型国企)2025年必刷题解析附答案
- 2025河南许昌市中心血站招聘工作人员6人笔试考试参考题库及答案解析
- 2025-2026学年浙江省杭州市西湖区公益中学八年级(上)期中数学试卷
- 公共体育服务需求大数据预测模型构建
- 仪器分析 课件 18.4 色谱-质谱联用仪
- 建筑工地钢管搭设验收记录表模板
- 2025中国兵器装备集团自动化研究所有限公司中层管理人员招聘1人笔试历年难易错考点试卷带答案解析试卷2套
- 冲压模具装模流程
- 航天知识考试题库及答案
- 秋冬流感我不怕-小学生防流感主题班会课件
- 全国大学生职业规划大赛《智慧健康养老服务与管理》专业生涯发展展示【高职(专科)】
评论
0/150
提交评论