IBATIS版CMS使用指南

更新时间:2023-10-20 08:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

IBATIS版CMS使用指南

1

IBATIS版CMS使用指南

1. 概述

1.1. 功能描述

IBATIS版CMS与原来的GDB版CMS功能上完全相同,数据库表结构一致,使用中没有任何区别,只要更换相应的jar包和修改相应的配置文件。

1.2. 区别

? 数据库层操作全部替换为IBATIS,不再依赖于GDB

? 将原来CMS自带的动态属性管理提取出来形成了单独的动态属性库

css-dynamicattr.jar,并将原来的config_attr_map.xml分开成两个文件cms_category_attr_map.xml和cms_document_attr_map.xml ? 其他配置文件的修改,参见4.1

1.3. 注意事项

在使用IBATIS查询数据库时,如果语句为select * from tablename ,字段中有Date类型,返回改字段值会丢失时分秒信息,只有年月日。

只好修改了IBATIS中com.ibatis.sqlmap.engine.type.ObjectTypeHandler类的源码来处理这个问题,希望以后能找到更好的解决办法。

该源码包含在山西证券项目的src下,并且也上传到了227CVS的cms_ibatis模块下。

2. 库表结构

2.1. CMS_DOC_BODY (文档正文表)

字段名称 DOC_ID CONTENT CONTENT_TYPE CONTENT_SOURCE PARENT_ID 类型 NUMBER(10) BLOB VARCHAR2(30) VARCHAR2(30) NUMBER(10) PK 是 否 否 否 否 NOT NULL 是 否 是 是 是 说明 文档ID 文档内容 文档内容的格式 (默认’text/html’) 内容来源(默认’body’) 父文档ID(默认0) IBATIS版CMS使用指南

2

ENCODING 索引说明 外键说明 其它说明 VARCHAR2(30) DOC_ID 主键 PARENT_ID索引 否 否 文档的编码方式

CONTENT_SOURCE的值根据Document的内容来源项,分为以下几种: body:正文编辑文本(文本格式) body_attachment:正文资源图片 body_file:正文文件(文件格式)

document_attachment:document附件 document_rel_img:文章配图

2.2. CMS_DOC_SINGLE_ATTR (文档单值属性表)

字段名称 DOC_ID TITLE SUBTITLE TITLE_COLOR TITLE_STRIKING UPLOAD_DATE EDITOR SOURCE STATE AUDITOR BASE_BRIEF IS_DELETE DELETOR MODIFY_DATE HIT_COUNT IS_DELAY HAS_HTML HAS_XML HAS_LUCENE HTTP_HREF IMPORTANCE SOURCE_TYPE 类型 NUMBER(10) VARCHAR2(300) VARCHAR2(300) VARCHAR2(7) NUMBER(1) DATE VARCHAR2(45) VARCHAR2(45) NUMBER(1) VARCHAR2(45) VARCHAR2(1000) NUMBER(1) VARCHAR2(45) DATE NUMBER(10) NUMBER(1) NUMBER(1) NUMBER(1) NUMBER(1) VARCHAR2(100) NUMBER(1) VARCHAR2(45) PK 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 NOT NULL 是 是 否 否 否 是 否 否 是 否 否 是 否 否 否 否 否 否 否 否 否 否 说明 文档ID(PK) 标题 副标题 标题颜色 标题加粗 发布时间 录入人 来源 状态(0:未审核;1:已审核;-1:附件) (默认0) 审核人 普通摘要 删除标记(0:正常;1:删除) (默认0) 删除人 最后修改时间 点击数 延时标记(未使用) html标记(未使用) xml标记(未使用) 分词标记(未使用) 替换链接 重要程度(0:普通;1:要闻;2:头条)(默认0) 来源类型(默认’editor’,表示采编) IBATIS版CMS使用指南

3

