步骤1:在com.bstek.dorado.sample.standardlesson.service.CompanyService类中增加保存方法,代码如下:
package com.bstek.dorado.sample.standardlesson.service; import java.util.Collection; import javax.annotation.Resource; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.sample.standardlesson.dao.SlCompanyDao; import com.bstek.dorado.sample.standardlesson.entity.SlCompany; @Component public class CompanyService{ @Resource private SlCompanyDao slcompanyDao; @DataProvider public Collection<SlCompany> getCompany(){ return slcompanyDao.getAll(); } @DataResolver @Transactional public void saveCompany(Collection<SlCompany> slcompanys){ slcompanyDao.persistEntities(slcompanys); } }
其中用了两个标记:@DataResolver是用于声明这个Java方法为一个DataResolver方法,可以被客户端的DataResolver技术所调用,@Transactional是Spring中提供的一个事务性的标记声明。
我们发现在saveCompany方法中执行了其父类hibernateDao的persistEntities方法,我们看看这个方法具体做了什么:
@SuppressWarnings("unchecked") public int persistEntities(Collection<T> entities) { int i = 0; for (Object entity : EntityUtils.getIterable(entities, FilterType.DELETED)) { delete((T) entity); i++; } for (Object entity : EntityUtils.getIterable(entities, FilterType.MODIFIED)) { save((T) entity); i++; } for (Object entity : EntityUtils .getIterable(entities, FilterType.MOVED)) { save((T) entity); i++; } for (Object entity : EntityUtils.getIterable(entities, FilterType.NEW)) { save((T) entity); i++; } return i; }
可以看到,在这个方法中,根据提交到后台数据不同的状态,执行了不同的持久化操作,并返回操作过的数据量。