事务回滚和分页查询
package com.devops.fx.service.impl;
import com.devops.fx.model.ATest;
import com.devops.fx.service.ATestService;
import com.devops.fx.vo.ATestVo;
import com.devops.fx.vo.out.Result;
import com.devops.fx.vo.out.ResultCode;
import com.xy.model.core.Model;
import com.xy.model.core.ModelFactory;
import com.xy.model.emun.ModelOperator;
import com.xy.utils.exception.CommonException;
import com.xy.utils.util.numeric.IntegerUtil;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ATestServiceImpl implements ATestService {
private Model<ATest> testModel = ModelFactory.getModel(ATest.class);
/**
*事务回滚需要:假设更新三张表时,更新完两张表发生错误,则需回滚防止发生数据不一致
* @param id//指定删除的id
*/
@Override
@Transactional(propagation = Propagation.REQUIRED,rollbackForClassName = "Exception")
public void deleteTest(Integer id) throws SQLException {
//添加的值缺少与参数不对应
if (id != null){
testModel.delete(id);
}
//直接抛出异常
throw new SQLException();
}
/**
* @param aTestVo //查询条件
* @param page//获取url传递的获取当前页数
* @return
*/
//减少查询
//不在for循环内IO
@Override
public Result pageTest(ATestVo aTestVo, Integer page,Integer size) throws CommonException{
Result result = new Result();
//size值通过前端传递,如果不传递则设置为默认值10
if (IntegerUtil.isZero(size)){
size = 10;
}
if (IntegerUtil.toInt(page)>0){
Map<String,Object> info = new HashMap<String,Object>();
//计算总数
int num = testModel.where("name",aTestVo.getName(), ModelOperator.LIKE).count();
//总数为0时可优化
if (num == 0){
result.setCode(ResultCode.SUCCESS);
result.setMessage("查无数据");
}else {
info.put("total",num %size==0 ? num:num+1);
//根据页数查询列表
List<ATest> list = testModel.where("name",aTestVo.getName(),ModelOperator.LIKE).limit((page - 1) * size, size).list();
info.put("list",list);
result.setCode(ResultCode.SUCCESS);
result.setMessage("成功");
result.setObject(info);
}
}else {
throw new CommonException("传输的page有问题");
}
return result;
}
}