当前位置:网站首页>mongodb客户端操作(MongoRepository)

mongodb客户端操作(MongoRepository)

2022-07-06 17:01:00 white_while

官方文档

orm

jpa

MongoRepository

springboot 整合

  1. 依赖
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>
  1. springboot扫描注解
@EnableMongoRepositories(
    basePackages = {"com.jl.ability.*"},
    repositoryImplementationPostfix = "Impl")
repositoryImplementationPostfix 默认就是 Impl 后缀,可指定自定义仓储层接口实现类后缀
如mongodb其CustomizedUserRepository指定实现类customizedUserRepositoryImpl
  1. 定义接口和自定义接口及实现类
interface CustomizedUserRepository {
  void someCustomMethod(User user);
}
class CustomizedUserRepositoryImpl implements CustomizedUserRepository {
  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}
@Repository
interface UserRepository extends CrudRepository<User, Long>, CustomizedUserRepository {
  // Declare query methods here
}

curd基本操作

实体类

@Data
@Document(collection = "balloon_msg")
public class BalloonMsg {
    @Id
    private Long id;
    private String sid;
    private String body;
    private Long from;
    private int sex;
    private Date ctime;
    private String accid;
    private Integer revNum;
    private Integer replyNum;
}

接口

@Repository
public interface BalloonMsgMapper extends MongoRepository<BalloonMsg, Long>, CustomizedBalloonMsgMapper {

    List<BalloonMsg> findByFromOrderByIdDesc(Long from, Pageable pageable);

    @Query(value="{'$and': [{'from':?0}, {'sid':?1}]}", fields="{'_id': 1}")
    List<BalloonMsg> findIdsByFromAndSid(Long from, String sid);
}
注意:
MongoRepository<BalloonMsg, Long>
BalloonMsg为集合映射实体类,Long为主键id类型

基本操作

支持 save,insert,find,delete

查询扩展支持原生查询语句

    类似sql:select id from xxx where `from` = from and sid = sid
    @Query(value="{'$and': [{'from':?0}, {'sid':?1}]}", fields="{'_id': 1}")
    List<BalloonMsg> findIdsByFromAndSid(Long from, String sid);

支持jpa规范方法

    类似sql:select * from balloon_msg where `from` = from order by id desc limit x, x
    List<BalloonMsg> findByFromOrderByIdDesc(Long from, Pageable pageable);

自定义扩展

public interface CustomizedBalloonMsgMapper {
    int incRevNumById(long id, int num);

    int incReplyNumById(long id, int num);
}

public class CustomizedBalloonMsgMapperImpl implements CustomizedBalloonMsgMapper {

    @Resource
    private MongoTemplate mongoTemplate;

    @Override
    public int incRevNumById(long id, int num) {
        Query query = Query.query(Criteria.where("_id").is(id));
        Update update = new Update();
        update.inc("revNum");
        UpdateResult res = mongoTemplate.updateFirst(query, update, BalloonMsg.class);
        return (int) res.getModifiedCount();
    }

    @Override
    public int incReplyNumById(long id, int num) {
        Query query = Query.query(Criteria.where("_id").is(id));
        Update update = new Update();
        update.inc("replyNum");
        return (int) mongoTemplate.updateFirst(query, update, BalloonMsg.class).getModifiedCount();
    }
}

此时的 BalloonMsgMapper 接口包含基本curd和自定义扩展的方法集

@Repository
public interface BalloonMsgMapper extends MongoRepository<BalloonMsg, Long>, CustomizedBalloonMsgMapper{
...
}

注意:

  1. 通用操作使用 Spring Data Repositories 其 MongoRepository
  2. 自定义扩展使用 MongoTemplate,通过自定义扩展接口接入
原网站

版权声明
本文为[white_while]所创,转载请带上原文链接,感谢
https://blog.csdn.net/white_while/article/details/125627592