javaweb项目中自定义通用的service层和mapper层

创建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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值