使用mybatis完成通用dao和通用service
阿新 • • 發佈:2017-05-13
沒有 基本 blob word 指針 自己的 trac tag epo
使用通用dao和通用service可以減少代碼的開發。可以將常用的增刪改查放到通用dao中。對不同的or框架,基本上都有自己的實現如SpringJPA的Repository就提供了常用的增刪改查方法。而MyBatis借助代碼生成工具也可以生成常用方法的映射
這裏只針對Mybatis。如果使用代碼生成工具,會有一個問題:每個Mapper裏面都有一些方法(增曬改查)。維護起來的話還好。只是在寫service的時候會有一個問題。比如UserMapper裏面有 insert(User user)
, find(Integer id)
, delete(Integer id)
等方法,則在service中也要有這些方法的實現。假設每個Mapper有5個方法。則service也需要有5個方法的實現。如果有10個實體類。mapper可以省略(由生成工具生成),但是service有50個方法。到後期肯定不好進行維護
使用通用Mapper和Service
該通用Mapper使用了Spring-mybatis。所以沒有實現類,而是直接調用xml文件中的同名方法。之所以將通用Mapper抽出來主要是為了方便些通用的service
具體代碼
- 通用接口,該接口方法的名稱與使用代碼生成工具的名稱完全相同
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);
}
- 通用service接口。為了方便,名字和通用Mapper同名,其實更傾向於命名add。edit,find這類的命名,顯得更加面向對象
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);
}
- 通用service實現。也很簡單。就是調用通用mapper裏面的方法即可
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) {