server层为了复查dao层中的操作,与事务有关
将增删改查整合到一起
草他个妈耶,真鸡儿难
services 存放业务得逻辑操作,需要用到事务层来操作数据
事务层得配置
service
AreaServiceImpl中的插入操作:事务+异常处理,事务回滚,默认为当抛出RuntimeException的时候,事务会回滚
service层,事物的配置:

AreaServiceImpl.modifyArea()
AreaServiceImpl.addArea()
AreaServiceImpl
TranscationManagementConfiguration
SERVICE层主要是整合复杂的业务逻辑
比较复杂(增删查用事务)
实现一个接口,在实现方法
TransactionManagementConfiguration事务管理配置
事务在service配置
@Transactional事务控制默认只对RuntimeException执行事务回滚,如果要对Exception进行事务回滚,可以如下这样指定:@Transactional(rollbackFor = Exception.class)
package com.forsaken.mina.service.impl;
import com.forsaken.mina.dao.AreaDao;
import com.forsaken.mina.entity.Area;
import com.forsaken.mina.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Service
public class AreaServiceImpl implements AreaService {
@Autowired
private AreaDao areaDao;
@Override
public List<Area> queryArea() {
return areaDao.queryArea();
}
@Override
public Area queryAreaById(int areaId) {
return areaDao.queryAreaById(areaId);
}
/**
* 当抛出RuntimeException时事务Transactional才会回滚
* @param area
* @return
*/
@Transactional
@Override
public boolean addArea(Area area) {
if (area.getAreaName() != null && !"".equals(area.getAreaName())) {
area.setCreateTime(new Date());
area.setLastEditTime(new Date());
try {
int effectedNum = areaDao.insertArea(area);
if (effectedNum > 0) {
return true;
} else {
throw new RuntimeException("插入区域信息失败!");
}
} catch (Exception e) {
throw new RuntimeException("插入区域信息失败:" + e.getMessage());
}
} else {
throw new RuntimeException("区域信息不能为空!");
}
}
@Override
public boolean modifyArea(Area area) {
//空值判断,主要是areaId不为空
if (area.getAreaId() != null && area.getAreaId() > 0) {
//设置默认值
area.setLastEditTime(new Date());
try {
//更新区域信息
int effectedNum = areaDao.updateArea(area);
if (effectedNum > 0) {
return true;
} else {
throw new RuntimeException("更新区域信息失败!");
}
} catch (Exception e) {
throw new RuntimeException("更新区域信息失败:" + e.getMessage());
}
} else {
throw new RuntimeException("区域信息不能为空!");
}
}
@Override
public boolean deleteArea(int areaId) {
if (areaId > 0) {
try {
//删除区域信息
int effectedNum = areaDao.deleteArea(areaId);
if (effectedNum > 0) {
return true;
} else {
throw new RuntimeException("删除区域信息失败!");
}
} catch (Exception e) {
throw new RuntimeException("删除区域信息失败:" + e.getMessage());
}
} else {
throw new RuntimeException("区域ID不能为空!");
}
}
}
service层配置文件
Service层配置