USER_TYPE DOC_TYPE SMS_BRIEF SOURCE_DATE CAT_ID BEGIN_DATE END_DATE RELATION 索引说明 NUMBER(1) NUMBER(1) VARCHAR2(1000) DATE NUMBER(10) DATE DATE VARCHAR2(500) DOC_ID 主键 AUDITOR索引 DELETOR 索引 EDITOR 索引 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 用户类型 文档类型(参照CMS_DOC_TYPE表的内容,默认0,表示普通资讯) 短信摘要 来源日期 栏目ID(未使用) 激活日期(中信特定使用) 注销日期(中信特定使用) 相关文档id串 IS_DELETE, STATE, IMPORTANCE, DOC_TYPE 索引 UPLOAD_DATE, DOC_ID索引 外键说明 其它说明

字段与config_attr_map.xml中配置的单值属性一一对应,可以根据项目的具体情况对字段进行调整,这里只是中信项目的。但是以下字段必须在所有项目中保留:DOC_ID,TITLE,SUB_TITLE,UPLOAD_DATE,EDITOR,STATE,AUDITOR,BASE_BRIEF,IS_DELETE,MODIFY_DATE,IMPORTANCE,DOC_TYPE,CAT_ID

2.3. CMS_DOC_MULTI_ATTR_AUTHOR (文档作者多值属性表)

字段名称 DOC_ID AUTHOR 索引说明 类型 NUMBER(10) VARCHAR2(50) DOC_ID,AUTHOR主键 DOC_ID 索引 PK 否 否 NOT NULL 是 是 说明 文档ID 作者 AUTHOR索引 外键说明 其它说明

2.4. CMS_DOC_MULTI_ATTR_KEYWORD (文档关键字多值属性

表)

字段名称 DOC_ID KEY_WORD 类型 NUMBER(10) VARCHAR2(50) PK 否 否 NOT NULL 是 是 说明 文档ID 关键字 IBATIS版CMS使用指南

4

索引说明 DOC_ID,KEY_WORD主键 DOC_ID 索引 KEY_WORD索引 外键说明 其它说明

2.5. CMS_DOC_MULTI_ATTR_STOCKID (文档股票代码多值属性

表)

字段名称 DOC_ID STOCK_ID 索引说明 类型 NUMBER(10) VARCHAR2(50) DOC_ID 索引 PK 否 否 NOT NULL 是 是 说明 文档ID 股票代码 DOC_ID,STOCK_ID主键 STOCK_ID索引 外键说明 其它说明

2.6. CMS_DOC_TYPE (文档类型表)

字段名称 TYPE_ID TYPE_NAME TYPE_DESC 索引说明 外键说明 其它说明

类型 NUMBER(10) VARCHAR2(30) VARCHAR2(100) TYPE _ID主键 PK 是 否 否 NOT NULL 是 说明 文档类型id 文档名称 文档类型描述 否 否 2.7. CMS_CATEGORY_BASIC_INFO (分类基本信息表)

字段名称 CAT_ID CAT_NAME DISPLAY_NAME CAT_DESC CAT_PICTURE CAT_SOURCE 类型 NUMBER(10) VARCHAR2(200) VARCHAR2(200) VARCHAR2(1000) NUMBER(10) VARCHAR2(200) PK 是 否 否 否 否 否 NOT NULL 是 是 否 否 否 否 说明 分类ID 分类名 分类显示名 分类描述 分类图片ID 分类来源 IBATIS版CMS使用指南

5

DELETE_FLAG SITE_NAME 索引说明 外键说明 其它说明

NUMBER(1) VARCHAR2(200) CAT_ID主键 CAT_NAME唯一索引 否 否 否 否 删除标记(0:正常;1:删除) 所属站点名 2.8. CMS_CATEGORY_EXT_INFO (分类扩展信息表)

字段名称 NODE_ID AUTO_AUDIT AUTO_RELEASE DELETE_FLAG SHOW_FLAG 索引说明 外键说明 类型 NUMBER(10) NUMBER(1) NUMBER(1) NUMBER(1) NUMBER(1) NODE_ID 主键 alter table CMS_CATEGORY_EXT_INFO add constraint FK_CMS_CATEGORY_EXT_NODEID foreign key (NODE_ID) references CMS_CATEGORY_BASIC_INFO (CAT_ID) on delete cascade; PK NOT NULL 否 是 否 否 否 否 否 否 否 否 说明 分类ID 是否自动审核(0:否;1:是) 是否自动发布(未使用) 删除标记(未使用) 显示标记(未使用) 其它说明

