SSM中使用通用mapper提取通用service -BaseService

使用通用mapper提取出service层的service方法,可以大大减少作量,少些赘余的代码。

利用通用Mappe封装rBaseService 主要有如下方法:

1、 queryById
2、 queryAll
3、 queryOne
4、 queryListByWhere
5、 queryPageListByWhere
6、 save
7、 update
8、 deleteById
9、 deleteByIds
10、 deleteByWhere

封装完BaseService再让普通的service接口实现实现BaseService 即可,可以发现除了一些统用的方法外普通的service 中只有很少的方法。

public abstract class BaseService<T extends BasePojo> {

	
	  @Autowired 
	private Mapper<T> mapper;
	 	
	/**
	 * 子类实现获取具体的mapper
	 */
//	public abstract Mapper getMapper();
	
	/**
	 * 根据主键获取数据
	 * @param id
	 * @return
	 */
	public T queryById(Long id) {
		return this.mapper.selectByPrimaryKey(id);
		
	}
	
	
	/**
	 * 查询所有数据
	 * @return List
	 */
	public List<T> queryAll(){
		return this.mapper.select(null);
	}
	
	
	/**
	 * 如果条件查询 有多条结果,则抛出异常
	 * @param 传入一个条件实例 record
	 * @return T
	 */
	public T queryOne(T record) {
		return this.mapper.selectOne(record);
	}
	
	/**
	 * 根据条件查询多条数据
	 * @return List
	 */
	public List<T> queryListByWhere(T record){
		return this.mapper.select(record);
	}
	
	/**
	 * 查询条件分页查询数据 并返回分页后的数据
	 * @param record 带条件的pojo
	 * @param pageNum  页码
     * @param pageSize 每页显示数量
	 */
	public PageInfo<T> queryPageListByWhere(T record,Integer pageNum,Integer pageSize){
		PageHelper.startPage(pageNum, pageSize);
		List<T> list = this.mapper.select(record);
		return new PageInfo<T>(list);
	}
	
	/**
	 * 插入一个数据
	 * @param record 插入的数据
	 * @return int
	 */
	public Integer save(T record) {
		record.setCreated(new Date());
		record.setUpdated(record.getCreated());
		return this.mapper.insert(record);
	}
	
	/**
	 * 选择不为null的字段插入数据,为null的字段不插入
	 * @return int
	 */
	public Integer saveSelective(T record) {
		record.setCreated(new Date());
		record.setUpdated(record.getCreated());
		return this.mapper.insertSelective(record);
	}
	
	
	/**
	 * 根据主键更新
	 * @param t
	 * @return
	 */
	public Integer update(T t) {
		t.setUpdated(t.getCreated());
		return this.mapper.updateByPrimaryKey(t);
	}
	
	/**
	 * 选择不为null的数据更新
	 * @param t
	 * @return
	 */
	public Integer updateSelective(T t) {
		t.setUpdated(t.getCreated());
		t.setCreated(null);//强制创建时间为null,永远不会改变创建时间
		return this.mapper.updateByPrimaryKeySelective(t);
	}
	


	/**
	 * 根据主键删除数据
	 * @param id
	 * @return
	 */
	public Integer deleteById(Long id) {
		return this.mapper.deleteByPrimaryKey(id);
	}
	
	/**
	 * 根据ids 批量删除
	 * @param ids
	 * @param clazz 删除的类型
	 * @param property 主键名
	 * @return int
	 */
	public Integer deleteByIds(List<Object> ids,Class<T> clazz,String property) {
		Example example = new Example(clazz);
		example.createCriteria().andIn(property, ids);
		return this.mapper.deleteByExample(example);
	}
	
	/**
	 * 根据条件删除数据
	 * @param recode
	 * @return
	 */
	public Integer 	deleteByWhere(T recode) {
		return this.mapper.delete(recode);
		
	}
}


ItemService 继承了BaserService:

@Service
public class ItemCatService extends BaseService<ItemCat>{
	//其他方法
}

值得注意的是ItemService中就连Mpper的注入也省去了,原因再与BaseService中的如下代码:

public abstract class BaseService<T extends BasePojo> {

	  @Autowired 
	private Mapper< T> mapper;
	...
	}

spring4以后支持了泛型注入,使得
@Autowired
private Mapper< T> mapper;
可以注入任何实现了通用mappr的mapper接口。
如:
@Autowired
private Mapper< Item > mapper;
这样就不在需要再service中注入ItemService了。

你可能感兴趣的:(javaee)