淘特Jsp Cms二次开发说明
导航: 上一页
CMS框架说明及特色[ ]
- 基于MVC三层架构,业务、控制、显示层层分离,面向对象的编程思想,扩展开发容易。
- 数据库模块统一放置于包tot.dao.jdbc中,所有业务逻辑相关操作,由统一的DAOFactory获取并实例化,便于系统的统一管理。
打个比方:如果原来的广告管理使用的AdDaoJDBC类,如果通过二次开发(扩展AdDaoJDBC类更加快洁)新建一个类AdNewDaoJDBC,那么只要在DAOFactory中更改AdDao实例类为AdNewDaoJDBC,无需修改其它代码,所有系统中的相关广告管理都会自动更新到新开发的类AdNewDaoJDBC上。
- 基于语言包的管理,每个国家的语言包以属性文件的形式存放,更换语言容易。使用记事本等编辑软件打开修改后,即可自动更新。无需编程。UTF-8编码,支持各国语言
- 系统以已提供高性能的连接池,同时提供各WEB容器的连接池接口,只需要设置相关参数就可以进行数据库操作。
- 统一的数据库BEAN工厂(tot.bean.DataField),通过引用(import)系统中的DataField类,即可完成数据库中字段的复值、取值。
- 而不需要再写专门的数据bean,对于任何一个工程来讲,都会大大降低了重复工作量。
说明:DataField对应中数据库中的一行记录,通过它的setField()方法增加字段,然后再通过getFieldValue()方法获取字段值。
- 系统集成Java高效索引、搜索引擎,该模块是先将数据库内容采用一定的分词技术生成索引,前台模糊查询时读取的索引文件,因而速度非常快,同时检索的同时不在查询数据库,从而节省了大量资源。
- 大量采用了Ajax技术,后台无限级分类、WEB采集等模块均加入了Ajax技术异步调用,极大优化了程序代码,真正意义的实现了“无限”级数量级业务。
- Java多线程、Task任务处理、线程监听、CACHE缓存、对象连接池等一系列技术优化保证系统的性能。
AbstractDao类说明[ ]
数据操作类(tot.dao.AbstractDao),作为数据库操作的基础类,本系统中所有的数据库业务对象均扩展此类,通过其提供的一系统方法,只要构造相应的sql查询语句就可以获取相应的记录对象。无需再写专门的处理程序。
函数部分方法[ ]
- public Collection getData(String sqlStr,String fieldArr){}
函数说明:获取数据记录 参数:
- @paramsqlStr 用于查询数据库的标准sql语句
- @paramfieldArr 用于返回字段的名称映射
返回类型 Collection.
- public Collection getDataList_mysqlLimit(String sqlStr,String fieldArr,int rowsNum, int offset){}
函数说明:数据显示分页函数,专用于mysql数据库
参数:
- @param sqlStr 数据库查询SQL语句.
- @param fieldArr 需要返回的字段.
- @param rowsNum 每页显示数据行数.
- @param offset 当前回溯位置.
返回类型 Collection.
- public Collection getDataList_Limit_Normal(String sqlStr,String fieldArr,int rowsNum,int offset){}
函数说明:数据显示分页函数,适用于支持记录回滚的数据库。
参数:
- @param sqlStr 数据库查询SQL语句.
- @param fieldArr 需要返回的字段.
- @param rowsNum 每页显示数据行数.
- @param offset 当前回溯位置.
返回类型 Collection.
- public DataField getFirstData(String sqlStr,String fieldArr){}
函数说明:据SQL语句查询获得第一条记录
参数:
- @param sqlStr SQL查询语句
- @param fieldArr 需要返回的字段名称
返回类型 DataFild
- public int getDataCount(String sqlStr){}
函数说明:获取记录个数,如:getDataCount("select count(*) from 表")
返回类型:int
- public boolean exe(String sqlStr) throws ObjectNotFoundException,DatabaseException{}
函数说明:执行sql更新语句 如:exe("update table set field=1 where id=1")
返回类型:boolean
- public void bat(String sqlStr,String[] fieldvalue){ }
函数说明:批量执行sql更新语句 如:bat("update table set field=1 where id=?",String对象)
备注:
以上函数中均包含sqlStr和fieldArr两个参数,他们分别是要执行的sql语句和要返回的字段名称,注意字段个数要和查询的字段字数相同比如:sqlStr设置如下:"select id,Title,Content from t_article",因为上面sql查询语句返回3个字段,因此fieldArr要设置如下:"id,Title,Content",因为这三个字段是数据库bean中的字段设置、取值所用的字段名称,其名字是随意的,只要字段个数与sqlStr查询语句中返回的字段个数一致就可以了。因此fieldArr也可以设置如:"a1,a2,a3"
因此根据设置的bean字段名称不同,取字段值所采用的字段名称也是不同的。
如:
df.getFieldValue("id"),df.getFieldValue("Title")等是根据fieldArr="id,Title,Content"时的取值。 df.getFieldValue("a1"),df.getFieldValue("a2")等是根据fieldArr="a1,a2,a3"时的取值。
实例操作[ ]
以下例子是一个完整的二次开发数据库类的例子(一个广告操作的数据库类):
package tot.dao.jdbc; import tot.dao.AbstractDao; import tot.db.DBUtils; import tot.bean.*; import tot.exception.ObjectNotFoundException; import tot.exception.DatabaseException; import java.sql.*; import java.util.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * @author tot */ public class AdDaoImplJDBC extends AbstractDao{ private static Log log = LogFactory.getLog(AdDaoImplJDBC.class); /** Creates a new instance of AdDaoImplJDBC */ public AdDaoImplJDBC() { } /** 广告添加 */ public boolean add(String title,String content,Timestamp moditime){ Connection conn = null; PreparedStatement ps = null; boolean returnValue=true; String sql="insert into t_ad(Title,Content,ModiTime) values(?,?,?)"; try{ conn = DBUtils.getConnection(); ps=conn.prepareStatement(sql); ps.setString(1,title); ps.setString(2,content); ps.setTimestamp(3,moditime); if(ps.executeUpdate()!=1) returnValue=false; } catch(SQLException e){ log.error("add error",e); } finally{ DBUtils.closePrepareStatement(ps); DBUtils.closeConnection(conn); } return returnValue; } /* * 广告修改 */ public boolean mod(int id,String title,String content,Timestamp moditime){ Connection conn = null; PreparedStatement ps = null; boolean returnValue=true; String sql="update t_ad set Title=?,Content=?,ModiTime=? where id=?"; try{ conn = DBUtils.getConnection(); ps=conn.prepareStatement(sql); ps.setString(1,title); ps.setString(2,content); ps.setTimestamp(3,moditime); ps.setInt(4,id); if(ps.executeUpdate()!=1) returnValue=false; } catch(SQLException e){ log.error("mod error",e); } finally{ DBUtils.closePrepareStatement(ps); DBUtils.closeConnection(conn); } return returnValue; } /* 广告删除 */ public boolean del(int id) throws ObjectNotFoundException,DatabaseException{ return exe("delete from t_ad where id="+id); } /* * 广告分页调用 * @param currentpage 当前页数 * @param pagesize 每页记录数 */ public Collection getAdList_Limit(int currentpage,int pagesize){ if(DBUtils.getDatabaseType() == DBUtils.DATABASE_MYSQL){ StringBuffer sql=new StringBuffer(512); sql.append("select id,Title,ModiTime from t_ad"); return getDataList_mysqlLimit(sql.toString(),"id,Title,ModiTime",pagesize,(currentpage-1)*pagesize); } else if (DBUtils.getDatabaseType() == DBUtils.DATABASE_SQLSERVER) { StringBuffer sql=new StringBuffer(512); sql.append("SELECT TOP "); sql.append(pagesize); sql.append(" id,Title,ModiTime FROM t_ad WHERE (id <=(SELECT MIN(id) FROM (SELECT TOP "); sql.append((currentpage-1)*pagesize+1); sql.append(" id FROM t_ad"); sql.append(" ORDER BY id DESC) AS t))"); sql.append(" ORDER BY id DESC"); return getData(sql.toString(),"id,Title,ModiTime"); } else{ StringBuffer sql=new StringBuffer(512); sql.append("select id,Title,ModiTime from t_ad"); return getDataList_Limit_Normal(sql.toString(),"id,Title,ModiTime",pagesize,(currentpage-1)*pagesize); } } /** 获取某一条广告记录 ,并以DataField类结果存放,读取时采用DataField.getFieldValue("字段名称")方法*/ public DataField getGuestBook(int id){ return getFirstData("select id,Title,ModiTime from t_ad where id="+id,"id,Title,ModiTime"); } /*记录个数*/ public int getTotalCount(){ StringBuffer sql=new StringBuffer(512); sql.append("select count(*) from t_ad"); return(this.getDataCount(sql.toString())); } } 常见的前台分页调用部分代码: 开始要import系统常用的包 <%@ page import="tot.exception.*"%> <%@ page import="tot.util.*" %> <%@ page import="tot.bean.*" %> <%@ page import="tot.dao.DaoFactory" %> .............. <% int CurrentPage=RequestUtil.getInt(request,"page");//当前页数 int PageSize=20;//每页显示个数 TotalNum=DaoFactory.getAdDAO().getTotalCount(categoryid);//总记录个数 PageNum=(TotalNum-1+PageSize)/PageSize;//计算总页数 ArrayList list=(ArrayList)DaoFactory.getAdDAO().getAdList_Limit(CurrentPage,PageSize);//获取记录 for (Iterator iter = list.iterator(); iter.hasNext(); ) {//遍历记录 DataField df=(DataField)iter.next();//一行记录 String id=df.getFieldValue("id");//读取字段id int AdType=Integer.parseInt(df.getFieldValue("AdType"));//读取字段AdType } %>