2.9. CMS_CATEGORY_TREE_MAP(分类关系表)

字段名称 NODE_ID PARENT_ID ROOT_ID ORDER_NUM 索引说明 外键说明 类型 NUMBER(10) NUMBER(10) NUMBER(10) NUMBER(3) alter table CMS_CATEGORY_TREE_MAP add constraint FK_CMS_CATEGORY_TREE_NODEID foreign key (NODE_ID) references CMS_CATEGORY_BASIC_INFO (CAT_ID) on delete cascade; PK NOT NULL 否 是 否 否 否 是 是 是 说明 分类ID 父分类ID 根分类ID 排列顺序 其它说明 2.10. CMS_DOC_CATEGORY_MAP (文档分类对应关系表)

字段名称 CAT_ID 类型 NUMBER(10) PK NOT NULL 是 是 说明 分类ID

IBATIS版CMS使用指南

11

sxzqconfig.xml的文件名可以根据application.properties中的ibatis.cms项配置而改变,并不是固定的,文件格式参照Ibatis规范来写。

节点是用户系统使用到的sql xml文件名,如果以后对用户系统进行了扩展,jar包中增加了新的sql xml文件,这里要同步进行添加。

4.1.2.7. IBATIS的数据库配置文件

文件名根据SQL Map XML文件的

表示位于classes/conf/目录下的sxzq.properties文件

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@192.168.0.253:1521:ora10gdb username=sxzq password= sxzq

此文件是Ibatis标准的数据库配置文件

4.1.2.8. IBATIS的Log配置文件

IBATIS使用log4j记录日志,所以classes目录下有下面两个log配置文件

IBATIS版CMS使用指南

12

? commons-logging.properties

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

? log4j.properties ## LOGGERS ##

log4j.rootLogger=ERROR,stdout,file

# SqlMap logging configuration... log4j.logger.com.ibatis=DEBUG

#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG

#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG #log4j.logger.java.sql.Connection=DEBUG #log4j.logger.java.sql.Statement=DEBUG

#log4j.logger.java.sql.PreparedStatement=DEBUG #log4j.logger.java.sql.ResultSet=DEBUG

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%d] %5p [%t] - %m%n log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.Encoding=GBK

# file output

log4j.appender.file.Encoding=GBK

log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=D://MyProject//sxzq//coding//log//log.log log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%d] [%c] [%t] %r %p - %m%n

这里只是一个示范,请根据实际情况自行修改

4.1.2.9. IBATIS使用应用服务器的数据源

以上IBATIS数据库配置没有使用应用服务器的数据源,如果需要使用数据源,请自行查看IBATIS文档进行配置

IBATIS版CMS使用指南

13

4.2. 一般展现

4.2.1. 根据docId获得Document对象

DocumentManager dm=DocumentManager.getDocumentManager(); Document doc = dm.getDocument(docId);

然后根据Document的API得到doc的相应属性和内容

4.2.2. 根据DQL搜索

? DQL类似于原来的表达式,即搜索的条件串,例如:

(attr.name.state=1) and (attr.name.is_delete=0) (attr.name.state in (0,1)) and (category.id=103)

