service和serviceImpl抽取

来源:互联网 发布:lol代升级软件 编辑:程序博客网 时间:2024/05/21 11:25

BaseService.java

package cn.buaa.scm.service;import cn.buaa.scm.entity.Page;public interface BaseService<T> {// 插入数据public int insert(T entity) throws Exception;// 修改单个对象public int update(T entity) throws Exception;// 删除单个对象public int delete(T entity) throws Exception;// 通过主键(数组)批量删除数据public int deleteList(String[] pks) throws Exception;// 查询单个对象public T select(T entity) throws Exception;// 通过关键字分页查询public Page<T> selectPage(Page<T> page);// 多条件分页查询public Page<T> selectPageUseDyc(Page<T> page);}
BaseServiceimpl

package cn.buaa.scm.service.impl;import java.lang.reflect.Field;import java.lang.reflect.ParameterizedType;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Autowired;import cn.buaa.scm.dao.AccountMapper;import cn.buaa.scm.dao.BaseMapper;import cn.buaa.scm.dao.SupplierMapper;import cn.buaa.scm.entity.Page;import cn.buaa.scm.service.BaseService;public class BaseServiceImpl<T> implements BaseService<T> {protected BaseMapper<T> baseMapper;@Autowiredprotected SupplierMapper supplierMapper;@Autowiredprotected AccountMapper accountMapper;@PostConstruct// 在构造方法后,初化前执行private void initBaseMapper() throws Exception {// 完成以下逻辑,需要对研发本身进行命名与使用规范// this关键字指对象本身,这里指的是调用此方法的实现类(子类)System.out.println("=======this :" + this);System.out.println("=======父类基本信息:" + this.getClass().getSuperclass());System.out.println("=======父类和泛型的信息:" + this.getClass().getGenericSuperclass());ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();// 获取第一个参数的classClass clazz = (Class) type.getActualTypeArguments()[0];System.out.println("=======class:" + clazz);// 转化为属性名(相关的Mapper子类的引用名)Supplier supplierMapperString localField = clazz.getSimpleName().substring(0, 1).toLowerCase() + clazz.getSimpleName().substring(1)+ "Mapper";System.out.println("=======localField:" + localField);// getDeclaredField:可以使用于包括私有、默认、受保护、公共字段,但不包括继承的字段Field field = this.getClass().getSuperclass().getDeclaredField(localField);System.out.println("=======field:" + field);System.out.println("=======field对应的对象:" + field.get(this));Field baseField = this.getClass().getSuperclass().getDeclaredField("baseMapper");System.out.println("=======baseField:" + baseField);System.out.println("=======baseField对应的对象:" + baseField.get(this));// field.get(this)获取当前this的field字段的值。例如:Supplier对象中,baseMapper所指向的对象为其子类型SupplierMapper对象,子类型对象已被spring实例化于容器中baseField.set(this, field.get(this));System.out.println("========baseField对应的对象:" + baseMapper);}@Overridepublic int insert(T entity) throws Exception {// TODO Auto-generated method stubreturn baseMapper.insert(entity);}@Overridepublic int update(T entity) throws Exception {// TODO Auto-generated method stubreturn baseMapper.update(entity);}@Overridepublic int delete(T entity) throws Exception {// TODO Auto-generated method stubreturn baseMapper.delete(entity);}@Overridepublic int deleteList(String[] pks) throws Exception {// TODO Auto-generated method stubreturn baseMapper.deleteList(pks);}@Overridepublic T select(T entity) {// TODO Auto-generated method stubreturn baseMapper.select(entity);}@Overridepublic Page<T> selectPage(Page<T> page) {page.setList(baseMapper.selectPageList(page));page.setTotalRecord(baseMapper.selectPageCount(page));return page;}@Overridepublic Page<T> selectPageUseDyc(Page<T> page) {// TODO Auto-generated method stubpage.setList(baseMapper.selectPageListUseDyc(page));page.setTotalRecord(baseMapper.selectPageCountUseDyc(page));return page;}}



0 0