第4章 MongoDB整合Spring
(黎明你好原创作品,转载请注明)
4.1 创建maven项目
4.1.1 repositories
创建maven项目,其中repositories使用spring的maven库:
<repositories> <repository> <id>central</id> <name>Maven Central</name> <url>http://repo1.maven.org/maven2/</url> </repository> <repository> <id>spring-release</id> <name>Spring Maven Release Repository</name> <url>http://repo.springsource.org/libs-release</url> </repository> <repository> <id>atlassian-m2-repository</id> <url>https://m2proxy.atlassian.com/repository/public</url> </repository> </repositories>
4.1.2 Dependencies
使用到的jar包:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <type>jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> <type>jar</type> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.10.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-cross-store</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-log4j</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies>
4.2 添加spring配置文件
spring的配置文件applicationContext.xml
<?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:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="liming.mongodb.example" /> <mongo:mongo host="127.0.0.1" port="27017" /> <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 --> <mongo:db-factory dbname="student" mongo-ref="mongo" /> <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 --> <mongo:mapping-converter base-package="climing.mongodb.example.data.model" /> <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 --> <mongo:repositories base-package="liming.mongodb.example.data.impl" /> <context:annotation-config /> </beans>
4.3 增删改查
Userl实现的增删改查:
4.3.1UserEntity
package liming.mongodb.example.data.model; import java.util.Date; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "user") public class UserEntity { @Id private String id; private NameEntity name; private int age; private int works; private Date birth; private String password; private String regionName; private String[] special; public String getId() { return id; } public void setId(String id) { this.id = id; } public NameEntity getName() { return name; } public void setName(NameEntity name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWorks() { return works; } public void setWorks(int works) { this.works = works; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRegionName() { return regionName; } public void setRegionName(String regionName) { this.regionName = regionName; } public String[] getSpecial() { return special; } public void setSpecial(String[] special) { this.special = special; } }
4.3.2 NameEntity
package liming.mongodb.example.data.model; public class NameEntity { private String username; private String nickname; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } }
4.3.3 UserDao
package liming.mongodb.example.data; import java.util.List; import liming.mongodb.example.data.model.UserEntity; import org.springframework.transaction.annotation.Transactional; @Transactional public interface UserDao { public abstract void _test(); public abstract void createCollection(); public abstract List<UserEntity> findList(int skip, int limit); public abstract List<UserEntity> findListByAge(int age); public abstract UserEntity findOne(String id); public abstract UserEntity findOneByUsername(String username); public abstract void insert(UserEntity entity); public abstract void update(UserEntity entity); }
4.3.4 UserDaoImpl
package liming.mongodb.example.data.impl; import java.util.List; import java.util.Set; import liming.mongodb.example.data.UserDao; import liming.mongodb.example.data.model.UserEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; 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.mongodb.DB; @Repository public class UserDaoImpl implements UserDao { public static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class); @Autowired private MongoTemplate mongoTemplate; @Override public void _test() { Set<String> colls = this.mongoTemplate.getCollectionNames(); for (String coll : colls) { logger.info("CollectionName=" + coll); } DB db = this.mongoTemplate.getDb(); logger.info("db=" + db.toString()); } @Override public void createCollection() { if (!this.mongoTemplate.collectionExists(UserEntity.class)) { this.mongoTemplate.createCollection(UserEntity.class); } } @Override public List<UserEntity> findList(int skip, int limit) { Query query = new Query(); query.with(new Sort(new Order(Direction.ASC, "_id"))); query.skip(skip).limit(limit); return this.mongoTemplate.find(query, UserEntity.class); } @Override public List<UserEntity> findListByAge(int age) { Query query = new Query(); query.addCriteria(new Criteria("age").is(age)); return this.mongoTemplate.find(query, UserEntity.class); } @Override public UserEntity findOne(String id) { Query query = new Query(); query.addCriteria(new Criteria("_id").is(id)); return this.mongoTemplate.findOne(query, UserEntity.class); } @Override public UserEntity findOneByUsername(String username) { Query query = new Query(); query.addCriteria(new Criteria("name.username").is(username)); return this.mongoTemplate.findOne(query, UserEntity.class); } @Override public void insert(UserEntity entity) { this.mongoTemplate.insert(entity); } @Override public void update(UserEntity entity) { Query query = new Query(); query.addCriteria(new Criteria("_id").is(entity.getId())); Update update = new Update(); update.set("age", entity.getAge()); update.set("password", entity.getPassword()); update.set("regionName", entity.getRegionName()); update.set("special", entity.getSpecial()); update.set("works", entity.getWorks()); update.set("name", entity.getName()); this.mongoTemplate.updateFirst(query, update, UserEntity.class); } }
4.3.5 测试代码
package liming.mongodb.example; import java.util.Arrays; import java.util.Date; import java.util.List; import liming.mongodb.example.data.UserDao; import liming.mongodb.example.data.impl.UserDaoImpl; import liming.mongodb.example.data.model.UserEntity; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationSpring { public static void main(String[] args) { System.out.println("Bootstrapping HelloMongo"); ConfigurableApplicationContext context = null; context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = context.getBean(UserDaoImpl.class); userDao._test(); UserEntity entity1 = new UserEntity(); entity1.setId("5"); entity1.setAge(1); entity1.setBirth(new Date()); entity1.setPassword("asdfasdf"); entity1.setRegionName("北京"); entity1.setWorks(1); userDao.insert(entity1); userDao.update(entity1); userDao.createCollection(); List<UserEntity> list = userDao.findList(0, 10); for (UserEntity e : list) { System.out.println("all - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); } list = userDao.findListByAge(1); for (UserEntity e : list) { System.out.println("age=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); } UserEntity e = userDao.findOne("1"); System.out.println("id=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); e = userDao.findOneByUsername("limingnihao"); System.out.println("username=limingnihao - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); System.out.println("DONE!"); } }
相关推荐
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...
学习笔记::books:JAVA,Spring,SpringMVC,SpringBoot,Mybatis,Vue,MySQL,MongoDB,Radis,Docker,Nginx,......笔记
这是本人多年积累的学习笔记,记录详细、内容宽广,对新手高手都会有所帮助 作者: 冯万里(Holemar) 邮箱: daillow@gmail.com QQ: 292598441 MSN: daillo@live.cn 更新日期: 2011-12-21 文档都可以用文本编辑器...
Java架构面试笔试专题资料及经验(含答案)和学习笔记: ActiveMQ消息中间件面试专题.pdf Dubbo面试专题及答案(下).pdf Dubbo面试及答案(上).pdf java后端面试题答案.pdf Java基础面试题.pdf java多线程并发编程...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
学习这个项目的时候,对其思路做了笔记,我这里按照自己的写法,与其略有不同, 但是基本思路都是一样的。 注意: 本机环境是jdk8,tomcat8,mysql5.7.13,windows下,IDE是IntelliJ IDEA, mongodb(mongodb-win32-...
webflux流演示该项目是对Spring 5 WebFlux和mongoDB的React性应用程序的试用。 为了学习,我写了一篇有关React式编程的概述文章,内容涵盖了基本概念,新版本工具以及使用演示。 这篇文章可以视为我的阅读笔记,并已...
Java 的学习笔记和整理的知识点,包含Java语言基础、Java服务端方向的框架、设计模式、计算机网络、算法、Java 虚拟机和数据库等多个方面的内容。想了解前端的内容参考,Android相关的内容参考。 目录结构 语言基础...
Java架构面试专题及架构学习笔记 Dubbo服务框架面试专题及答案整理文档 BAT面试常问80题 23种设计模式知识要点整理 面试必备—API接口安全 面试必备—服务器推送技术 面试必备—匠心独运手写MyBatis框架 面试必备—...
一站式SpringBoot for NoSQL开发教程学习手册。 含SpringBoot2.0 +: 雷迪斯 高速缓存 MongoDB 弹性搜索 卡桑德拉 CouchBase 索尔 Neo4j 宝石火 共9种常用NoSQL数据库操作,工具类,演示代码。用于整理日常常用...
MongoDB学习笔记.docx mybatis原理.docx MyBatis面试专题.docx MyBatis面试专题及答案.pdf Mybatis面试题(含答案).pdf MySQL性能优化的21个最佳实践.pdf mysql面试专题.docx MySQL面试题(含答案).pdf Netty面试...
学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 常用设计模式 单例模式 , 工厂模式 , 装饰者模式 , 代理模式 ... Java基础...
2020年Java基础教程(全资料+笔记+源码): 2020年javaweb全套教程: Mysql: Oracle: JDBC: C3P0: 前端技术 HTML、CSS、Javascript: jQuery-: Ajax: Vue: 微信小程序: 动态网页: 编程强化 JVM优化: 数据...
java学生宿舍管理系统 ...微服务学习笔记系列 Go微服务实战系列 搜索引擎elasticsearch 操作系统 数据结构和算法 leetcode 树 架构模式 消息中间件 rabbitmq rocketmq 网络编程 设计模式 目录自动生成器
1 NoSQL 1.1 需求 高并发读写 海量数据的高效率存储与访问 高可扩展性和高可用性 1.2 产品分类 分类 ...CouchDB, MongoDb Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Valu
leetcode上升的温度 勤学强记,温故知新 好记性不如烂笔头 数据库核心技术总结 JAVA 集合底层原理和源码解析 ...学习笔记 Python 学习总计 Resis MongoDB Kafka Rabbit Git 使用笔记整理 设计模式 杂记
notes多数文章来自网上优秀文章摘要整合,学习时自己记录的笔记 依赖环境: JDK版本:1.8; Mysql版本:8.0.16; Kafka版本:2.2.1; RabbitMQ版本:3.7.15; Redis版本:5.0.4; Maven版本:3.6.1 ZooKeeper...