1 SpringData MongoDB简介
MongoDB是一个跨平台的,面向文档的数据库,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的一种格式,因此可以存储比较复杂的数据类型。
MongoDB主要由文档(document)、集合(collection)、数据库(database)三部分组成
- 文档(document)就相当于关系数据库中的一行记录
- 多个文档组成一个集合(collection),相当于关系数据库的表
- 多个集合组织在一起,就是数据库(database),一个 MongoDB 实例支持多个数据库
SpringData MongoDB是SpringData技术封装了mongodb-driver技术之后的产物,它可以用更加简单的方式操作MongoDB。
2 MongoDB环境搭建
2.1 解压
上传文件到服务器,然后将其解压到/usr/local下
[root@localhost src]# tar -zxvf mongodb-linux-x86_64-rhel70-4.0.10.tgz -C /usr/local/
2.2 创建需要的目录
进入软件的安装目录下,创建数据存储和日志存储目录
[root@localhost src]# cd /usr/local/mongodb-linux-x86_64-rhel70-4.0.10/ [root@localhost mongodb-linux-x86_64-rhel70-4.0.10]# mkdir data [root@localhost mongodb-linux-x86_64-rhel70-4.0.10]# touch log
2.3 创建配置文件
进入bin目录,创建mongodb的配置文件mongo.conf ,文件内容如下:
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-4.0.10/data logpath=/usr/local/mongodb-linux-x86_64-rhel70-4.0.10/log bind_ip=0.0.0.0 port=27017 fork=true
2.4 启动mongodb
使用./mongod -f mongo.conf 启动服务,见到类似如下提示,证明启动成功
[root@localhost bin]# ./mongod -f mongo.conf about to fork child process, waiting until server is ready for connections. forked process: 25781 child process started successfully, parent exiting
3 SpringData MongoDB入门案例
3.1目标
通过SpringData技术向Mongodb数据库存储一条数据
3.2 创建工程,引入坐标
<dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.1.8.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.6.RELEASE</version> </dependency> </dependencies>
3.3 创建配置文件
<?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:p="http://www.springframework.org/schema/p" 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.xsd"> <!--包扫描--> <mongo:repositories base-package="net.csdn"></mongo:repositories> <!-- spring连接mongodb数据库的配置 --> <mongo:mongo-client host="192.168.106.128" port="27017" id="mongo"> <mongo:client-options write-concern="SAFE" /> </mongo:mongo-client> <mongo:db-factory id="mongoDbFactory" dbname="oldlu" mongo-ref="mongo" /> <!--mongoTemplate--> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> </beans>
3.4 创建实体类
@Document(collection = "article")//通过collection参数指定当前实体类对应的文档 public class Article { @Id private Integer id; @Field("title")//给映射存储到 mongodb 的字段取别名 private String title; private String Content; //省略set get toString方法 }
3.5 自定义dao接口
//自定义dao接口继承MongoRepository<实体类型,主键类型> public interface ArticleDao extends MongoRepository<Article, Integer> {}
3.6 测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ArticleDaoTest { @Autowired private ArticleDao articleDao; //保存 @Test public void testSave() { Article article = new Article(); article.setId(1); article.setTitle("程序员"); article.setContent("程序员很低调"); article.setHits(100); articleDao.save(article); } }
4 SpringData MongoDB实现CRUD操作
4.1 增删改
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ArticleDaoTest { @Autowired private ArticleDao articleDao; //保存 @Test public void testSave() { Article article = new Article(); article.setId(1); article.setTitle("程序员"); article.setContent("程序员很低调"); article.setHits(100); articleDao.save(article); } //修改 @Test public void testUpdate() { Article article = new Article(); article.setId(1); article.setTitle("程序员1"); article.setContent("程序员很低调1"); article.setHits(1000); articleDao.save(article); } //删除 @Test public void testDelete() { articleDao.deleteById(1); } }
4.2 简单查询
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ArticleDaoTest { @Autowired private ArticleDao articleDao; //查询所有 @Test public void testFindAll() { List<Article> articles = articleDao.findAll(); for (Article article : articles) { System.out.println(article); } } //根据主键查询 @Test public void testFindByid() { Optional<Article> optional = articleDao.findById(1); System.out.println(optional.get()); } //排序分页查询 @Test public void testFindAllWithPage() { //按照hits倒序排列 Sort sort = Sort.by(Sort.Order.desc("hits")); //从0开始查询,查10条 Pageable pageable = PageRequest.of(0,10,sort); Page<Article> page = articleDao.findAll(pageable); for (Article article : page.getContent()) { System.out.println(article); } } }
4.3 命名规则查询
定义接口
public interface ArticleDao extends MongoRepository<Article, Integer> { //根据标题查询 List<Article> findByTitleLike(String title); //根据标题或内容查询 List<Article> findByHitsGreaterThan(Integer hits); }
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ArticleDaoTest { @Autowired private ArticleDao articleDao; @Test public void testFindByTitle() { Iterable<Article> articles = articleDao.findByTitleLike("程序员"); for (Article article : articles) { System.out.println(article); } } @Test public void testFindByHitsGreaterThan() { Iterable<Article> articles = articleDao.findByHitsGreaterThan(110); for (Article article : articles) { System.out.println(article); } } }