springBoot整合MongoDB(单机)
依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置
application.properties:
#spring.data.mongodb.uri=mongodb://localhost:27017/sea
spring.data.mongodb.uri=mongodb://用户名:密码@localhost:27017/sea 或者:
#spring.data.mongodb.uri=mongodb://userName:password@ip:port/database
spring.data.mongodb.database=ELSA_MILESTONE_SUBSCRIPTION_SERVICE
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
#spring.data.mongodb.username=mongodb
#spring.data.mongodb.password=root
方式:1: 使用
@Autowired
private MongoTemplate mongoTemplate;
eg:
package com.icil.dao; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
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.Repository; import com.icil.domain.UserEntity;
@Repository
public class UserDAO { @Autowired
private MongoTemplate mongoTemplate; /**
* 创建对象
* @param user
*/
public void saveUser(UserEntity user) {
mongoTemplate.save(user);
} /**
* 根据用户名查询对象
* @param userName
* @return
*/
public UserEntity findUserByUserName(String userName) {
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
return user;
} /**
* 更新对象
* @param user
*/
public void updateUser(UserEntity user) {
Query query=new Query(Criteria.where("id").is(user.getId()));
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
//更新查询返回结果集的第一条
mongoTemplate.updateFirst(query,update,UserEntity.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,UserEntity.class);
} /**
* 删除对象
* @param id
*/
public void deleteUserById(Long id) {
Query query=new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,UserEntity.class);
} }
高频使用: 多条件 动态 (类似mybtis)
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void testNameQuery() throws Exception {
//collectionName -->
Criteria criteria1 = Criteria.where("collName").is("lzd_work_table_collection");
Criteria criteria2 = Criteria.where("status").is("RCS"); Query query = new Query();
query.addCriteria(criteria1);
query.addCriteria(criteria2);
System.err.println(query);
// Query query=new Query(Criteria.where("status").is("RSC"));
// public <T> List<T> find(Query query, Class<T> entityClass, String collectionName) {
List<MilestoneInfo> find = mongoTemplate.find(query,MilestoneInfo.class);
System.err.println("#######################");
System.err.println(find);
}
方式2:extends MongoRepository
eg:
UserRepository.java
package com.sea.test.repository; import java.util.List; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query; import com.sea.test.pojo.User; public interface UserRepository extends MongoRepository<User, Long> { /**
* Like(模糊查询)
* {"username" : name} ( name as regex)
* */
List<User> findByUsernameLike(String username); List<User> findByUsernameLike(String username,PageRequest pageable); /**
* Like(模糊查询)
* {"username" : name}
* */
List<User> findByUsername(String username); /**
* GreaterThan(大于)
* {"age" : {"$gt" : age}}
* */
List<User> findByAgeGreaterThan(int age);
/**
* LessThan(小于)
* {"age" : {"$lt" : age}}
* */
List<User> findByAgeLessThan(int age);
/**
* Between(在...之间)
* {{"age" : {"$gt" : from, "$lt" : to}}
* */
List<User> findByAgeBetween(int from, int to); /**
* IsNotNull, NotNull(是否非空)
* {"username" : {"$ne" : null}}
* */
List<User> findByUsernameNotNull(); /**
* IsNull, Null(是否为空)
* {"username" : null}
* */
List<User> findByUsernameNull(); /**
* Not(不包含)
* {"username" : {"$ne" : name}}
* */
List<User> findByUsernameNot(String name); /**
* Near(查询地理位置相近的)
* {"location" : {"$near" : [x,y]}}
* */
// findByLocationNear(Point point) /**
* Within(在地理位置范围内的)
* {"location" : {"$within" : {"$center" : [ [x, y], distance]}}}
* */
//findByLocationWithin(Circle circle) /**
* Within(在地理位置范围内的)
* {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
* */
// findByLocationWithin(Box box) /**
*
* @param name
* @param age
* @param page
* @return
*/
@Query("{\"username\":{\"$regex\":?0}, \"age\": ?1}")
Page<User> findByNameAndAgeRange(String name,int age,Pageable page); /**
*
* @param name
* @param ageFrom
* @param ageTo
* @param page
* @return
*/
@Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}")
Page<User> findByNameAndAgeRange2(String name,int ageFrom,int ageTo,Pageable page); @Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}",fields="{\"username\" : 1, \"age\" : 1}")
Page<User> findByNameAndAgeRange3(String name,int ageFrom,int ageTo,Pageable page); }
User:
package com.sea.test.pojo; import java.io.Serializable; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.stereotype.Component; import com.sea.test.annotation.AutoIncKey;
import com.sea.test.annotation.aop.SeaAnnotion; import lombok.Getter;
import lombok.Setter;
import lombok.ToString; @Getter
@Setter
@ToString
@Component
@Document(collection = "My_user") //指定别名
public class User implements Serializable { private static final long serialVersionUID = -1L; @Id //指定id
@AutoIncKey //自定义注解
private Long id; @Field("userName") //指定匹配关系
private String username; private Integer age; @SeaAnnotion()
public Long getId() {
return id;
} @SeaAnnotion()
public void setId(Long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public User() {
super();
} public User(Long id, String username) {
super();
this.id = id;
this.username = username;
} public User(Long id, String username, Integer age) {
super();
this.id = id;
this.username = username;
this.age = age;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", age=" + age + "]";
} }
controller : 参考https://blog.csdn.net/weixin_39214304/article/details/84791953
package com.sea.test.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController; import com.sea.test.pojo.User;
import com.sea.test.repository.UserRepository; @RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository; @ResponseStatus(HttpStatus.CREATED)
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public User createUser(@RequestBody User user) {
return userRepository.save(user);
} /**
* 根据id查询
*
* @param id
* @return
*/
@GetMapping(value = "/{id}")
public User readUserById(@PathVariable("id") Long id) {
return userRepository.findById(id).get();
} @GetMapping(value = "/all")
public List<User> getAll() {
System.err.println("### enter into getall emthod ###");
return userRepository.findAll();
} /**
* 根据一个或者多个属性查询单个结果
*
* @param name
* @return
*/
@GetMapping(value = "/name/{name}")
public User readUserByName(@PathVariable("name") String name) {
User user = new User();
user.setUsername(name);
ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("age", "createTime");
Example<User> example = Example.of(user, matcher);
return userRepository.findOne(example).get();
} /**
* 根据一个或者多个属性分页查询
*
* @param pageNumber
* @param pageSize
* @return
*/
@GetMapping(value = "/page/{pageNumber}/pagesize/{pageSize}/name/{name}")
public Page<User> readUsersByPage(@PathVariable("pageNumber") int pageNumber,
@PathVariable("pageSize") int pageSize, @PathVariable("name") String name) {
User user = new User();
user.setUsername(name);
ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("age", "createTime");
Example<User> example = Example.of(user, matcher);
if (pageNumber < ) {
pageNumber = ;
} else if (pageSize == ) {
pageSize = ;
}
PageRequest pageable = PageRequest.of(pageNumber - , pageSize);
return userRepository.findAll(example, pageable);
} /**
* 根据用户年龄升序排序
*
* @return
*/
@GetMapping("/get")
public List<User> readUsers() {
System.err.println("### enter into readUser emthod ###");
Order order = new Order(Direction.ASC, "age");
Sort sort = Sort.by(order);
return userRepository.findAll(sort);
} /**
* 模糊查询带分页
*
* @param pageNumber
* @param pageSize
* @param keyWords
* @return
*/
@GetMapping(value = "/page/{pageNumber}/pagesize/{pageSize}/keyword/{keyWords}")
public Page<User> readUsersByKeywords(@PathVariable("pageNumber") int pageNumber,
@PathVariable("pageSize") int pageSize, @PathVariable("keyWords") String keyWords) {
if (keyWords == null) {
keyWords = "";
}
if (pageNumber < ) {
pageNumber = ;
} else if (pageSize == ) {
pageSize = ;
}
PageRequest pageable = PageRequest.of(pageNumber - , pageSize);
return (Page<User>) userRepository.findByUsernameLike(keyWords, pageable);
} @ResponseStatus(HttpStatus.OK)
@DeleteMapping(value = "/{id}")
public void removeUser(@PathVariable("id") Long id) {
userRepository.deleteById(id);
}
}
springBoot整合MongoDB(单机)的更多相关文章
- java操作mongodb & springboot整合mongodb
简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...
- SpringBoot整合mongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...
- SpringBoot 整合mongoDB并自定义连接池
SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...
- Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...
- 8、SpringBoot整合之SpringBoot整合MongoDB
SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...
- Springboot 整合 MongoDB
Springboot 整合 MongoDB 这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增. Mongo DB 的基本介绍和增删改查的用法可以参考我 ...
- SpringBoot 整合 MongoDB 实战介绍
一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...
- SpringBoot非官方教程 | 第八篇:springboot整合mongodb
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...
- 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式
1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...
- Springboot整合MongoDB(Eclipse版本)
IDEA版本其实也差不多的,大同小异 简单Demo地址: https://blog.csdn.net/shirukai/article/details/82152243 Springboot项目整合M ...
随机推荐
- 发现TCP的一种错误----客户端连接失败(10055错误号)
在客户端连接7302TCP端口失败,关闭程序,启动sockettool也不行,出现错误号为 10055(发现队列满了或者空间不足).通过查网上资料,发现有两个方法:设置 ( TcpTimedWaitD ...
- Espresso 开源了
Google Testing Blog上发布了一篇博客,Espresso 开源了 http://googletesting.blogspot.com/2013/10/espresso-for-andr ...
- Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional
@Transactional标识类或方法,使方法被执行时使用事务方式执行,这里只讨论PROXY方法增强方法.使用@EnableTransactionManagement,默认model=AdviceM ...
- computer、methods和watch
在vue中处理复杂的逻辑的时候,我们经常使用计算属性computer,但是很多时候,我们会把计算属性.方法和侦听器搞混淆,在 w3cplus.com的一篇文章中是这样总结这三者的. methods:正 ...
- Apollo分布式配置中心部署以及使用
一.简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场 ...
- 服务链路追踪(Spring Cloud Sleuth)
sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的 ...
- 从知名外企到创业公司做CTO是一种怎样的体验?
这是我近期接受51CTO记者李玲玲采访的一篇文章,分享给大家. 作者:李玲玲来源:51cto.com|2016-12-30 15:47 http://cio.51cto.com/art/201612/ ...
- go语言学习--语法糖
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有 ...
- 01-TCP/IP概述
TCP/IP 概述 允许不同厂家的各种型号的计算机使用不同操作系统互相进行通信 真正的开放系统 "全球互联网"或"因特网"的基础 2.分层 网络协议通常分不同层 ...
- vue 非父子组件传值
/*非父子组件传值 1.新建一个js文件 然后引入vue 实例化vue 最后暴露这个实例 2.在要广播的地方引入刚才定义的实例 3.通过 VueEmit.$emit('名称','数据') 4.在接收收 ...