【java】0基础Java小白写spring boot+mongo的过程和注意事项

两个月,从0开始学习Java,两个星期的think in Java 入门书阅读,一个星期学习spring和spring boot原理,一个星期配合项目上手写spring boot+mongo的接口,感谢自己坐在架构旁边,喝鸡汤,重学习,不甘咸鱼。

这篇博客记录一下自己写spring boot的过程,以及使用过的包和方法,记录一下自己从入门到放弃的Java。

第一步:写entity模块

  1. model文件,要继承Serializable,使model可序列化,同时要加一个 long型的 serialVersionUID。
  2. 要用@Id,指定自增id
  3. 要用@document指定collection集合
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  4. 重写toString方法,指定输出格式,使用到StringBuilder 类进行构造,使用append的方法添加元素。
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  5. 如果有嵌套子文档,字段可以设置为List类型,引用那个子文档即可
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  6. @ApiModelProperty()对字段进行注释,用于方法,字段; 表示对model属性的说明或者数据操作更改。
  7. model创建时,要写getter/setter方法,可以不写构造方法。

第二步:写service的接口文件,指定接口方法 <增删改查>

  1. 接口类使用public interface className{…} 创建
    【java】0基础Java小白写spring boot+mongo的过程和注意事项

第三步:写service的实现类,实现接口的<增删改查>方法

  1. 模板:
    ① springboot+mongo,要用mongo的MongoTemplate操作数据库,用模板去调用curd,不用mybatis
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  2. 保存:
    ① mongoTemplate.save() 新增的方法,区别于insert,save可以覆盖写,insert时,新增相同的时会冲突报错
    ② 在新增时,可以设置创建时间。record.setCreateTime(new Date());
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  3. 更新:
    ① mongoTemplate.updateFirst(query, update, class);新增查询到的第一个,update新增全部
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  4. 删除:
    ① mongoTemplate.remove(model),删除记录
    ② 根据id删除对象,可以两部操作,第一步查询出对象,第二步调用template.remove(model)删除对象
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
  5. 查询:
    ①. 查询一条:mongoTemplate.findOne(query, class) ;如果用findById 会有栈内存溢出错误。
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
    ② 查询全部findAll(query, class)
    ③ query 是查询条件,class是对应model的类,也就是要查询的集合
    ④ 查询数量:Long count = mogoTemplate.count(query, class), count.intValue();
    【java】0基础Java小白写spring boot+mongo的过程和注意事项
    ⑤ 分页查询:

    1> 创建query,可以使用BasicQuery创建,指定需要返回的字段;
    2> 设置查询条件 query.addCriteria(criteria)
    3>设置排序,Sort sort = new Sort(Sort.Direction.DESC, “updateTime”)
    4>设置分页 Pageable pageable = PageRequest.of(page, pageSize, sort)
    5>返回分页后的model列表 LIst list = mongoTemplate.find(query.with(pageable), class)
    6> 分页器:分页器用来整合分页后的数据统计,需要自己继承Serilizaable写,基础信息是开始页码,查询条数,全部数量,分页返回的数据list。
    7> new BasicDBObject("$slice", new int[] {1,5}) 简单的分页处理,返回5条数据。用在指定返回字段的Document上
    8>查询条件可以抽离出来为一个单独的方法进行统一设置,无需在每个方法里手动添加。例如setFindCriterias( query, model, params)【java】0基础Java小白写spring boot+mongo的过程和注意事项

  6. 子文档的分页查询
    ① 子文档的分页查询逻辑和一级文档查询差不多,都要建立一个分页器,将分页查询结果加到分页器上。但是难点在于子文档的分页查询,这里使用到mongo的聚合操作
    ② 子文档的分页查询步骤:

    1> 创建对象的查询条件的列表 List commonOperations = new ArrayList<>();
    2> math匹配:根据id指定要查询的主文档 MathOperation math = Aggreation.math(Criteria.where(“id”.is(id)));
    3> project匹配:需要指定返回哪些字段,注意有时要排除_id字段 ProjectionOperation project = Aggregation.project(“newsComments”).andExclude("_id")
    4> 拆分内嵌文档:将内嵌二级文档拆分出来转化为一级文档 UnwindOperation unwind = Aggregation.unwind(“newsComments”)
    5> 内嵌文档分页:二级文档转为一级后,可以进行分页 SkipOperation skip = Aggregation.skip( page )
    6> 内嵌文档排序:如果内嵌文档有时间等可排序项,可以排序 LimitOperation limit = Aggregation.limit(pageSize)
    7> 管道条件准备好后,都要注入到查询条件中 commonOperation.add( math等 )
    8> 创建并注册管道对象:Aggregation aggregation = Aggregation.newAggregation(commonOperations)
    9> 管道对象操作集合:AggregationResults<输出类型DBObject> reminds = mongoTemplate.aggregate(管道aggregation, 集合类class, 输出类型DBObject.class)
    10> 输出分页后的子文档:List result = reminds.getMappedResults();
    11> 返回结果 return results;
    【java】0基础Java小白写spring boot+mongo的过程和注意事项

第四步:写control控制器

  1. 启动时需要把客户端和服务两个app全部启动,才能swagger测试通
  2. 需要用@RestController注册控制器
    【java】0基础Java小白写spring boot+mongo的过程和注意事项