---------------------------------------------------------------------------------------------
[版权申明:本文系作者原创,转载请注明出处]
文章出处:http://blog.csdn.net/sdksdk0/article/details/64948728
作者:朱培 ID:sdksdk0
--------------------------------------------------------------------------------------------
MongoDB是一个NoSql数据库,MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其存储结构为BSON。
下面是通过一个Spring+SpringMVC+MongoDB的案例来说明mongodb的基本使用。mongdb的基本结构这里就不再重复说明。从入门到应用。源码地址:https://github.com/sdksdk0/mongodbDemo
一、入门
MongoDB的提供了一个面向文档存储, 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
首先从入门程序开始。
1、新建maven工程,导入mongodb的驱动包。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.2</version>
</dependency>
2、连接数据库
MongoClient mongoClient=new MongoClient("127.0.0.1",27017);
//连接到数据库
MongoDatabase mongoDatabase=mongoClient.getDatabase("tf");
System.out.println("连接成功");
3、创建集合并获取集合
mongoDatabase.createCollection("test");
//System.out.println("创建集合成功");
//获取集合
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
4、插入文档
//插入文档
public static void createDocument(MongoCollection<Document> collection){
Document document=new Document("title","MongoDB")
.append("description", "database")
.append("likes", 100)
.append("by", "Fly");
ArrayList<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文档插入成功");
}
5、查询文档
//查询文档
public static void findIterable(MongoCollection<Document> collection){
FindIterable<Document> findIterable=collection.find();
MongoCursor<Document> iterator = findIterable.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
6、更新文档
//更新文档
public static void updateMany(MongoCollection<Document> collection){
collection.updateMany(Filters.eq("likes",100),new Document("$set",new Document("likes",200)));
//查询文档
findIterable(collection);
}
7、删除文档
//删除
public static void deleteMany(MongoCollection<Document> collection){
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq("likes",200));
//删除所有符合条件的文档
collection.deleteMany(Filters.eq("likes",200));
//查询文档
findIterable(collection);
}
二、应用
这个案例的主要内容是,我们在spring中配置mongodb的数据源,如何可以添加修改删除和条件查询,因为是面向对象的,所以这里可以使用的是HQL语句来操作mongodb数据库。
这里主要用的是用户userId 、name、age来演示。
1、web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="sys" version="2.5">
<description>mongo</description>
<display-name>service Java Deploy V1.0.0</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>mongo</param-value>
</context-param>
<!-- 加载log4j -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/sysconfig/properties/log4j.properties
</param-value>
</context-param>
<!-- 加载xml config -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:syscoreConfig/*/*.xml
classpath:sysconfig/spring/*.xml
classpath:sysconfig/springmvc/*.xml
</param-value>
</context-param>
<!-- 编码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 定义LOG4J监听器 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 监听 自动装配ApplicationContext的配置信息 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring mvc -->
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>ContextConfigLocation</param-name>
<param-value>classpath:sysconfig/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、spring-mvc.xml配置
扫描注解:
<!-- com.rui.pro.dao.*.impl/**,com.rui.pro.service.*.impl/**,com.rui.pro.controller/** -->
<context:component-scan base-package=" **.dao.***,**.service.***,**.controller.**"/>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="order" value="0" />
</bean>
<bean id="messageAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<bean id="exceptionMessageAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<property name="messageConverters">
<list>
<!-- Support JSON MappingJacksonHttpMessageConverter -->
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
3、db.xml配置
这里配置的是mongodb数据库的属性以及一些包
<mongo:mongo id="mongo" host="localhost" port="27017">
<mongo:options connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000" max-wait-time="1500" auto-connect-retry="true"
socket-keep-alive="true" socket-timeout="1500" slave-ok="true"
write-number="1" write-timeout="0" write-fsync="true" />
</mongo:mongo>
<mongo:db-factory id="mongoDbFactory" dbname="tf"
mongo-ref="mongo" />
<mongo:mapping-converter base-package="cn.tf.mongodb.demo.bean"
id="mongoConverter" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mongoConverter" />
</bean>
<mongo:repositories base-package="cn.tf.mongodb.demo.bean" />
<bean id="userDao" class="cn.tf.mongodb.demo.dao.impl.UserDaoImpl">
<property name="mongoTemplate" ref="mongoTemplate" />
</bean>
<!-- 扫描实现 -->
<context:annotation-config />
4、bean类
private String id;
private Integer userId;
private String name;
private Integer age;
设置其setter/getter方法、构造方法、toString等。
5、Dao层
public interface UserDao {
List<User> get();
User getOne(Integer id);
public void findAndModify(Integer id, Integer age);
void insert(User u);
void removeOne(Integer id);
//修改多条
void update(User criteriaUser, User user) ;
// 按条件查询, 分页 <br>
public List<User> find(User criteriaUser, int skip, int limit);
//根据条件查询出来后 再去修改
public User findAndModify(User criteriaUser, User updateUser);
//查询出来后 删除
public User findAndRemove(User criteriaUser) ;
//统计
public long count(User criteriaUser);
//条件查询
public Query getQuery(User criteriaUser);
}
6、实现类
@Repository
public class UserDaoImpl implements UserDao {
private MongoOperations mongoTemplate;
// @Autowired
// @Qualifier("mongoTemplate")
public void setMongoTemplate(MongoOperations mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
public List<User> get() {
List<User> user = mongoTemplate.findAll(User.class);
return user;
}
public User getOne(Integer id) {
User user = mongoTemplate.findOne(new Query(Criteria.where("userId")
.is(id)), User.class);
return user;
}
public void findAndModify(Integer id, Integer age) {
/*mongoTemplate.updateFirst(new Query(Criteria.where("userId").is(id)),
new Update().inc("age", age), User.class);*/
mongoTemplate.updateFirst(new Query(Criteria.where("userId").is(id)),
new Update().set("age", age), User.class);
}
public void insert(User u) {
mongoTemplate.insert(u);
}
public void removeOne(Integer id) {
Criteria criteria = Criteria.where("userId").in(id);
if (criteria != null) {
Query query = new Query(criteria);
if (query != null
&& mongoTemplate.findOne(query, User.class) != null)
mongoTemplate.remove(mongoTemplate.findOne(query, User.class));
}
}
/**
* 修改多条 <br>
* ------------------------------<br>
*
* @param criteriaUser
* @param user
*/
public void update(User criteriaUser, User user) {
Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
;
Query query = new Query(criteria);
Update update = Update.update("name", user.getName()).set("age",
user.getAge());
mongoTemplate.updateMulti(query, update, User.class);
}
/**
* 按条件查询, 分页 <br>
* ------------------------------<br>
*
* @param criteriaUser
* @param skip
* @param limit
* @return
*/
public List<User> find(User criteriaUser, int skip, int limit) {
Query query = getQuery(criteriaUser);
query.skip(skip);
query.limit(limit);
return mongoTemplate.find(query, User.class);
}
/**
* 根据条件查询出来后 再去修改 <br>
* ------------------------------<br>
*
* @param criteriaUser
* 查询条件
* @param updateUser
* 修改的值对象
* @return
*/
public User findAndModify(User criteriaUser, User updateUser) {
Query query = getQuery(criteriaUser);
Update update = Update.update("age", updateUser.getAge()).set("name",
updateUser.getName());
return mongoTemplate.findAndModify(query, update, User.class);
}
/**
* 查询出来后 删除 <br>
* ------------------------------<br>
*
* @param criteriaUser
* @return
*/
public User findAndRemove(User criteriaUser) {
Query query = getQuery(criteriaUser);
return mongoTemplate.findAndRemove(query, User.class);
}
/**
* count <br>
* ------------------------------<br>
*
* @param criteriaUser
* @return
*/
public long count(User criteriaUser) {
Query query = getQuery(criteriaUser);
return mongoTemplate.count(query, User.class);
}
/**
* 条件查询
*
* @param criteriaUser
* @return
*/
public Query getQuery(User criteriaUser) {
if (criteriaUser == null) {
criteriaUser = new User();
}
Query query = new Query();
if (criteriaUser.getId() != null) {
Criteria criteria = Criteria.where("userId").is(criteriaUser.getId());
query.addCriteria(criteria);
}
if (criteriaUser.getAge() > 0) {
Criteria criteria = Criteria.where("age").gt(criteriaUser.getAge());
query.addCriteria(criteria);
}
if (criteriaUser.getName() != null) {
Criteria criteria = Criteria.where("name").regex(
"^" + criteriaUser.getName());
query.addCriteria(criteria);
}
return query;
}
}
添加成功之后我们可以使用db.user.find()命令查看。
7、controller层
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@RequestMapping("test")
@ResponseBody
public String test(){
return "hello";
}
@ResponseBody
@RequestMapping("get")
public List<User> get(HttpServletRequest request,HttpServletResponse response){
List<User> user=userDao.get();
System.out.println(this.getClass().getName()+":"+user);
return user;
}
总之,mongodb是一个非常不错的数据库。通过与spring的整合,可以很方便的使用这个Nosql数据库。
源码地址:https://github.com/sdksdk0/mongodbDemo
Spring+SpringMVC+MongoDB案例相关推荐
- Spring整合Mongodb,Maven的依赖,Spring配置,MongoDB的公共操作类,使用SpringMVC的Controller进行测试并返回结果的案例
在和Spring和MongoDB进行整合的时候需要如下三个jar,分别是: spring-data-commons spring-data-mongodb mongo-java-driver 下面讲解 ...
- spring+springmvc+maven+mongodb
1.前言 最近项目开发使用到了spring+springmvc+maven+mongodb,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...
- Spring+SpringMVC +MyBatis整合配置文件案例66666
Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...
- 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)
1.前言 最近项目开发使用到了spring+springmvc+maven+MongoDB,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...
- javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate
1.hibernate译为"越冬",指的是给java程序员带来春天,因为java程序员无需再关心各种sql了: 2.hibernate通过java类生成数据库表,通过操作对象来映射 ...
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...
- 关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等
关于CKEditor的一个配置整理,改文件为config.js: 文件内容如下: /** * @license Copyright (c) 2003-2016, CKSource - Fred ...
- spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...
概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...
- springmvc+mongodb+maven 项目搭建配置
操作步骤我就不再细化了 项目能运行,测试过了,先上配置,另一篇文章上代码,点击下载源码 项目结构 pom.xml <project xmlns="http://maven.apache ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...
最新文章
- java 哈希算法_选择Java密码算法第1部分-哈希
- 领扣(LeetCode)对称二叉树 个人题解
- this.getstate_Java线程类Thread.State getState()方法(带示例)
- Django-分页、中间件和请求的声明周期
- 金蝶K3系统BOM批量导入操作指南
- win10 下mysql环境变量配置
- Opencv实战四 图像匹配
- 第六课:计算两数的GCF(最大公因数)(基于AndroidStudio3.2)
- 大型服装集团BI决策系统的分析主题模块
- rate-limiting
- 脑机接口的过去、现在与未来
- php百度大脑,百度大脑和图灵机器人制作一个简单的自动聊天机器人【PHP代码】...
- shared_ptr的引用计数原理
- slam十四讲-ch6-非线性优化(包含手写高斯牛顿、使用g2o库、使用ceres库三种方法的源码详细注释)
- 中科大ctf题型总结,来自小白的感慨
- SVN使用教程(详细)
- https://www.52pojie.cn/thread-688820-1-1.html
- 爱码物联SaaS|一物一码技术如何助力线下流量营销?
- 纯CSS3动画实现小球绕轨道旋转效果
- USB存储设备(如:U盘,移动硬盘)
热门文章
- 服务器硬盘开机吱吱响,硬盘吱吱响怎么回事?电脑硬盘响动原因和解决方法
- ps渐隐在哪里以及ps渐隐知识点总结
- Java 标识符的命名规则与规范
- Ubuntu 部署Django, Wagtail,Postgres, Nginx, Gunicorn,Supervisor
- 在知网查重复率时你入坑了吗?
- office 2010 word文档,插入复选框,方框打勾(打对号)的方法
- English语法_形容词-排序
- 了解速率控制模式Rate Control Mode-CBR,VBR,CRF(x264、x265、vpx)
- 手机php文件怎么改后辍,手机百度云盘修改文件后缀名的方法
- java case 字符_Java中Switch Case使用字符串