创建BaseMapper
我这里是基于TKmybatis的框架,也可以不用,自己写通用的方法
public interface BaseMapper<T> extends tk.mybatis.mapper.common.BaseMapper<T>, BaseSelectMapper<T>, ExampleMapper<T>{
}
创建BaseService
public interface BaseService<T> {
List<T> selectByField(String name , String value);
List<T> selectByFields(String[] names , String[] values);
void insertSelective(T t);
void insert(T t);
List<T> selectAll();
void deleteByPrimaryKey(Object id);
T selectByPrimaryKey(Object id);
}
创建BaseServiceImpl
//这里不需要@Service
public class BaseServiceImpl<T> implements BaseService<T> {
@Autowired
private BaseMapper<T> baseMapper;
private Class<T> clzz;
public BaseServiceImpl() {
// this.clzz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Type type = this.getClass().getGenericSuperclass(); // generic 泛型
if(type instanceof ParameterizedType){
// 强制转化“参数化类型”
ParameterizedType parameterizedType = (ParameterizedType) type;
// 参数化类型中可能有多个泛型参数
Type[] types = parameterizedType.getActualTypeArguments();
// 获取数据的第一个元素(User.class)
this.clzz = (Class<T>) types[0]; // com.oa.shore.entity.User.class
}
}
@Override
public List<T> selectByField(String name, String value) {
Weekend<T> weekend = new Weekend<>(this.clzz);
Example.Criteria criteria = weekend.createCriteria();
criteria.andEqualTo(name,value);
return baseMapper.selectByExample(weekend);
}
@Override
public List<T> selectByFields(String[] names, String[] values) {
if(names.length >0){
Weekend<T> weekend = new Weekend<>(this.clzz);
Example.Criteria criteria = weekend.createCriteria();
for (int i = 0; i < names.length; i++) {
criteria.andEqualTo(names[i],values[i]);
}
return baseMapper.selectByExample(weekend);
}else{
return new ArrayList<>();
}
}
@Override
public void insertSelective(T t) {
baseMapper.insertSelective(t);
}
@Override
public void insert(T t) {
baseMapper.insert(t);
}
@Override
public List<T> selectAll() {
return baseMapper.selectAll();
}
@Override
public void deleteByPrimaryKey(Object id) {
baseMapper.deleteByPrimaryKey(id);
}
@Override
public T selectByPrimaryKey(Object id) {
return baseMapper.selectByPrimaryKey(id);
}
}
使用例子
创建ModelTestService
public interface ModelTestService extends BaseService<ModelTest> {
int bulkInsert(List<ModelTest> list);
void selectAll1();
}
创建ModelTestServiceImpl
@Service
public class ModelTestServiceImpl extends BaseServiceImpl<ModelTest> implements ModelTestService {
@Autowired
private ModelTestMapper modelTestMapper;
@Override
public int bulkInsert(List<ModelTest> list) {
int i = 1000;
int j = 0;
int success=0;
while (list.size() > (j + 1) * i) {
success+=modelTestMapper.bulkInsert(list.subList(j * i, (j + 1) * i));
j++;
}
if(list.size()>0){
success+=modelTestMapper.bulkInsert(list.subList(j * i, list.size()));
}
return success;
}
@Override
public void selectAll1() {
modelTestMapper.selectAll();
}
}