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

lodsve.mybatis.repository.BaseRepository Maven / Gradle / Ivy

/*
 * Copyright (C) 2018  Sun.Hao
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 */

package lodsve.mybatis.repository;

import lodsve.mybatis.repository.annotations.LogicDelete;
import lodsve.mybatis.repository.helper.MapperHelper;
import lodsve.mybatis.repository.provider.MapperProvider;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.MappedStatement;

import java.io.Serializable;
import java.util.List;

/**
 * 基础dao,将常用的数据库CRUD方法放在这里,需要用到时,只需直接继承此接口就好了.
* 其中的方法与{@link MapperProvider}一一对应
* eg:
*
 *  @Repository
 *  public interface DemoDAO extends BaseRepository {
 *  }
 * 
* * @author sunhao([email protected]) * @see MapperProvider */ public interface BaseRepository { /** * 根据实体中的id属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号 * * @param id 主键值 * @return 查询到的值 * @see MapperProvider#findById(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) T findById(Serializable id); /** * 根据实体中的id属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
* 这个方法只获取加了{@link LogicDelete}注解的字段值为{@link LogicDelete#nonDelete()}的记录
* 如果没有加这个注解,这个方法的作用与{@link #findById(Serializable)}一致! * * @param id 主键值 * @return 查询到的值 * @see MapperProvider#findEnabledById(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) T findEnabledById(Serializable id); /** * 根据传入的主键集合,查询出对象的集合(不会按照软删除来查询,查询条件仅仅为主键匹配) * * @param ids 主键集合 * @return 主键匹配的对象的集合 * @see MapperProvider#findByIds(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) List findByIds(List ids); /** * 根据实体中的id属性进行查询,查询出对象的集合查询条件使用等号
* 这个方法只获取加了{@link LogicDelete}注解的字段值为{@link LogicDelete#nonDelete()}的记录
* 如果没有加这个注解,这个方法的作用与{@link #findById(Serializable)}一致! * * @param ids 主键集合 * @return 主键匹配的对象的集合 * @see MapperProvider#findEnabledByIds(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) List findEnabledByIds(List ids); /** * 保存一个实体,null的属性不会保存,会使用数据库默认值。 * * @param entity 需要保存的对象(主键为空则自动生成主键值,否则使用原主键值) * @return 操作后影响的数据库记录数量(一般情况为1) * @see MapperProvider#save(MappedStatement) */ @InsertProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) @Options(useGeneratedKeys = true) int save(T entity); /** * 批量保存,保存后生成的主键会回填到每一个对象的主键字段 * * @param entities 需要保存对象的集合 * @return 保存成功的数据条数 * @see MapperProvider#batchSave(MappedStatement) */ @InsertProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) @Options(useGeneratedKeys = true) int batchSave(List entities); /** * 根据主键更新属性不为null的值。 * * @param entity 需要更新的对象,必须含有主键值 * @return 操作后影响的数据库记录数量(一般情况为1) * @see MapperProvider#updateAll(MappedStatement) */ @UpdateProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) int updateAll(T entity); /** * 根据主键更新属性不为null的值。 * * @param entity 需要更新的对象,必须含有主键值 * @return 操作后影响的数据库记录数量(一般情况为1) * @see MapperProvider#update(MappedStatement) */ @UpdateProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) int update(T entity); /** * 根据主键字段进行删除,方法参数必须包含完整的主键属性 * * @param id 主键 * @return 操作结果 * @see MapperProvider#deleteById(MappedStatement) */ @DeleteProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) boolean deleteById(Serializable id); /** * 逻辑删除,需要在逻辑删除字段添加注解{@link LogicDelete}. * * @param id 主键 * @return 操作结果 * @see MapperProvider#logicDeleteById(MappedStatement) */ @UpdateProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) boolean logicDeleteById(Serializable id); /** * 逻辑删除,需要在逻辑删除字段添加注解{@link LogicDelete}. * * @param id 主键 * @param lastModifiedBy 更新人字段 * @return 操作结果 * @see MapperProvider#logicDeleteByIdWithModifiedBy(MappedStatement) */ @UpdateProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) boolean logicDeleteByIdWithModifiedBy(Serializable id, Long lastModifiedBy); /** * 查询总条数 * * @return 数据库记录总条数 * @see MapperProvider#count(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) int count(); /** * 查询总条数 * 这个方法只获取加了{@link LogicDelete}注解的字段值为{@link LogicDelete#nonDelete()}的记录
* 如果没有加这个注解,这个方法的作用与{@link #count()}一致! * * @return 数据库记录总条数 * @see MapperProvider#countEnabled(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) int countEnabled(); /** * 判断是否存在 * * @param id 主键值 * @return 是否存在 * @see MapperProvider#isExist(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) boolean isExist(Serializable id); /** * 判断是否存在(如果有逻辑删除,则添加这个条件,否则与{@link #isExist(Serializable)})效果一致 * * @param id 主键值 * @return 是否存在 * @see MapperProvider#isExistEnabled(MappedStatement) */ @SelectProvider(type = MapperProvider.class, method = MapperHelper.PROVIDER_METHOD_NAME) boolean isExistEnabled(Serializable id); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy