`
zhanshi258
  • 浏览: 48168 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mongodb与spring集成案例

 
阅读更多

假设现在我们已经安装好了mongodb,并且都熟悉spring项目的配置。

 

spring 配置文件 spring-context.xml

与mongodb不相关的配置都已经去掉

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"
	xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd 
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
                        http://www.springframework.org/schema/task 
                        http://www.springframework.org/schema/task/spring-task-3.0.xsd
                        http://www.springframework.org/schema/data/mongo 
						http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
						http://www.springframework.org/schema/mvc 
        				http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        ">
	<context:property-placeholder
		ignore-resource-not-found="false" location="classpath:mongodb.properties" />
	
	<bean class="com.qing.utils.PropertyUtils">
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreResourceNotFound" value="false" />
		<property name="locations">
			<list>
				<value>classpath*:/mongodb.properties</value>
			</list>
		</property>
	</bean>

    <context:component-scan base-package="com.qing"/>
    <mongo:mongo id="mongo" replica-set="${mongo.host}">
        <mongo:options connections-per-host="${mongo.connectionsPerHost}"
             threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
             connect-timeout="${mongo.connectTimeout}"
             max-wait-time="${mongo.maxWaitTime}"
             auto-connect-retry="${mongo.autoConnectRetry}"
             socket-keep-alive="${mongo.socketKeepAlive}"
             socket-timeout="${mongo.socketTimeout}"
             slave-ok="${mongo.slaveOk}"
             write-number="1"
             write-timeout="0"
             write-fsync="true"/>     
    </mongo:mongo>  
    
	<mongo:db-factory id="mongoDbFactory" dbname="${mongo.database}" mongo-ref="mongo" username="${mongo.username}" password="${mongo.password}"/>
		
	<mongo:mapping-converter id="mongoConverter" base-package="com.qing.core.entity">
		<mongo:custom-converters base-package="com.qing.core.entity" />
	</mongo:mapping-converter>

	<bean id="nearest" class="com.mongodb.TaggableReadPreference.NearestReadPreference"/>
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongoDbFactory" />
		<constructor-arg ref="mongoConverter" />
		<property name="writeConcern" value="SAFE" />
		<property name="readPreference" ref="nearest" />
	</bean>
	<mongo:repositories base-package="com.qing.core.repository" /> 

</beans>

 

mongodb.properties的属性配置文件

#The number of connections per host agreed, when the connection pool is used up, will be blocked, the default value is 10 --int
mongo.connectionsPerHost=10
#multiplier for connectionsPerHost for # of threads that can block if connectionsPerHost is 10, and threadsAllowedToBlockForConnectionMultiplier is 5, then 50 threads can block more than that and an exception will be throw --int
mongo.threadsAllowedToBlockForConnectionMultiplier=5
#Blocked thread connections from the connection pool gets the longest waiting time (MS) --int
mongo.maxWaitTime=0
#To establish a socket connection when timeout (MS), the default value is 0 (infinite)
mongo.connectTimeout=0
#Whether the control system in the event of a connection error retry,Defaults to false
mongo.autoConnectRetry=false
#This controls whether or not to have socket keep alive turned on (SO_KEEPALIVE). defaults to false --boolean
mongo.socketKeepAlive=false
#Socket timeout; this value will be passed to the Socket.setSoTimeout (int). The default value is 0 (infinite) --int
mongo.socketTimeout=0
#Indicates whether the promised to drive from the secondary nodes or the slave node reads the data, defaults to false
mongo.slaveOk=false

mongo.database=mongodbtest
mongo.host=192.168.23.4:27017
mongo.username=mongo
mongo.password=123456

 

编写实体类、Controller、Service、Dao相关 

实体类

import java.math.BigInteger;

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document(collection = "student")
public class Student extends BaseDocument<BigInteger> implements Comparable<Student> {

	private static final long serialVersionUID = -3711325228602088792L;
	
	@Field("userId")
	private String userId;
	
	@Field("userName")
	private String userName;
	
	@Field("password")
	private String password;
	
	@Field("mobilPhone")
	private String mobilPhone;
	
	/////////get/set方法省略///////
	@Override
	public int compareTo(Student o) {
		if (o == null)
			return -1;
		return this.userId.compareTo(o.getUserId());
	}
}

 

import java.io.Serializable;

import org.springframework.data.annotation.Id;

/**
 * <p> 抽象实体基类,提供统一的ID,和相关的基本功能方法
 */
public abstract class BaseDocument<ID extends Serializable> extends AbstractDocument<ID> {

	@Id
	private ID id;
	@Override
    public ID getId() {
        return id;
    }

    @Override
    public void setId(ID id) {
        this.id = id;
    }

}

 

import java.io.Serializable;

/**
 * 抽象实体基类
 */
public abstract class AbstractDocument<ID extends Serializable> implements Serializable  {

	/**
	 * Returns the identifier of the document.
	 * 
	 * @return the id
	 */
	public abstract ID getId();
	/**
     * Sets the id of the document.
     *
     * @param id the id to set
     */
	public abstract void setId(final ID id);

	/* 
	 * (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {

		if (this == obj) {
			return true;
		}

		if (this.getId() == null || obj == null || !(this.getClass().equals(obj.getClass()))) {
			return false;
		}

		AbstractDocument<?> that = (AbstractDocument<?>) obj;

		return this.getId().equals(that.getId());
	}

	/* 
	 * (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return this.getId() == null ? 0 : this.getId().hashCode();
	}
}

 

 

dao

import java.math.BigInteger;
import java.util.List;

import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;

import com.qing.core.entity.Student;

public interface StudentRepository extends CrudRepository<Student, BigInteger>{
	
	List<Student> findByUserIdAndUserName(String userId,String userName);

	@Query("{userId:?0,$or:[{userName:{ $regex:?1}},{password:{ $regex:?1}}]}")
	List<Student> findStudentByUserIdAndUserName(String userId, String userName);
}

 

service

@Service
public class StudentService {

	@Autowired
	private StudentRepository studentRepository;
	
	@Autowired
	MongoTemplate mongoTemplate;

	public Message create(Student stu) {
		this.studentRepository.save(stu);
		Message message = new Message();
		message.setData(stu);
		return message;
	}

	public Message delete(Student stu) {
//		this.studentRepository.delete(stu);
		mongoTemplate.remove(new Query(Criteria.where("userName").is(stu.getUserName())), Student.class);
		Message message = new Message();
		message.setData(stu);
		return message;
	}
	
	public void update(Student stu) {
		Update update = new Update();
		update.set("password", stu.getPassword());
		mongoTemplate.updateFirst(new Query(Criteria.where("userId").is(stu.getUserId())), update, Student.class);
	}
	
	public List<Student> findByUserIdAndUserName(Student stu) {
		
		String userId = stu.getUserId();
		String userName = stu.getUserName();
		List<Student> studentList = studentRepository.findByUserIdAndUserName(userId, userName);
		
		return studentList;
	}
	
	public List<Student> findStudents(Student stu) {
		
		String userId = stu.getUserId();
		String userName = stu.getUserName();
		
		List<Student> studentList = studentRepository.findStudentByUserIdAndUserName(userId, userName);
		return studentList;
	}
}

 

controller

这个类就自己发挥写吧,就是springmvc的controller调用service层。

 

 

 

分享到:
评论

相关推荐

    Spring-Mongodb例子

    这个例子对于初学者来说,是一个很好的起点,能够帮助理解Spring与MongoDB的集成原理和实践方法。 总的来说,Spring和MongoDB的结合提供了一个高效、灵活且易于使用的数据存储解决方案,适用于那些需要处理大量非...

    spring 实践学习案例

    spring 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、shiro等 #### 软件架构 基于Java 1.8 #### Spring 版本 - 5.0.8.RELEASE #### 模块说明 - ...

    spring boot 简单案例下载

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建出生产级别的基于 Spring 的应用程序。 在“spring boot 简单案例下载”中,我们可以推测这是一个包含了...

    spring boot 实践学习案例,与其它组件整合

    spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块...

    Spring-data-mongo应用

    本案例主要介绍了如何在 Spring 4.1.3.RELEASE 版本下集成 MongoDB,并通过 Spring Data MongoDB 1.8.0 进行简单的数据操作。 #### 二、环境准备 - **Spring版本**:4.1.3.RELEASE - **Spring Data MongoDB版本**...

    学生信息系统spring mvc,maven,mongodb

    通过这个项目,开发者可以深入理解Spring MVC、Maven和MongoDB的集成使用,掌握Web应用的开发流程,以及非关系型数据库在实际项目中的应用。同时,该项目也是学习Java Web开发和分布式数据存储的一个宝贵实践案例。

    Vue+axios+Spring Boot+mongoDB 基于Mongo图片存储和基于GridFS的文件存储.zip

    Spring Boot的集成特性使得与各种数据库(如MongoDB)的交互变得简单。 MongoDB是一个非关系型数据库(NoSQL),以其灵活性、高可扩展性和高性能而受到青睐。在图片存储方面,MongoDB的GridFS功能特别适合。GridFS...

    demo-onetomany-nosql:与OneToMany关系中的MongoDB的Spring Data演示项目

    在这个项目中,开发者可能通过Spring Data MongoDB库来简化与MongoDB的集成,实现对数据的CRUD操作。 描述中提到,这是一个关于一对多关系的NoSQL演示项目,意味着该项目将展示如何在不使用传统的关系型数据库的...

    物资管理系统后端(spring boot+graphql+Mongodb实现).zip

    在整合Spring Boot、GraphQL和MongoDB的过程中,通常会采用Spring Data MongoDB来实现Spring Boot与MongoDB的集成,使得操作数据库变得更加便捷。同时,可以利用Spring Boot的WebFlux模块结合GraphQL的参考实现如...

    ZhiZu Shop基于spring mongodb实现的小型网上商场系统.zip

    总结来说,ZhiZu Shop是一个集成了Spring、MongoDB等现代技术的网上商城系统,它展现了如何利用这些工具实现高效、可扩展的电商应用。对于学习和理解Web系统开发的开发者,这是一个很好的案例,可以从中学到如何构建...

    Spring boot 测试案例

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地构建一个独立的、生产级别的基于 Spring 的应用程序。 在这个测试案例中,我们将探讨如何使用 Spring Boot ...

    spring bootweb案例

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、RabbitMQ、Quartz 等,让开发者可以快速地创建出稳定且生产级别的基于 Spring 的服务。 在"spring bootweb案例"中,我们关注的是如何使用 Spring Boot 构建 Web...

    spring boot实践学习案例,是spring boot初学者及核心技术巩固的最佳实践 .zip

    』Spring Boot 2快速教程WebFlux集成Thymeleaf(五)Spring Boot 2快速教程WebFlux集成Mongodb(四)Spring Boot 2快速教程WebFlux Restful CRUD实践(三)Spring Boot 2快速教程WebFlux快速入门(二)Spring Boot 2...

    Spring Boot 2.x基础教程:使用MongoDB(csdn)————程序.pdf

    在Spring Boot 2.x中集成MongoDB,首先需要在`pom.xml`文件中添加`spring-boot-starter-data-mongodb`依赖,该依赖基于`spring-data-mongodb`,使得Spring Boot可以轻松地与MongoDB进行交互。以下是如何在`pom.xml`...

    spring入门到精通完整版源码

    本资源中的"spring入门到精通完整版源码",可以帮助开发者通过实际案例学习Spring的使用。通过阅读和分析源码,可以更深入地理解Spring框架的内部工作原理,提升解决问题的能力。 总结,"spring入门到精通完整版...

    Spring Data实战

    对于NoSQL数据库,如MongoDB,Spring Data MongoDB提供了与文档数据库交互的接口和操作工具。类似地,Spring Data Neo4j则为图数据库提供了支持。 7. **搜索引擎集成** Spring Data Elasticsearch使得集成Elastic...

    spring-boot2.0全新教程实例20例.zip

    - [spring-boot-redis](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-redis):Spring Boot 集成 Redis 示例 - [spring-boot-jpa]...

    springboot实例

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者可以快速地创建出生产级别的、基于 Spring 的 Java 应用。 在 "springboot 简单登陆实例" 中,我们关注的核心知识点是 ...

    springboot_springdataJPA_queryDSL_mongodb_demo:源码主要用于学习SpringBoot + MongoDB项目构建,内容包括使用Spring Data JPA持久化数据,使用QueryDSL态动条件投影查询数据,以及使用swagger2组件调试RESTful API

    本项目中的源码,详细展示了这些技术的集成与使用,从初始化Spring Boot项目,到配置MongoDB数据源,再到定义Repository接口并使用QueryDSL编写查询,最后到启用Swagger2进行API文档化,每一步都清晰可见。...

Global site tag (gtag.js) - Google Analytics