参考文档:mall整合Mongodb实现文档操作

1. Spring Data Mongodb

Spring Data Mongodb 是 Spring 提供的一种以 Spring Data 风格来操作数据存储的方式,它可以避免编写大量的样板代码。

1.1 常用注解

  • @Document:标示映射到Mongodb文档上的领域对象
  • @Id:标示某个域为ID域
  • @Indexed:标示某个字段为Mongodb的索引字段

1.2 Sping Data 方式的数据操作

继承 MongoRepository 接口可以获得常用的数据操作方法

可以使用衍生查询

在接口中直接指定查询方法名称便可查询,无需进行实现,以下为根据会员id按时间倒序获取浏览记录的例子。

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
package com.rs.mall.tiny.nosql.mongodb.repository; /** * 会员商品浏览历史Repository */ public interface MemberReadHistoryRepository extends MongoRepository<MemberReadHistory, String> { /** * 根据会员id按时间倒序获取浏览记录 * * @param memberId 会员id */ List<MemberReadHistory> findByMemberIdOrderByCreateTimeDesc(Long memberId); }

在idea中直接会提示对应字段

使用@Query注解可以用Mongodb的JSON查询语句进行查询

java
  • 01
  • 02
@Query("{ 'memberId' : ?0 }") List<MemberReadHistory> findByMemberId(Long memberId);

2. springboot 整合 Mongodb

2.1 添加依赖

xml
  • 01
  • 02
  • 03
  • 04
  • 05
<!---mongodb相关依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>

2.2 配置文件

yaml
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
spring: data: mongodb: host: localhost port: 27017 database: mall-port

2.3 bean 对象

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
package com.rs.mall.tiny.nosql.mongodb.document; /** * 用户商品浏览历史记录 */ @Data public class MemberReadHistory { @Id private String id; @Indexed private Long memberId; private String memberNickname; private String memberIcon; @Indexed private Long productId; private String productName; private String productPic; private String productSubTitle; private String productPrice; private Date createTime; }

2.4 Repository接口

继承MongoRepository接口,这样就拥有了一些基本的Mongodb数据操作方法,同时定义了一个衍生查询方法。

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
package com.rs.mall.tiny.nosql.mongodb.repository; /** * 会员商品浏览历史Repository */ public interface MemberReadHistoryRepository extends MongoRepository<MemberReadHistory, String> { /** * 根据会员id按时间倒序获取浏览记录 * * @param memberId 会员id */ List<MemberReadHistory> findByMemberIdOrderByCreateTimeDesc(Long memberId); }

2.5 Service 接口

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
package com.rs.mall.tiny.service; /** * 会员浏览记录管理Service */ public interface MemberReadHistoryService { /** * 生成浏览记录 */ int create(MemberReadHistory memberReadHistory); /** * 批量删除浏览记录 */ int delete(List<String> ids); /** * 获取用户浏览历史记录 */ List<MemberReadHistory> list(Long memberId); }

2.6 Service 实现类

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
package com.rs.mall.tiny.service.impl; /** * 会员浏览记录管理Service实现类 */ @Service public class MemberReadHistoryServiceImpl implements MemberReadHistoryService { @Autowired private MemberReadHistoryRepository memberReadHistoryRepository; @Override public int create(MemberReadHistory memberReadHistory) { memberReadHistory.setId(null); memberReadHistory.setCreateTime(new Date()); memberReadHistoryRepository.save(memberReadHistory); return 1; } @Override public int delete(List<String> ids) { List<MemberReadHistory> deleteList = new ArrayList<>(); for (String id : ids) { MemberReadHistory memberReadHistory = new MemberReadHistory(); memberReadHistory.setId(id); deleteList.add(memberReadHistory); } memberReadHistoryRepository.deleteAll(deleteList); return ids.size(); } @Override public List<MemberReadHistory> list(Long memberId) { return memberReadHistoryRepository.findByMemberIdOrderByCreateTimeDesc(memberId); } }

2.7 Controller

java
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
package com.rs.mall.tiny.controller; /** * 会员商品浏览记录管理Controller */ @RestController @Api(tags = "MemberReadHistoryController", description = "会员商品浏览记录管理") @RequestMapping("/member/readHistory") public class MemberReadHistoryController { @Autowired private MemberReadHistoryService memberReadHistoryService; @ApiOperation("创建浏览记录") @RequestMapping(value = "/create", method = RequestMethod.POST) public CommonResult create(@RequestBody MemberReadHistory memberReadHistory) { int count = memberReadHistoryService.create(memberReadHistory); if (count > 0) { return CommonResult.success(count); } else { return CommonResult.failed(); } } @ApiOperation("删除浏览记录") @RequestMapping(value = "/delete", method = RequestMethod.POST) public CommonResult delete(@RequestParam("ids") List<String> ids) { int count = memberReadHistoryService.delete(ids); if (count > 0) { return CommonResult.success(count); } else { return CommonResult.failed(); } } @ApiOperation("展示浏览记录") @RequestMapping(value = "/list", method = RequestMethod.GET) @ResponseBody public CommonResult<List<MemberReadHistory>> list(Long memberId) { List<MemberReadHistory> memberReadHistoryList = memberReadHistoryService.list(memberId); return CommonResult.success(memberReadHistoryList); } }