api编写封装,减少代码,加快编码速度

使用springboot+mybatis进行接口的开发,在开发的过程中发现crud操作总是重复的写多次,为了减少代码量,加快开发速度,想着办法将重复代码进行一次封装,这样可以极大的减少冗余代码,让代码更美观。

1 封装DAO

新建BaseDao,使用泛型概念,将实体类通过泛型传递使用。(示例代码里面的方法根据需要进行修改)

@Repository
public interface BaseDao<T> {

    int insert(T t);

    int update(T t);

    int delete(int id);

    List<T> list(@Param("index") int index, @Param("size") int size);

    int size();

    int status(@Param("id") int id, @Param("status") int status);

}

2 使用封装Dao

让UserDao继承BaseDao,并将User实体类通过泛型传递给BaseDao,这样BaseDao中泛型即作为User处理。

public interface UserDao extends BaseDao<User> {

}

对应的UserMapper.xml文件中,只要写对应BaseDao中的list()、insert()的sql即可。

 <select id="list" resultType="User">...</select>

 <insert id="insert">...</insert>

 

如果想更进一步将公共的service封装一下也可以。

3 封装sercice

新建BaseService,在BaseService调用BaseDao方法使用。

@Service
public abstract class BaseService<T> {

    @Autowired
    private BaseDao<T> baseDao;

    // 添加
    protected Callback insert(T t) {
        int result = baseDao.insert(t);
        if (result < 1) {
            return Callback.error("操作失败");
        }
        return Callback.success();
    }

    // 修改
    protected Callback update(T t) {
        int result = baseDao.update(t);
        if (result < 1) {
            return Callback.error("操作失败");
        }
        return Callback.success();
    }

    // 启用/禁用
    public Callback status(Integer id, Integer status) {
        if(id == null || id < 1) {
            return Callback.error("id不能为空");
        }
        if(status == null || status < 0) {
            return Callback.error("状态不能为空");
        }
        int result = baseDao.status(id, status);
        if(result < 1) {
            return Callback.error("操作失败");
        }
        return Callback.success();
    }

    // 删除
    public Callback delete(Integer id) {
        if (id == null || id < 1) {
            return Callback.error("参数异常");
        }
        int result = baseDao.delete(id);
        if (result < 1) {
            return Callback.error("操作失败");
        }
        return Callback.success();
    }

    // 列表
    protected BaseVO<T> list(Integer page, Integer pageSize){
        if (page == null || page < 1) {
            page = 1;
        }
        if (pageSize == null || pageSize < 1) {
            pageSize = 10;
        }
        int index = (page - 1) * pageSize;
        int total = baseDao.size();
        PageUtil pageUtil = new PageUtil(pageSize, total, page);
        List<T> list = baseDao.list(index, pageSize);
        BaseVO<T> baseVO = new BaseVO<T>();
        baseVO.setList(list);
        baseVO.setPageUtil(pageUtil);
        return baseVO;
    }
}

4 使用封装Service

让UserService继承BaseService,并将User实体类通过泛型传递给BaseService,这样BaseService中泛型即作为User处理。

@Service
public class UserService extends BaseService<User> {

    // 获取用户列表
    public Callback<BaseVO<User>> getUsers(Integer page, Integer pageSize) {
        return Callback.success(list(page, pageSize));
    }

    // 保存用户
    public Callback saveUser(User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return Callback.error(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if (user.getId() == null || user.getId() < 1) {
            return insert(user);
        } else {
            return update(user);
        }
    }

}

在上面的代码中写了getUsers(),saveUser()方法用于处理业务逻辑,这里仅是为了更好的适配业务需要,像其他的delete()等方法也可以直接通过userService.delete()调用,不用在UserService中编写。

 

通过以上对Dao和Service进行封装,我们只要关注sql语句,以及controller的调用,就可以将功能实现,极大的减少了我们代码编写量。

当然如果你使用mybatisPlus可以更好的减免sql的编写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值