All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.acyou.leo.framework.service.ServiceImpl Maven / Gradle / Ivy

There is a newer version: 1.6.0.RELEASE
Show newest version
package cn.acyou.leo.framework.service;

import cn.acyou.leo.framework.annotation.mapper.SelectiveIgnore;
import cn.acyou.leo.framework.mapper.Mapper;
import com.google.common.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.Sqls;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 顶级 Service 实现
 *
 * @author youfang
 * @version [1.0.0, 2020/4/17]
 **/
//事务已经通过{@link cn.com.zhengya.spdapi.conf.TransactionAdviceConfig} 配置AOP事务
//@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public class ServiceImpl, T> implements Service {

    private final static Logger log = LoggerFactory.getLogger(ServiceImpl.class);

    @Autowired
    protected M baseMapper;

    private final Class clazz;

    @SuppressWarnings("unchecked")
    public ServiceImpl() {
        TypeToken poType = new TypeToken(getClass()) {
        };
        clazz = (Class) poType.getRawType();
    }

    /**
     * 构建查询Example
     * 
     *          Example example = builderExample()
     *              .where(Sqls.custom()
     *                      .andGreaterThan("birth", DateUtil.parseDate("2020-04-01")))
     *              .orderByDesc("age")
     *              .build();
     *         List students = baseMapper.selectByExample(example);
     * 
*

* 使用example的setOrderByClause方法需要是数据库的字段。 如:example.setOrderByClause("user_name asc"); * 使用builderExample的方法需要时propertyName。 如:builderExample().orderByDesc("userName") * * @return 参数构造器 */ public Example.Builder builderExample() { return Example.builder(clazz); } /** * 根据Sqls构建Example * * @param sqls sqls * @return {@link Example} */ public Example buildWhereSqlsExample(Sqls sqls) { return builderExample().where(sqls).build(); } /** * 根据Sqls构建Example OrderByAsc * * @param sqls sqls * @return {@link Example} */ public Example buildOrderByAscWhereSqlsExample(Sqls sqls, String orderByProperties) { return builderExample().orderByAsc(orderByProperties).where(sqls).build(); } /** * 根据Sqls构建Example OrderByDesc * * @param sqls sqls * @return {@link Example} */ public Example buildOrderByDescWhereSqlsExample(Sqls sqls, String orderByProperties) { return builderExample().orderByDesc(orderByProperties).where(sqls).build(); } /* * ———————————————————————————— INSERT —————————————————————————————————————————— */ /** * 保存一个实体,null的属性也会保存,不会使用数据库默认值 * * @param record 记录 * @return 影响行数 */ @Override public int insert(T record) { return baseMapper.insert(record); } /** * 保存一个实体,null的属性不会保存,会使用数据库默认值 * * @param record 记录 * @return 影响行数 */ @Override public int insertSelective(T record) { return baseMapper.insertSelective(record); } /** * 批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含`id`属性并且必须为自增列 * * @param recordList 记录List * @return 影响行数 */ @Override public int insertList(List recordList) { return baseMapper.insertList(recordList); } /** * 批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含`id`属性并且必须为自增列 * 这个支持数据库默认值 * * @param recordList 记录List * @return 影响行数 */ @Override public int insertListSelective(List recordList) { return baseMapper.insertListSelective(recordList); } /* * ———————————————————————————— UPDATE —————————————————————————————————————————— */ /** * 批量更新(属性为null不更新) * * @param recordList 记录List * @return 影响行数 */ @Override public int updateListSelective(Collection recordList) { return baseMapper.updateListSelective(recordList); } /** * 批量更新(属性为null也更新) * * @param recordList 记录List * @return 影响行数 */ @Override public int updateList(Collection recordList) { return baseMapper.updateList(recordList); } /** * 根据Example条件更新实体`record`包含的全部属性,null值会被更新 * * @param record 记录 * @param example 条件 * @return 影响行数 */ @Override public int updateByExample(T record, Object example) { return baseMapper.updateByExample(record, example); } /** * 根据Example条件更新实体`record`包含的不是null的属性值 * * @param record 记录 * @param example 条件 * @return 影响行数 */ @Override public int updateByExampleSelective(T record, Object example) { return baseMapper.updateByExampleSelective(record, example); } /** * 根据Example条件更新实体`record`包含的不是null的属性值 (根据注解忽略) * {@link SelectiveIgnore} * 在属性字段上加上注解,不会忽略null值 * - @SelectiveIgnore * @param record 记录 * @param example example * @return 影响行数 */ @Override public int updateByExampleSelectiveCustom(T record, Object example) { return baseMapper.updateByExampleSelectiveCustom(record, example); } /** * 根据主键更新实体全部字段,null值会被更新 * * @param record 记录 * @return 影响行数 */ @Override public int updateByPrimaryKey(T record) { return baseMapper.updateByPrimaryKey(record); } /** * 根据主键更新属性不为null的值 * * @param record 记录 * @return 影响行数 */ @Override public int updateByPrimaryKeySelective(T record) { return baseMapper.updateByPrimaryKeySelective(record); } /** * 根据主键更新属性不为null的值 (根据注解忽略){@link SelectiveIgnore} * * 在属性字段上加上注解,不会忽略null值 * - @SelectiveIgnore * @param record 记录 * @return 影响行数 */ @Override public int updateByPrimaryKeySelectiveCustom(T record) { return baseMapper.updateByPrimaryKeySelectiveCustom(record); } /* * ———————————————————————————— DELETE —————————————————————————————————————————— */ /** * 根据主键字符串进行删除,类中只有存在一个带有@Id注解的字段 * * @param idList 主键集合 如 List * @return 影响行数 影响行数 */ @Override public int deleteByPrimaryKeyList(Collection idList) { return baseMapper.deleteByPrimaryKeyList(idList); } /** * 根据实体属性作为条件进行删除,查询条件使用等号 * * @param record 记录 * @return 影响行数 */ @Override public int delete(T record) { return baseMapper.delete(record); } /** * 根据主键字段进行删除,方法参数必须包含完整的主键属性 * * @param key 主键 * @return 影响行数 */ @Override public int deleteByPrimaryKey(Object key) { return baseMapper.deleteByPrimaryKey(key); } /** * 根据Example条件删除数据 * * @param example 条件 * @return 影响行数 */ @Override public int deleteByExample(Object example) { return baseMapper.deleteByExample(example); } /** * 根据主键字符串进行删除,类中只有存在一个带有@Id注解的字段 * * @param ids 如 "1,2,3,4" * @return 影响行数 */ @Override public int delete(String ids) { return baseMapper.deleteByIds(ids); } /* * ———————————————————————————— SELECT —————————————————————————————————————————— */ /** * 根据主键List进行查询,类中只有存在一个带有@Id注解的字段 * * @param idList 主键集合。 如 List * @return 查询结果 */ @Override public List selectByPrimaryKeyList(Collection idList) { return baseMapper.selectByPrimaryKeyList(idList); } /** * 根据实体中的属性值进行查询,查询条件使用等号 * * @param record 记录 * @return 查询结果 */ @Override public List select(T record) { return baseMapper.select(record); } /** * 根据Example条件进行查询 * * @param example 条件 * @return 查询结果 */ @Override public List selectByExample(Object example) { return baseMapper.selectByExample(example); } /** * 查询全部结果 * * @return 查询结果 */ @Override public List selectAll() { return baseMapper.selectAll(); } /** * 根据主键字符串进行查询,类中只有存在一个带有@Id注解的字段 * * @param ids 如 "1,2,3,4" * @return 查询结果 */ @Override public List selectByIds(String ids) { return baseMapper.selectByIds(ids); } /** * 根据实体中的属性查询总数,查询条件使用等号 * * @param record 记录 * @return 查询结果 */ @Override public int selectCount(T record) { return baseMapper.selectCount(record); } /** * 根据Example条件进行查询总数 * * @param example 条件 * @return 查询结果 */ @Override public int selectCountByExample(Object example) { return baseMapper.selectCountByExample(example); } /** * 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号 * * @param key 主键 * @return 查询结果 */ @Override public T selectByPrimaryKey(Object key) { return baseMapper.selectByPrimaryKey(key); } /** * 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号 * * @param record 记录 * @return 查询结果 */ @Override public T selectOne(T record) { return baseMapper.selectOne(record); } /** * 根据Example条件进行查询 * * @param example 条件 * @return 查询结果 */ @Override public T selectOneByExample(Object example) { return baseMapper.selectOneByExample(example); } /** * 根据属性查询 * * @param propertyName 实体属性 * @param value v * @param args 参数 必须是偶数,否则忽略 * @return 查询结果 */ @Override public List selectByProperties(String propertyName, Object value, Object... args) { if (StringUtils.isEmpty(propertyName)) { return new ArrayList<>(); } Sqls sqls = Sqls.custom(); sqls.andEqualTo(propertyName, value); int groupLen = 2; if (args != null && args.length % groupLen == 0) { for (int i = 0; i < args.length; i = i + groupLen) { sqls.andEqualTo(String.valueOf(args[i]), args[i + 1]); } } Example example = builderExample() .where(sqls) .build(); return baseMapper.selectByExample(example); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy