mongodb java spring_Spring集成MongoDB-程序员宅基地

技术标签: mongodb java spring  

开篇

Spring提供了对非关系数据库的集成,Spring的spring-data包提供了对mongoDB和redis集成的工具包。此篇博客介绍一下Spring和MongoDB的集成。

导入工具包

需要的工具包有spring的jar包、spring-common的jar包以及spring-data的mongoDB的jar包。其中,spring的jar包有aop、asm、aspects、beans、context、core、expression、jdbc、transaction等。spring-common的jar包有commons-beanutils、commons-codec、commons-collections、commons-io、commons-lang、commons-logging、commons-pool等。spring-data的mongoDB的jar包有spring-data-commons-aspects、spring-data-commons-core、spring-data-document-core、spring-data-mongodb、spring-data-mongodb-cross-store、spring-data-mongodb-log4j等。另外还有一个是mongo.jar

工具包截图

3be93c901b984b6f12144adfc3e028e2.png

配置文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mongo="http://www.springframework.org/schema/data/mongo"

xsi:schemaLocation="http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/data/mongo

http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

代码编写

实体类:

public class Person implements Serializable {

/**

*

*/

private static final long serialVersionUID = 3617931430808763429L;

private String id;

private String name;

private int age;

public Person() {

super();

}

public Person(String id, String name, int age) {

super();

this.id = id;

this.name = name;

this.age = age;

}

/**

*@return the id

*/

public String getId() {

return id;

}

/**

*@param id the id to set

*/

public void setId(String id) {

this.id = id;

}

/**

*@return the name

*/

public String getName() {

return name;

}

/**

*@param name the name to set

*/

public void setName(String name) {

this.name = name;

}

/**

*@return the age

*/

public int getAge() {

return age;

}

/**

*@param age the age to set

*/

public void setAge(int age) {

this.age = age;

}

/**

*

*@param name

*@param age

*/

public Person(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String toString() {

return "Person[id="+id+",name="+name+",age="+age+"]";

}

}

DAO层接口:

public interface AbstractRepository {

public void insert(Person person);

public Person findOne(String id);

public List findAll();

public List findByRegex(String regex);

public void removeOne(String id);

public void removeAll();

public void findAndModify(String id);

}

DAO层接口实现:

public class PersonRepository implements AbstractRepository {

private MongoTemplate mongoTemplate;

@Override

public List findAll() {

return getMongoTemplate().find(new Query(), Person.class);

}

@Override

public void findAndModify(String id) {

getMongoTemplate().updateFirst(new Query(Criteria.where("id").is(id)), new Update().inc("age", 3));

}

@Override

public List findByRegex(String regex) {

Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

Criteria criteria = new Criteria("name").regex(pattern.toString());

return getMongoTemplate().find(new Query(criteria), Person.class);

}

@Override

public Person findOne(String id) {

return getMongoTemplate().findOne(new Query(Criteria.where("id").is(id)), Person.class);

}

@Override

public void insert(Person person) {

getMongoTemplate().insert(person);

}

@Override

public void removeAll() {

List list = this.findAll();

if(list != null){

for(Person person : list){

getMongoTemplate().remove(person);

}

}

}

@Override

public void removeOne(String id) {

Criteria criteria = Criteria.where("id").in(id);

if(criteria == null){

Query query = new Query(criteria);

if(query != null && getMongoTemplate().findOne(query, Person.class) != null)

getMongoTemplate().remove(getMongoTemplate().findOne(query, Person.class));

}

}

/**

* @return the mongoTemplate

*/

public MongoTemplate getMongoTemplate() {

return mongoTemplate;

}

/**

* @param mongoTemplate the mongoTemplate to set

*/

public void setMongoTemplate(MongoTemplate mongoTemplate) {

this.mongoTemplate = mongoTemplate;

}

}

测试程序:

public class MongoTest {

private static Log log = LogFactory.getLog(MongoTest.class.getName());

private AbstractRepository pr=null;

public void init(){

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

pr= (PersonRepository)ctx.getBean("personRepository");

}

public void insert(){

Person p=new Person("cuiran",27);

pr.insert(p);

}

public void findOne(){

String id="50c83cb552c2ceb0463177d6";

Person p= pr.findOne(id);

log.debug(p);

}

public void listAll(){

List list=pr.findAll();

for (Person p:list){

log.debug(p.toString());

}

}

public void start(){

init();

//insert();

//listAll();

findOne();

}

public static void main(String[] args) {

MongoTest t=new MongoTest();

t.start();

}

}

结束

通过Spring集成MongoDB的底层代码封装,项目中用到非关系型数据MongoDB存储就变得容易很多。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_26824299/article/details/114325338

智能推荐

Spring Cloud(六)配置中心(Spring Cloud Config)_本地运行config-prod.properties-程序员宅基地

文章浏览阅读241次。一、简介在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config 。Spring Cloud Config就是我们通常意义上的配置中心。Spring Cloud Config-把应用原本放在本地文件的配置抽取出来放在中心服务器,本质是配置信息从本地迁移到云端。..._本地运行config-prod.properties

Linux常见基本指令合集及其效果展示_linux 展示-程序员宅基地

文章浏览阅读268次,点赞2次,收藏6次。首先先问大家一个问题:在磁盘上建一个空文件,这个文件会占据磁盘的储存空间吗?实践出真知,我们发现新建一个文本文档,它的大小是0kB,这时有小伙伴就会认为既然它的大小是0KB,那么它当然也就不会占用磁盘空间咯。然而真的是这样吗?我们打开这个文件的属性来一探究竟:我们发现系统不仅记录了这个空文件的大小,同时还有它的文件名、文件类型、所在位置、创建时间等信息,难道这些信息不要占用系统空间吗,当然要!一个空文件同样会占用系统空间文件 = 文件内容 + 属性路径的本质就是这颗多叉树的搜索路径。_linux 展示

iTOP-3588开发板快速启动手册Windows安装串口终端调试串口常见问题(二)_windows 调试串口-程序员宅基地

文章浏览阅读140次,点赞10次,收藏3次。问题二:非旺玖原装PL2303,请联系供货商或PL2303TA不支持WINDOWS11及后续版本问题。进设备管理器,找到端口COM,有问题会提示“非旺玖原装的PL2303,请联系您的供货商”。更多内容可以B站搜索迅为RK3588开发板;2.4.2 驱动问题。_windows 调试串口

python怎么输出_Python如何输出整数-程序员宅基地

文章浏览阅读7.7k次。Python输出整数的方法:先使用str()函数将数字转换成字符串赋值给变量i,再用“if i.count('.') == 0”语句判断字符串中是否没有小数点,如果是则输出这个字符串,这样输出的数字就都是整数了示例代码如下:x = [23.5, 45.6, 987, 698, 123, 654]for i in x:i = str(i)if i.count('.') == 0:print(I)执行..._python的print整数

js中好用的方法(复制剪贴板、时间转换、大数字单位转换)_js 粘贴板时间-程序员宅基地

文章浏览阅读146次。js中好用的工具方法复制内容到手机剪贴板:/** * 拷贝数据到剪贴板 */ public static CopyToClipBoard(str){ let copyDom = document.createElement("input"); // 获得需要复制的内容 copyDom.setAttribute("value",str); //不需要让他displaynone // copyDom._js 粘贴板时间

FTP上传下载工具类_vsftp下载工具类-程序员宅基地

文章浏览阅读419次。记录一篇将图片等静态资源上传至vsftpd服务器的工具类package com.zhouym.baiwei.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.i..._vsftp下载工具类

随便推点

对话框未进入PreTranslateMessage函数-程序员宅基地

文章浏览阅读235次。定义了两个对话框CDlgParent和CDlgChild,CDlgChild已设置Child属性,CDlgParent未重定义PreTranslateMessage函数,在CDlgChild的PreTranslateMessage函数中设断点,未运用原因: 对话框均在动态库中定义,且为使用共享MFC DLL的规则DLL,此方式无法响应PreTranslateMessage消息,但应用程序可不使..._mfc pretranslatemessage 不进入

UI自动化测试之5大常见问题(建议收藏)(1),2024年最新从青铜到王者的路线-程序员宅基地

文章浏览阅读722次,点赞10次,收藏19次。1)UFT即原来的QTP与ST合并而来,由HP公司开发,是一个企业级的商业自动化测试工具,提供了强大易用的录制回放功能,同时兼容对象识别模式与图像识别模式,支持B/S和C/S两种架构的软件测试;一款基于python语言编写的自动化测试框架工具,具备良好的扩展性,支持关键字驱动,支持多种类型的客户端和接口,可进行分布式测试;3)Selenium自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

Linux创建操作网桥的两种命令及持久化_bridge命令-程序员宅基地

文章浏览阅读1.4w次,点赞4次,收藏48次。1.基础介绍1.1 简述1.2 网桥配置命令及安装(CentOS系统)2. brctl和bridge命令建桥2.1 brctl命令说明及范式2.2 brctl场景使用2.3 bridge命令及范式3.ip命令建桥3.1 ip命令建桥说明4.桥的持久化1.基础介绍1.1 简述什么是网桥  网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。它是Linux上用来做TCP/IP二层协议交._bridge命令

css3大全-程序员宅基地

文章浏览阅读153次。孔子曰:学而不思则罔,思而不学则殆。废话不多说,直接上。浅谈兼容css相较于js html来说,兼容性问题最不是事,CSS在最初设计时,就有一个协议:如果不能识别选择器属性,那么就默认不处理,不报错。这个也是CSS得以发展的非常重要的特征。下面是各个浏览器私有前缀:IE -ms-Chrome -webkit-Firefox -moz-Safari -webkit-..._css 文字后仰

Linux学习笔记 01 - Linux概况_linux 从哪个版本开始支持lvm-程序员宅基地

文章浏览阅读760次。一、操作系统的发展历程操作系统是用来=控制和管理系统资源、方便用户使用计算机的程序的集合,是人机交互的接口。大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。1. 服务器专用的 UNIX 操作系统UNIX 操作系统与1969年由美国贝尔实验室肯·汤普森(K.Thompson)和丹尼斯·麦卡利斯泰尔·里奇(D.M.Ritchie)开发完成,是真正意义上的多用户多任务操作系统。UNIX的商业版版本主要包括SUN公司(现被Oracle公司收购)的Solaris、IBM_linux 从哪个版本开始支持lvm

PS CS6安装过程中安装程序遇到错误(37).请重新启动计算机,然后重试._安装过程中安装程序遇到错误(37)。请重新启动计算机,然后重试。-程序员宅基地

文章浏览阅读2.6w次,点赞15次,收藏7次。解决方法:首先查看自己电脑是32位还是64位,计算机(我的电脑)——》右键“属性”——》系统“系统类型”。然后在自己的Photoshop安装目录找到下面对应的两个文件夹,删除即可。如果删除时提示没有系统管理员权限,可以下载一个超级文件粉碎机或者使用360文件粉碎强制删除 caps 和 oobe 文件夹。(32位系统需删除)C:\Program Files \Common Files\Ado..._安装过程中安装程序遇到错误(37)。请重新启动计算机,然后重试。

推荐文章

热门文章

相关标签