spring mongo 对象化CRUD
程序员文章站
2022-06-19 17:44:01
BaseServicepublic interface BaseService {List selectByMap(Map params);long selectCount(Map params);T save(T t);long update(T t);long deleteById(ID id);T getById(ID i...
BaseService
/**
* @author zhuzi
*/
public interface BaseService<T, ID> {
List<T> selectByMap(Map<String, Object> params);
long selectCount(Map<String, Object> params);
T save(T t);
long update(T t);
long deleteById(ID id);
T getById(ID id);
}
BaseServiceImpl
/**
* @author zhuzi
*/
public abstract class BaseServiceImpl<T, ID> implements BaseService<T, ID> {
public abstract Query getQuery(Map<String, Object> params, boolean isCount);
@SuppressWarnings("unchecked")
public Class<T> getclass() {
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
return (Class<T>) params[0];
}
public MongoTemplate getMongoTemplate() {
return SpringContextUtil.getObject(MongoTemplate.class);
}
public List<T> selectByMap(Map<String, Object> params) {
Query query = getQuery(params, false);
List<T> list = getMongoTemplate().find(query, getclass());
return list;
}
public long selectCount(Map<String, Object> params) {
Query query = getQuery(params, true);
return getMongoTemplate().count(query, getclass());
}
public T save(T t) {
return getMongoTemplate().insert(t);
}
public long update(T t) {
Query query = new Query();
query.addCriteria(Criteria.where(getIdname()).is(getId(t)));
UpdateResult result = getMongoTemplate().updateFirst(query, getUpdate(t), getclass());
if(result != null) {
return result.getModifiedCount();
}
return 0;
}
public Object getId(T t) {
Field[] fs = getclass().getDeclaredFields();
if(fs != null && fs.length > 0) {
for(Field f : fs) {
if(f.getAnnotation(Id.class) != null) {
String key = f.getName();
return ReflectMathodUtil.getValue(t, key);
}
}
}
return null;
}
public String getIdname() {
Field[] fs = getclass().getDeclaredFields();
if(fs != null && fs.length > 0) {
for(Field f : fs) {
if(f.getAnnotation(Id.class) != null) {
return f.getName();
}
}
}
return null;
}
public Update getUpdate(T t) {
Update update = new Update();
Field[] fs = getclass().getDeclaredFields();
boolean flag = false;
if(fs != null && fs.length > 0) {
for(Field f : fs) {
if(!f.getName().equals(getIdname()) && !"serialVersionUID".equals(f.getName())) {
String key = f.getName();
Object value = ReflectMathodUtil.getValue(t, key);
if(value != null) {
flag = true;
org.springframework.data.mongodb.core.mapping.Field af = f.getAnnotation(org.springframework.data.mongodb.core.mapping.Field.class);
if(af != null) {
update.set(af.value(), value);
} else {
update.set(key, value);
}
}
}
}
}
if(flag) {
return update;
}
return null;
}
public long deleteById (ID id){
try {
Query query = new Query();
query.addCriteria(Criteria.where(getIdname()).is(id));
DeleteResult result = getMongoTemplate().remove(query, getclass());
if(result != null) {
return result.getDeletedCount();
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public T getById(ID id) {
Map<String, Object> params = Maps.newHashMap();
params.put(getIdname(), id);
Query query = getQuery(params, false);
List<T> list = getMongoTemplate().find(query, getclass());
if(list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
}
本文地址:https://blog.csdn.net/u010379996/article/details/111983682
上一篇: 网站推广新手怎么做?我来告诉你
下一篇: 网络推广方法120则
推荐阅读
-
Spring高阶用法之自定义业务对象组件化
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
-
Spring jdbc中数据库操作对象化模型的实例详解
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询
-
spring mongo 对象化CRUD
-
聊聊spring之bean对象的实例化过程
-
【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3
-
【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3
-
Spring jdbc中数据库操作对象化模型的实例详解
-
spring容器创建对象的3种方式(bean的实例化)