首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

数据迁移程序引见

2012-07-22 
数据迁移程序介绍???HibernateDaoImpl提供了基本的数据库操作,OldDaoImpl和NewDaoImpl都继承自它。OldDaoIm

数据迁移程序介绍

?


?


?HibernateDaoImpl提供了基本的数据库操作,OldDaoImpl和NewDaoImpl都继承自它。OldDaoImpl是对旧系统的数据操作DAO,通过setBaseDaoSessionFactory方法指定数据源;getEntityClass指定旧系统的对象类;getAll从start开始取count数量条记录。如果start<0则取全部记录,注意,如果实体没有名为id的属性,则需要重写这个方法,这是为性能考虑。


?TransactionSaveService是具有事务的批处理类,它会把分页内的所有对象放在一个事务内处理。

public long transData(BaseServiceImpl service, List oldList, boolean isUpdate) {

????? long processCount = 0; // 已经处理的记录数

?

????? for (int j = 0; j < oldList.size(); j++) {

??????? IdEntity src = (IdEntity) oldList.get(j);

??????? if (service.getOldDao().getEntityClass()!=null) {

?????????? src = (IdEntity) service.getOldDao().get(service.getOldDao().getEntityClass(), src.getId());

??????? }

?

??????? Object target = null;

??????? if (service.isNeedTransform()) {

?????????? target = service.getNewDao().getBySrcEntity(service.getEntityClass(), src);

?????????? // 如果新对象中已有记录且不是更新

?????????? if (target != null && !isUpdate) {

????????????? continue;

?????????? }

?????????? if (target == null) {

????????????? try {

???????????????? target = service.getEntityClass().newInstance();

????????????? } catch (Exception e) {

???????????????? e.printStackTrace();

????????????? }

?????????? }

?????????? if (target != null) {

????????????? service.transform(target, src);

????????????? save(service.getNewDao(), target);

?

????????????? processCount++;

?????????? }

??????? }

??????? service.afterTransform(target, src);

????? }

????? return processCount;

@Override

public void update (int startPage, int endPage, String startDate, String endDate) throws NmoException {

????? Logger.getLogger(this.getClass()).debug("Begin update by time transform!");

????? long beginTime = System.currentTimeMillis();

?

????? long processCount = 0; // 已经处理的记录数

????? for (int i = startPage; i <= endPage; i++) {

??????? List oldList = getOldDao().getAll(i, IDataTransferService.PageSize, startDate, endDate);

??????? if (oldList == null || oldList.isEmpty()) {

?????????? break;

??????? }

?

??????? Logger.getLogger(this.getClass()).debug(

????????????? "Processing ... Number(" + IDataTransferService.PageSize + "): " + i);

?

??????? processCount += getTransactionSaveService().transData(this, oldList, true);

????? }

?

????? long endTime = System.currentTimeMillis();

????? Logger.getLogger(this.getClass()).debug(

?????????? "End transform, total transform: " + processCount + " records, total cost: " + (endTime - beginTime)

???????????????? + "ms");

?? }

?

?

至此,数据迁移框架已经成形,我们只需要为每一个新系统实体编写对应的service类,newDao类和oldDao类。

热点排行