/** * */ package me.yumin.mongo.client; import java.util.List; import java.util.Map; import me.yumin.mongo.client.domain.valueobject.MongoSortVO; import me.yumin.mongo.client.query.MongoAdvancedQuery; /** * @author yumin * */ public interface IMongoDAO<T> { /** * 写入一条新记录("_id"不允许重复) * * @param object 任意pojo,若不传"_id"则自动生成 * @return 写入成功true|或失败false */ public boolean insert(T object); /** * 批量写入新记录("_id"不允许重复) * * @param objects 任意pojo列表,若不传"_id"则自动生成 * @return 写入成功true|或失败false */ public boolean insertList(List<T> objects); /** * 保存一条新记录("_id"若存在则更新反之则写入) * * @param object 任意pojo,若不传"_id"则自动生成 * @return 保存成功true|或失败false */ public boolean save(T object); /** * 自定义条件修改(多条件版,将满足系列条件的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE key1=value1 AND key2=value2... * 注:此方法只会修改指定项,只改少数字段时推荐 * * @param condition key:查询的字段名,value:字段的匹配值 * @param target 新修改对象,只需传想修改的字段即可 * @return 修改成功true|或失败false */ public boolean updateMapByCondition(Map<String, Object> condition, Map<String, Object> target); /** * 自定义条件修改(单条件版,将满足系列条件的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE field=value * 注:此方法只会修改指定项,只改少数字段时推荐 * * @param field 查询的字段名 * @param value 字段的匹配值 * @param target 新修改对象,只需传想修改的字段即可 * @return 修改成功true|或失败false */ public boolean updateMapByKV(String field, String value, Map<String, Object> target); /** * 按"_id"条件修改(将满足字段"_id"等于"value"的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE _id=value * 注:此方法只会修改指定项,只改少数字段时推荐 * * @param value "_id"的匹配值 * @param target 新修改对象,只需传想修改的字段即可 * @return 修改成功true|或失败false */ public boolean updateMapByPrimaryId(String value, Map<String, Object> target); /** * 自定义条件修改(多条件版,将满足系列条件的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE key1=value1 AND key2=value2... * 注:此方法会修改所有参数 * * @param condition key:查询的字段名,value:字段的匹配值 * @param object 新修改对象,任意pojo但需完整对象,而不只设想改的字段 * @return 修改成功true|或失败false */ public boolean updateObjectByCondition(Map<String, Object> condition, T target); /** * 自定义条件修改(单条件版,将满足单个条件的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE field=value * 注:此方法会修改所有参数 * * @param field 查询的字段名 * @param value 字段的匹配值 * @param object 新修改对象,任意pojo但需完整对象,而不只设想改的字段 * @return 修改成功true|或失败false */ public boolean updateObjectByKV(String field, String value, T target); /** * 按"_id"条件修改(将满足字段"_id"等于"value"的记录全部修改) * 类似:UPDATE tblname SET xx=xx... WHERE _id=value * 注:此方法会修改所有参数 * * @param value "_id"的匹配值 * @param object 新修改对象,任意pojo但需完整对象,而不只设想改的字段 * @return 修改成功true|或失败false */ public boolean updateObjectByPrimaryId(String value, T target); /** * 按"_id"条件累加 * 类似:UPDATE tblname field=field+step SET WHERE _id=value * * @param value "_id"的匹配值 * @param column 对该字段进行累加 * @param step 累加步长(应传正数) * @return 累加成功true|或失败false */ public boolean incrByPrimaryId(String value, String column, int step); /** * 按"_id"条件累减 * 类似:UPDATE tblname field=field-step SET WHERE _id=value * * @param value "_id"的匹配值 * @param column 对该字段进行累减 * @param step 累减步长(应传负数) * @return 累减成功true|或失败false */ public boolean decrByPrimaryId(String value, String column, int step); /** * 自定义条件删除(多条件版,将满足系列条件的记录全部删除) * 类似:DELETE FROM tblname WHERE key1=value1 AND key2=value2... * * @param condition key:查询的字段名,value:字段的匹配值 * @return 删除成功true|或失败false */ public boolean removeByCondition(Map<String, Object> condition); /** * 自定义条件删除(单条件版,将满足单个条件的记录全部删除) * 类似:DELETE FROM tblname WHERE field=value * * @param field 查询的字段名 * @param value 字段的匹配值 * @return 删除成功true|或失败false */ boolean removeByKV(String field, String value); /** * 按"_id"条件删除(将满足字段"_id"等于"value"的记录全部删除) * 类似:DELETE FROM tblname WHERE _id=value * * @param value "_id"的匹配值 * @return 删除成功true|或失败false */ public boolean removeByPrimaryId(String value); /** * 清空当前数据集的所有记录(请慎用) * * @return */ @Deprecated public boolean removeAll(); /** * 自定义查询单行(多条件版,将满足系列条件的单行记录返回) * 类似:SELECT * FROM tblname WHERE key1=value1 AND key2=value2... LIMIT 1 * * @param condition key:查询的字段名,value:字段的匹配值 * @return 业务对象 */ public T findOneByCondition(Map<String, Object> condition); /** * 自定义查询单行(单条件版,将满足单个条件的单行记录返回) * 类似:SELECT * FROM tblname WHERE field=value LIMIT 1 * * @param field 查询的字段名 * @param value 字段的匹配值 * @return 业务对象 */ public T findOneByKV(String field, String value); /** * 按"_id"条件查询单行(将满足字段"_id"等于"value"的单行记录返回) * 类似:SELECT * FROM tblname WHERE _id=value LIMIT 1 * * @param value "_id"的匹配值 * @return 业务对象 */ public T findOneByPrimaryId(String value); /** * 自定义查询全部(多条件版,将满足系列条件的多行记录返回,支持排序) * 类似:SELECT * FROM tblname WHERE key1=value1 AND key2=value2... ORDER BY key DESC|ASC * * @param condition key:查询的字段名,value:字段的匹配值 * @param sort 排序对象 * @return 业务对象 */ @Deprecated public List<T> findAllByCondition(Map<String, Object> condition, MongoSortVO sort); /** * 自定义查询列表(多条件版,将满足系列条件的多行记录返回,支持排序及分页) * 类似:SELECT * FROM tblname WHERE key1=value1 AND key2=value2... ORDER BY key DESC|ASC LIMIT x,y * * @param condition key:查询的字段名,value:字段的匹配值 * @param sort 排序对象 * @param page 当前页码 * @param size 每页数量 * @return 业务对象 */ public List<T> findByCondition(Map<String, Object> condition, MongoSortVO sort, int page, int size); /** * 统计满足条件的记录数(多条件版) * 类似:SELECT COUNT(*) FROM tblname WHERE key1=value1 AND key2=value2... ORDER BY key DESC|ASC LIMIT x,y * * @param condition key:查询的字段名,value:字段的匹配值 * @return 满条足件的记录数 */ public long countByCondition(Map<String, Object> condition); /** * 自定义查询列表(多条件高级版,将满足系列条件的多行记录返回,支持排序及分页) * 高级版支持丰富查询条件 * 类似:SELECT * FROM tblname WHERE key1=value1 AND key2=value2... ORDER BY key DESC|ASC LIMIT x,y * * @param condition key:查询的字段名,value:AdvancedQuery * @param sort 排序对象 * @param page 当前页码 * @param size 每页数量 * @return 业务对象 */ public List<T> advancedFindByCondition(Map<String, MongoAdvancedQuery> condition, MongoSortVO sort, int page, int size); /** * 统计满足条件的记录数(多条件高级版) * 类似:SELECT COUNT(*) FROM tblname WHERE key1=value1 AND key2=value2... ORDER BY key DESC|ASC LIMIT x,y * * @param condition key:查询的字段名,value:AdvancedQuery * @return 满条足件的记录数 */ public long advancedCountByCondition(Map<String, MongoAdvancedQuery> condition); /** * closes the underlying connector, which in turn closes all open connections. * Once called, this Mongo instance can no longer be used. */ public void close(); }