写写关于持久层,业务层和控制层的自己看法
写写关于持久层,业务层和控制层的自己看法1:持久层持久层也叫DAO层,主要工作是负责给数据库做CRUD操作,并把这些数据库操作提供给业务层做处理。如果比作做饭的话,持久层好比是给做饭提供食材。package com.cy.store.mapper;import com.cy.store.entity.Address;import org.apache.ibatis.annotations.Para
·
1:持久层
持久层也叫DAO层,主要工作是负责给数据库做CRUD操作,并把这些数据库操作提供给业务层做处理。如果比作做饭的话,持久层好比是给做饭提供食材。
package com.cy.store.mapper;
import com.cy.store.entity.Address;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/** 处理收货地址数据的持久层接口 */
public interface AddressMapper {
/**
* 插入收货地址数据
* @param address 收货地址数据
* @return 受影响的行数
*/
Integer insert(Address address);
/**
* 统计某用户的收货地址数据的数量
* @param uid 用户的id
* @return 该用户的收货地址数据的数量
*/
Integer countByUid(Integer uid);
/**
* 查询某用户的收货地址列表数据
* @param uid 收货地址归属的用户id
* @return 该用户的收货地址列表数据
*/
List<Address> findByUid(Integer uid);
/**
* 将某用户的所有收货地址设置为非默认地址
* @param uid 收货地址归属的用户id
* @return 受影响的行数
*/
Integer updateNonDefaultByUid(Integer uid);
/**
* 将指定的收货地址设置为默认地址
* @param aid 收货地址id
* @param modifiedUser 修改执行人
* @param modifiedTime 修改时间
* @return 受影响的行数
*/
Integer updateDefaultByAid(
@Param("aid") Integer aid,
@Param("modifiedUser") String modifiedUser,
@Param("modifiedTime") Date modifiedTime);
/**
* 根据收货地址aid值,查询收货地址详情
* @param aid 收货地址id
* @return 匹配的收货地址详情,如果没有匹配的数据,则返回null
*/
Address findByAid(Integer aid);
/**
* 根据收货地址id删除数据
* @param aid 收货地址id
* @return 受影响的行数
*/
Integer deleteByAid(Integer aid);
/**
* 查询某用户最后修改的收货地址
* @param uid 归属的用户id
* @return 该用户最后修改的收货地址,如果该用户没有收货地址数据则返回null
*/
Address findLastModified(Integer uid);
}
2:业务层
业务层也叫Service层,主要工作是负责组装一下持久层的数据操作,把需要的数据封装在实体类中,并提供最终控制层需要的数据。所以如果比作做饭的话,那么业务层好比拿着持久层提供的食材,然后做成一道客官喜爱的菜式。
@Override
public void delete(Integer aid, Integer uid, String username) {
// 根据参数aid,调用findByAid()查询收货地址数据
Address result = addressMapper.findByAid(aid);
// 判断查询结果是否为null
if (result == null) {
// 是:抛出AddressNotFoundException
throw new AddressNotFoundException("尝试访问的收货地址数据不存在");
}
// 判断查询结果中的uid与参数uid是否不一致(使用equals()判断)
if (!result.getUid().equals(uid)) {
// 是:抛出AccessDeniedException:非法访问
throw new AccessDeniedException("非常访问");
}
// 根据参数aid,调用deleteByAid()执行删除
Integer rows1 = addressMapper.deleteByAid(aid);
if (rows1 != 1) {
throw new DeleteException("删除收货地址数据时出现未知错误,请联系系统管理员");
}
// 判断查询结果中的isDefault是否为0
if (result.getIsDefault() == 0) {
return;
}
// 调用持久层的countByUid()统计目前还有多少收货地址
Integer count = addressMapper.countByUid(uid);
// 判断目前的收货地址的数量是否为0
if (count == 0) {
return;
}
// 调用findLastModified()找出用户最近修改的收货地址数据
Address lastModified = addressMapper.findLastModified(uid);
// 从以上查询结果中找出aid属性值
Integer lastModifiedAid = lastModified.getAid();
// 调用持久层的updateDefaultByAid()方法执行设置默认收货地址,并获取返回的受影响的行数
Integer rows2 = addressMapper.updateDefaultByAid(lastModifiedAid, username, new Date());
// 判断受影响的行数是否不为1
if (rows2 != 1) {
// 是:抛出UpdateException
throw new UpdateException("更新收货地址数据时出现未知错误,请联系系统管理员");
}
}
3:控制层
控制层也叫Controller层,主要工作是负责根据传递cookie参数,session参数或者前端传过来的参数,并把这些参数来传递给业务层封装好的数据操作,并把持久层传递过来的数据进行序列化后传递给前端页面。如果比作做饭的话,那么控制层就好比是把做好的菜式传给服务员,让服务员传到客官的菜桌上来享用。
@RequestMapping("{aid}/delete")
public JsonResult<Void> delete(@PathVariable("aid") Integer aid, HttpSession session) {
Integer uid = getUidFromSession(session);
String username = getUsernameFromSession(session);
addressService.delete(aid, uid, username);
return new JsonResult<Void>(OK);
}
更多推荐
已为社区贡献1条内容
所有评论(0)