赞
踩
1、引入 mongdb 依赖
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-mongodb</artifactId>
- </dependency>
2、配置mongdb链接
- server:
- port: 10000
-
- # mongdb
- spring:
- data:
- mongodb:
- #认证的库
- # authentication-database: admin
- #操作的库
- database: kou
- # username: user
- # password: 123456
- host: localhost
- port: 27017
3、 创建实体
- package com.kou.test.entity;
-
- import lombok.Data;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.mongodb.core.mapping.Document;
-
- import java.util.Date;
-
- @Data
- @Document(collection = "user")
- public class User {
-
- @Id
- private Long userId;
-
- private String userName;
-
- private String nickName;
-
- private Integer age;
-
- private Date createTime;
-
- }
-
-
-
- package com.kou.test.entity;
-
- import lombok.Data;
- import org.springframework.data.mongodb.core.mapping.Document;
-
- import java.io.Serializable;
- import java.util.Date;
-
- @Data
- @Document(collection = "score")
- public class Score implements Serializable {
-
- private String id;
-
- private Long userId;
-
- private Integer score;
-
- private Date createTime;
-
- private Date updateTime;
-
- }

4、执行CRUD
- package com.kou.test.service.impl;
-
- import com.kou.test.entity.User;
- import com.kou.test.service.IUserService;
- import com.mongodb.client.result.DeleteResult;
- import com.mongodb.client.result.UpdateResult;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.aggregation.*;
- 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.stereotype.Service;
-
- import java.util.Collections;
- import java.util.Date;
- import java.util.List;
- import java.util.Map;
-
- @Service
- public class UserServiceImpl implements IUserService {
-
- @Autowired
- private MongoTemplate mongoTemplate;
-
- @Override
- public User add(User user) {
- user.setCreateTime(new Date());
- return mongoTemplate.insert(user);
- }
-
- @Override
- public int update(User user) {
- Query query = new Query(Criteria.where("userId").is(user.getUserId()));
-
- Update update = new Update();
- if (StringUtils.isNotBlank(user.getNickName())) {
- update.set("nickName", user.getNickName());
- }
- if (null != user.getAge()) {
- update.set("age", user.getAge());
- }
- UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
- return 1;
- }
-
- @Override
- public User query(Long userId) {
- Query query = new Query();
- query.addCriteria(Criteria.where("userId").is(userId));
- return mongoTemplate.findOne(query, User.class);
- }
-
- @Override
- public List<User> list() {
- return mongoTemplate.findAll(User.class);
- }
-
- @Override
- public int delete(Long userId) {
- Query query = new Query();
- query.addCriteria(Criteria.where("userId").is(userId));
- DeleteResult result = mongoTemplate.remove(query, User.class);
- return 0;
- }
-
- /**
- * 分页查询
- *
- * @param page
- * @param pageSize
- * @param nickName
- * @return
- */
- @Override
- public List<User> page(Integer page, Integer pageSize, String nickName) {
- Query query = new Query();
- // 分页
- query.limit(pageSize);
- query.skip((page - 1) * pageSize);
- List<User> userList = mongoTemplate.find(query, User.class);
- return userList;
- }
-
- /**
- * 通过id查询
- *
- * @param userId
- * @return
- */
- @Override
- public Map info(Long userId) {
- LookupOperation lookupOperation = LookupOperation.newLookup()
- //从表名
- .from("score")
- //主表关联字段
- .localField("_id")
- //从表关联字段
- .foreignField("userId")
- //查询结果名
- .as("userInfo");
-
- // 查询主表
- Criteria criteriaMain = Criteria.where("_id").is(userId);
- AggregationOperation matchMain = Aggregation.match(criteriaMain);
-
- // 选择需要的字段
- ProjectionOperation project = Aggregation.project("_id", "userName", "userInfo.id", "userInfo.score");
-
- // Aggregation.unwind() 将字迹数组转为单一对象
- Aggregation aggregation = Aggregation.newAggregation(lookupOperation, matchMain, Aggregation.unwind("userInfo"));
- List<Map> result = mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
- if (null != result && result.size() > 0) {
- return result.get(0);
- }
- return Collections.EMPTY_MAP;
- }
-
- /**
- * 条件查询
- *
- * @param score 积分
- * @param age 年龄
- * @return 结果
- */
- @Override
- public List<Map> queryList(Integer score, Integer age) {
-
- LookupOperation lookupOperation = LookupOperation.newLookup()
- .from("score")
- .localField("_id")
- .foreignField("userId")
- .as("score");
-
- // 添加查询条件
- Criteria criteria = new Criteria();
- if (null != score) {
- criteria.and("score.score").gte(score);
- }
- if (null != age) {
- criteria.and("age").gte(age);
- }
-
- MatchOperation match = Aggregation.match(criteria);
-
- Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match, Aggregation.unwind("score"));
-
- return mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。