赞
踩
一、SpringBoot 集成MongoDB 引用 spring-boot-starter-data-mongodb 包
- <!-- MongoDB 依赖包 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-mongodb</artifactId>
- </dependency>
二、spring-boot-starter-data-mongodb包提供的 MongoRepository 提供了各种查询方法和保存方法
- @NoRepositoryBean
- public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
- <S extends T> List<S> save(Iterable<S> var1);
-
- List<T> findAll();
-
- List<T> findAll(Sort var1);
-
- <S extends T> S insert(S var1);
-
- <S extends T> List<S> insert(Iterable<S> var1);
-
- <S extends T> List<S> findAll(Example<S> var1);
-
- <S extends T> List<S> findAll(Example<S> var1, Sort var2);
- }
三、创建BaseDao 接口
注意:接口上加上 @NoRepositoryBean注解,避免Spring 扫描
这边添加三个update方法
第一个update方法根据传入的实体Bean中不为空的属性修改MongoDB 数据库
第二个update方法根据ID修改传入的map中的键值对修改MongoDB 数据库
第三个update方法传入修改的条件和修改的值修改MongoDB 数据库
- import org.springframework.data.mongodb.repository.MongoRepository;
- import org.springframework.data.repository.NoRepositoryBean;
-
- import java.io.Serializable;
- import java.util.Map;
-
- /**
- * @Author chepeiqing
- * @Description mongodb BaseDao
- * @Date 2018/7/12
- * @Time 下午3:01
- * @Version V1.0.0
- */
- @NoRepositoryBean
- public interface BaseDao<T, ID extends Serializable> extends MongoRepository<T,ID> {
-
- /**
- * 根据传入的对象 修改
- * @param id
- * @param t
- */
- void update(ID id, T t);
-
- /**
- * 根据id修改
- * @param id 更新主键
- * @param updateFieldMap key:需要更新的属性 value:对应的属性值
- */
- void update(ID id, Map<String, Object> updateFieldMap);
-
- /**
- * 根据传入值修改
- * @param queryFieldMap key:查询条件的属性 value:对应的属性值
- * @param updateFieldMap key:需要更新的属性 value:对应的属性值
- */
- void update(Map<String, Object> queryFieldMap, Map<String, Object> updateFieldMap);
- }
四、BaseDao实现类BaseDaoImpl
此处继承 MongoRepository 类的实现方法 SimpleMongoRepository 并实现BaseDao
-
-
- import org.springframework.data.mongodb.core.MongoOperations;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.data.mongodb.core.query.Update;
- import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
- import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
-
- import java.io.Serializable;
- import java.lang.reflect.Field;
- import java.util.Map;
-
- /**
- * @Author chepeiqing
- * @Description 类说明
- * @Date 2018/7/12
- * @Time 下午3:04
- * @Version V1.0.0
- */
- public class BaseDaoImpl<T, ID extends Serializable> extends SimpleMongoRepository<T, ID> implements BaseDao<T, ID> {
-
- protected final MongoOperations mongoTemplate;
-
- protected final MongoEntityInformation<T, ID> entityInformation;
-
- private Class<T> clazz;
-
- public BaseDaoImpl(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
- super(metadata, mongoOperations);
- this.mongoTemplate = mongoOperations;
- this.entityInformation = metadata;
- clazz = entityInformation.getJavaType();
- }
-
- /**
- * 修改
- * @param id
- * @param t
- **/
- @Override
- public void update(ID id, T t) {
- Update update = new Update();
- // 获取实体类的所有属性,返回Field数组
- Query query = new Query();
- query.addCriteria(new Criteria("_id").is(id));
- // 利用反射获取部位空的属性值
- Field[] field = clazz.getDeclaredFields();
- for (int i = 0; i < field.length; i++) {
- Field f = field[i];
- // 设置些属性是可以访问的
- f.setAccessible(true);
- try {
- Object object = f.get(t);
- if (object != null) {
- update.set(f.getName(), object);
- }
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- this.mongoTemplate.updateFirst(query, update, clazz);
- }
-
- /**
- * @param id 更新主键
- * @param updateFieldMap key:需要更新的属性 value:对应的属性值
- */
- @Override
- public void update(ID id, Map<String, Object> updateFieldMap) {
- if (updateFieldMap != null && !updateFieldMap.isEmpty()) {
- Criteria criteria = new Criteria("_id").is(id);
- Update update = new Update();
- updateFieldMap.forEach(update::set);
- mongoTemplate.updateFirst(new Query(criteria), update, clazz);
- }
- }
-
- /**
- * @param queryFieldMap 字段名
- * @param updateFieldMap key:需要更新的属性 value:对应的属性值
- */
- @Override
- public void update(Map<String, Object> queryFieldMap, Map<String, Object> updateFieldMap) {
- Criteria criteria = new Criteria();
- if (null != queryFieldMap && !queryFieldMap.isEmpty()) {
- queryFieldMap.forEach((key, value) -> criteria.and(key).is(value));
- }
-
- if (updateFieldMap != null && !updateFieldMap.isEmpty()) {
- Update update = new Update();
- updateFieldMap.forEach(update::set);
- mongoTemplate.updateFirst(new Query(criteria), update, clazz);
- }
- }
- }
五、怎么使用
所有的Dao接口继承 BaseDao,不需要写实现类
- /**
- * @Author chepeiqing
- * @Description 接口说明
- * @Date 2018/7/16
- * @Time 下午3:33
- * @Version V1.0.0
- */
- public interface ImagesDao extends BaseDao<Images, String> {
-
- }
六、调用
注入ImagesDao 就可以直接调用 update方法
-
- @Resource
- private ImagesDao imagesDao;
-
- public void updateImage(Images images){
- imagesDao.update(images.getId(),images);
- }
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。