`
zhanshi258
  • 浏览: 48368 次
  • 性别: 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集成实例mybatis,mail,mysql,mongodb,cassandra,schedul.zip

    本压缩包文件包含了Spring Boot与其他流行技术栈集成的实例,涵盖了mybatis、mail、mysql、mongodb、cassandra以及schedul(调度器)的具体实现,为开发者提供了一个全面的集成学习案例。 MyBatis 是一个流行的持久...

    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 #### 模块...

    基于SpringBoot的MongoDB数据库整合案例设计源码

    本文将详细介绍SpringBoot与MongoDB整合的案例设计源码,包括该项目所涉及的技术点、源码结构、以及如何利用这些资源进行开发学习。 首先,项目中所包含的65个XML配置文件主要用于定义应用的上下文、数据源配置、...

    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 Boot的Java全栈开发案例库设计源码

    NoSQL应用案例则涉及到非关系型数据库的集成,如MongoDB、Redis等,为开发者在面对大数据或需要灵活数据模型的应用场景时提供了参考。 安全管理作为企业级应用中非常重要的一环,案例库中对Spring Security和Apache...

    spring入门到精通完整版源码

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

    Spring Data实战

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

Global site tag (gtag.js) - Google Analytics