步骤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;
}
可以看到,在这个方法中,根据提交到后台数据不同的状态,执行了不同的持久化操作,并返回操作过的数据量。