MybatisPlus生成器ServiceImpl类详解

ServiceImpl类是我们进行SQL操作中非常重要的一个类,通过MyBatisPlus生成的各个实体类的XXXImpl都会继承ServiceImpl类那里继承全部的方法,那么ServiceImpl类中有哪些方法呢?如下介绍:
/** * IService 实现类( 泛型:M 是 mApper 对象,T 是实体 ) * * @author hubin * @since 2018-06-23 */@SuppressWarnings("unchecked")public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {protected Log log = LogFactory.getLog(getClass());@Autowiredprotected M baseMapper;@Overridepublic M getBaseMapper() {return baseMapper;}protected Class<T> entityClass = currentModelClass();@Overridepublic Class<T> getEntityClass() {return entityClass;}protected Class<T> mapperClass = currentMapperClass();/*** 判断数据库操作是否成功** @param result 数据库操作返回影响条数* @return boolean* @deprecated 3.3.1*/@Deprecatedprotected boolean retBool(Integer result) {return SqlHelper.retBool(result);}protected Class<T> currentMapperClass() {return (Class<T>) ReflectionKit.getSuperClassGenericType(getClass(), 0);}protected Class<T> currentModelClass() {return (Class<T>) ReflectionKit.getSuperClassGenericType(getClass(), 1);}/*** 批量操作 SqlSession** @deprecated 3.3.0*/@Deprecatedprotected SqlSession sqlSessionBatch() {return SqlHelper.sqlSessionBatch(entityClass);}/*** 释放sqlSession** @param sqlSession session* @deprecated 3.3.0*/@Deprecatedprotected void closeSqlSession(SqlSession sqlSession) {SqlSessionUtils.closeSqlSession(sqlSession, GlobalConfigUtils.currentSessionFactory(entityClass));}/*** 获取 SqlStatement** @param sqlMethod ignore* @return ignore* @see #getSqlStatement(SqlMethod)* @deprecated 3.4.0*/@Deprecatedprotected String sqlStatement(SqlMethod sqlMethod) {return SqlHelper.table(entityClass).getSqlStatement(sqlMethod.getMethod());}/*** 批量插入** @param entityList ignore* @param batchSizeignore* @return ignore*/@Transactional(rollbackFor = Exception.class)@Overridepublic boolean saveBatch(Collection<T> entityList, int batchSize) {String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE);return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));}/*** 获取mapperStatementId** @param sqlMethod 方法名* @return 命名id* @since 3.4.0*/protected String getSqlStatement(SqlMethod sqlMethod) {return SqlHelper.getSqlStatement(mapperClass, sqlMethod);}/*** TableId 注解存在更新记录,否插入一条记录** @param entity 实体对象* @return boolean*/@Transactional(rollbackFor = Exception.class)@Overridepublic boolean saveOrUpdate(T entity) {if (null != entity) {TableInfo tableInfo = TableInfoHelper.getTableInfo(this.entityClass);Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");String keyProperty = tableInfo.getKeyProperty();Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");Object idVal = ReflectionKit.getFieldValue(entity, tableInfo.getKeyProperty());return StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal)) ? save(entity) : updateById(entity);}return false;}@Transactional(rollbackFor = Exception.class)@Overridepublic boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize) {TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");String keyProperty = tableInfo.getKeyProperty();Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");return SqlHelper.saveOrUpdateBatch(this.entityClass, this.mapperClass, this.log, entityList, batchSize, (sqlSession, entity) -> {Object idVal = ReflectionKit.getFieldValue(entity, keyProperty);return StringUtils.checkValNull(idVal)|| CollectionUtils.isEmpty(sqlSession.selectList(getSqlStatement(SqlMethod.SELECT_BY_ID), entity));}, (sqlSession, entity) -> {MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();param.put(Constants.ENTITY, entity);sqlSession.update(getSqlStatement(SqlMethod.UPDATE_BY_ID), param);});}@Transactional(rollbackFor = Exception.class)@Overridepublic boolean updateBatchById(Collection<T> entityList, int batchSize) {String sqlStatement = getSqlStatement(SqlMethod.UPDATE_BY_ID);return executeBatch(entityList, batchSize, (sqlSession, entity) -> {MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();param.put(Constants.ENTITY, entity);sqlSession.update(sqlStatement, param);});}@Overridepublic T getOne(Wrapper<T> queryWrapper, boolean throwEx) {if (throwEx) {return baseMapper.selectOne(queryWrapper);}return SqlHelper.getObject(log, baseMapper.selectList(queryWrapper));}@Overridepublic Map<String, Object> getMap(Wrapper<T> queryWrapper) {return SqlHelper.getObject(log, baseMapper.selectMaps(queryWrapper));}@Overridepublic <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {return SqlHelper.getObject(log, listObjs(queryWrapper, mapper));}/*** 执行批量操作** @param consumer consumer* @since 3.3.0* @deprecated 3.3.1 后面我打算移除掉 {@link #executeBatch(Collection, int, BiConsumer)} }.*/@Deprecatedprotected boolean executeBatch(Consumer<SqlSession> consumer) {return SqlHelper.executeBatch(this.entityClass, this.log, consumer);}/*** 执行批量操作** @param list数据集合* @param batchSize 批量大小* @param consumer执行方法* @param <E>泛型* @return 操作结果* @since 3.3.1*/protected <E> boolean executeBatch(Collection<E> list, int batchSize, BiConsumer<SqlSession, E> consumer) {return SqlHelper.executeBatch(this.entityClass, this.log, list, batchSize, consumer);}/*** 执行批量操作(默认批次提交数量{@link IService#DEFAULT_BATCH_SIZE})** @param list数据集合* @param consumer 执行方法* @param <E>泛型* @return 操作结果* @since 3.3.1*/protected <E> boolean executeBatch(Collection<E> list, BiConsumer<SqlSession, E> consumer) {return executeBatch(list, DEFAULT_BATCH_SIZE, consumer);}}


推荐阅读