(attr.name.state=1) and (attr.name.importance in (0,1,2) and (category.id in (103,104))

? 利用DQL构造ExtractKey对象

ExtractKey eKey = new ExtractKey (String dql,String[] attrsName,boolean[] modes,String what,String idx,boolean catCriticalCount) ; dql:DQL条件串,即搜索的条件

attrsName:排序的属性名,即按照什么条件排序,可按照多属性排序 modes:true为升序,false为降序,与attrsName中的属性一一对应 what:可以指定为以下两个值

1.DocumentExtractor.RETURN_RESULT_STYLE_BASE:

只加载config_attr_map.xml中level标记为base的属性,不加载分类信息 2.DocumentExtractor. RETURN_RESULT_STYLE_SIMPLE 加载level为base和simple的属性,同时加载分类信息

idx:指定搜索用到的数据库索引 catCriticalCount:搜索栏目所包含的文档数是否大于临界值

? Provider类调用DocumentExtractor.extract(ExtractKey key ,int index ,int count)方法,获得

ListData

index和count参数由Provider类的doFetch(int index ,int count)方法传入,ListData中包 含的是Document对象

? JSP页面配合分页标签调用Provider类,获得文档列表展现,例如

provider=\

? 由于性能问题,新版CMS不再提供搜索结果的总数,所以要使用新的分页标签,使用

count=\属性,不要再显示总页数信息

IBATIS版CMS使用指南

14

4.2.3. 使用已有的Provider类

为方便使用,已经写好了两个通用的Provider类,可以满足大部分项目的需要,这两个已有的Provider类分别是:

4.2.3.1. com.css.cms.document.model.DocumentFrontListProvider

? 用于前台的文档列表搜索 ? 根据栏目、重要程度、文档类型三个条件任意组合进行搜索,自动补充未删除(is_delete=0)

和已审核(state=1)两个条件,按照发布时间(upload_date)降序排列

? DocumentFrontListProvider的调用参数为request,自动接收whichCat(栏目),

importance(重要程度),docType(文档类型)参数,栏目和重要程度均可以是一个或多个,多个用\分隔,栏目可以是栏目ID或栏目名

4.2.3.2. com.css.cms.document.model.DocumentAdminListProvider

? 用于后台的文档列表搜索和高级查询

? 对于一般列表,根据栏目、审核状态、上传者、文档类型搜索,自动补充未删除

(is_delete=0),按照发布时间(upload_date)降序排列

? 对于垃圾箱(用于列出已删除的文档),根据栏目、删除状态搜索,按照发布时间

(upload_date)降序排列

? 对于高级查询,根据request搜索,request中的值参见DocumentAdminListProvider的

API文档

4.2.4. 编写自己的Provider类

如果需要特殊搜索方法,可以在项目中写自己的Provider,但要放到自己的包中,不要放在com.css.cms.document.model中。

首先根据3.2.2中的步骤,根据条件得到DQL,构造ExtractKey对象,在doFetch方法中调用DocumentExtractor.extract(ExtractKey key ,int index ,int count)方法,获得ListData。

4.3. 增删改维护 4.3.1. 添加文档

4.3.1.1. 添加文档的接口

添加文档的接口很简单,构造好一个Document对象doc后,调用以下方法:

DocumentManager dm=DocumentManager.getDocumentManager(); dm.addDocument(doc);

IBATIS版CMS使用指南

15

4.3.1.2. 通过页面添加文档

DocumentManager dm=DocumentManager.getDocumentManager(); 使用DocumentManager 的以下两个方法构造Document对象:: /*无附件*/

Document doc = dm.getDocument(ServletRequest request) ; /*有附件*/

Document doc = dm.getDocument(ServletRequest request, Attachment[] attachs) ; dm.addDocument(doc);

com.css.cms.document.action.AddDocumentAction已经提供了默认实现。

4.3.1.3. 外部资讯导入文档

DocumentManager dm=DocumentManager.getDocumentManager(); 使用DocumentManager 的以下两个方法构造Document对象:: /*无附件*/

Document doc = dm.getDocument(Map attrs, DocBody body, long[] cats) ; /*有附件*/

Document doc = dm.getDocument(Map attrs, DocBody body, Attachment[] attachs , long[] cats) ; dm.addDocument(doc);

4.3.2. 修改文档

类似于添加文档,构造好好一个Document对象doc后,调用以下方法:

DocumentManager dm=DocumentManager.getDocumentManager(); dm.modifyDocument (doc);

区别在于这个doc对象需要设置docId,而添加时因为还没有docId所以不用设置。 com.css.cms.document.action.ModifyDocumentAction已经提供了默认实现。

4.3.3. 删除文档

4.3.3.1. 标记删除

标记删除只修改属性的is_delete字段为1,其他所有关联表不变,可以恢复。

DocumentManager dm=DocumentManager.getDocumentManager(); /*删除一篇文档*/

dm.deleteDocument(long id); /*删除一组文档*/

dm.deleteDocument(long[] id);

com.css.cms.document.action.DeleteDocumentAction已经提供了默认实现。

IBATIS版CMS使用指南

21

(

CAT_ID NUMBER(10) not null, DOC_ID NUMBER(10) not null )

tablespace CITICSDB pctfree 10 initrans 1 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

alter table CITICSDB.CMS_DOC_CATEGORY_MAP

add constraint PK_CMS_DOC_CATMAP primary key (CAT_ID, DOC_ID) using index

tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_CATMAP_CAT on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_CATMAP_DOC on tablespace CITICSIDX pctfree 10 initrans 2

CITICSDB.CMS_DOC_CATEGORY_MAP (CAT_ID)

CITICSDB.CMS_DOC_CATEGORY_MAP (DOC_ID)

IBATIS版CMS使用指南

22

maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited ); prompt

