使用通用dao和通用service能够减小代码的开发。能够将经常使用的增删改查放到通用dao中。对不一样的or框架,基本上都有本身的实现如SpringJPA的Repository就提供了经常使用的增删改查方法。而MyBatis借助代码生成工具也能够生成经常使用方法的映射java
这里只针对Mybatis。若是使用代码生成工具,会有一个问题:每一个Mapper里面都有一些方法(增晒改查)。维护起来的话还好。只是在写service的时候会有一个问题。好比UserMapper里面有 insert(User user)
, find(Integer id)
,delete(Integer id)
等方法,则在service中也要有这些方法的实现。假设每一个Mapper有5个方法。则service也须要有5个方法的实现。若是有10个实体类。mapper能够省略(由生成工具生成),可是service有50个方法。到后期确定很差进行维护git
该通用Mapper使用了Spring-mybatis。因此没有实现类,而是直接调用xml文件中的同名方法。之因此将通用Mapper抽出来主要是为了方便些通用的servicespring
package cn.liuyiyou.yishop.mapper; import java.io.Serializable; public interface BaseMapper<T,ID extends Serializable> { int deleteByPrimaryKey(ID id); int insert(T record); int insertSelective(T record); T selectByPrimaryKey(ID id); int updateByPrimaryKeySelective(T record); int updateByPrimaryKeyWithBLOBs(T record); int updateByPrimaryKey(T record); }
package cn.liuyiyou.yishop.service; import java.io.Serializable; public interface BaseService<T,ID extends Serializable> { void setBaseMapper(); int deleteByPrimaryKey(ID id); int insert(T record); int insertSelective(T record); T selectByPrimaryKey(ID id); int updateByPrimaryKeySelective(T record); int updateByPrimaryKeyWithBLOBs(T record); int updateByPrimaryKey(T record); }
package cn.liuyiyou.yishop.service.impl; import java.io.Serializable; import cn.liuyiyou.yishop.mapper.BaseMapper; import cn.liuyiyou.yishop.service.BaseService; public abstract class AbstractService<T, ID extends Serializable> implements BaseService<T, ID> { private BaseMapper<T, ID> baseMapper; public void setBaseMapper(BaseMapper<T, ID> baseMapper) { this.baseMapper = baseMapper; } @Override public int deleteByPrimaryKey(ID id) { return baseMapper.deleteByPrimaryKey(id); } @Override public int insertSelective(T record) { return baseMapper.insertSelective(record); } @Override public T selectByPrimaryKey(ID id) { return baseMapper.selectByPrimaryKey(id); } @Override public int updateByPrimaryKeySelective(T record) { return baseMapper.updateByPrimaryKey(record); } @Override public int updateByPrimaryKeyWithBLOBs(T record) { return baseMapper.updateByPrimaryKeyWithBLOBs(record); } @Override public int updateByPrimaryKey(T record) { return baseMapper.updateByPrimaryKey(record); } @Override