prompt Creating table CMS_DOC_MULTI_ATTR_AUTHOR prompt ======================================== prompt

create table CITICSDB.CMS_DOC_MULTI_ATTR_AUTHOR (

DOC_ID NUMBER(10) not null, AUTHOR VARCHAR2(50) not null )

tablespace CITICSDB pctfree 10 initrans 1 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

alter table CITICSDB.CMS_DOC_MULTI_ATTR_AUTHOR

add constraint PK_CMS_MULTI_ATTR_AUTHOR primary key (DOC_ID, using index

tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_AUTHOR_AUTHOR on tablespace CITICSIDX

AUTHOR)

CITICSDB.CMS_DOC_MULTI_ATTR_AUTHOR (AUTHOR)

IBATIS版CMS使用指南

23

pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_AUTHOR_DOCID on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited ); prompt

prompt Creating table CMS_DOC_MULTI_ATTR_KEYWORD prompt ========================================= prompt

create table CITICSDB.CMS_DOC_MULTI_ATTR_KEYWORD (

DOC_ID NUMBER(10) not null, KEY_WORD VARCHAR2(50) not null )

tablespace CITICSDB pctfree 10 initrans 1 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

alter table CITICSDB.CMS_DOC_MULTI_ATTR_KEYWORD

add constraint PK_CMS_DOC_MULTI_ATTR_KEYWORD primary key (DOC_ID,

CITICSDB.CMS_DOC_MULTI_ATTR_AUTHOR (DOC_ID)

KEY_WORD)

IBATIS版CMS使用指南

24

using index

tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_KEYWORD_DOCID on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_KEYWORD_KEYWORD on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited ); prompt

prompt Creating table CMS_DOC_MULTI_ATTR_STOCKID prompt ========================================= prompt

create table CITICSDB.CMS_DOC_MULTI_ATTR_STOCKID (

DOC_ID NUMBER(10) not null, STOCK_ID VARCHAR2(50) not null

CITICSDB.CMS_DOC_MULTI_ATTR_KEYWORD (DOC_ID)

CITICSDB.CMS_DOC_MULTI_ATTR_KEYWORD (KEY_WORD)

IBATIS版CMS使用指南

25

)

tablespace CITICSDB pctfree 10 initrans 1 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

alter table CITICSDB.CMS_DOC_MULTI_ATTR_STOCKID

add constraint PK_CMS_DOC_MULTI_ATTR_STOCKID primary key (DOC_ID, using index

tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_STOCKID_DOCID on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage (

initial 64K minextents 1

maxextents unlimited );

create index CITICSDB.IDX_CMS_DOC_STOCKID_STOCKID on tablespace CITICSIDX pctfree 10 initrans 2 maxtrans 255 storage

STOCK_ID)

CITICSDB.CMS_DOC_MULTI_ATTR_STOCKID (DOC_ID)

CITICSDB.CMS_DOC_MULTI_ATTR_STOCKID (STOCK_ID)

本文来源:https://www.bwwdw.com/article/dabf.html

Top