SpringBoot开发案例之整合mongoDB

(github: https://github.com/cc-man/SpringCloud_Learn/tree/master/servicehi/mongodb-server)

一、说明

  • Spring boot是对Spring的进一步封装,旨在简化Spring的安装和配置过程。我们知道使用Spring搭建项目环境,往往需要引用很多jar包,并随着业务的逐渐复杂,创建出很多的xml文件。Spring boot封装了Spring集成的很多服务组件,并自动创建这些对象的实例,你只用将所需使用的服务组件的jar包引入即可快速构建开发环境。
  • Spring boot所集成的服务组件,可在官网找到,你可以勾选所使用的服务组件,并把相应maven 项目下载到本地。
  • Spring boot同样集成了对MongoDB等Nosql的支持,下面介绍通过Spring boot连接和操作MongoDB。

二、开发环境

  • JDK1.8、Maven、iDEA、SpringBoot2.0.6.RELEASE、mongodb3.4,Robomongo(可视化工具)

三、创建Spring boot项目

本文使用的IDE是idea,其Spring initializr是创建Spring Boot项目的快速可视化组件,当然你也可以构建maven项目,然后在Spring boot官网将相关pom引入。
  3.1 创建一个工程或Module,选择Spring Initializr,选择jdk版本
在这里插入图片描述
3.2 填写工程或模板信息
在这里插入图片描述
3.3 选择nosql中的mongodb
在这里插入图片描述

3.4 创建
在这里插入图片描述

3.5 创建完成
在这里插入图片描述

四、案例实战

(github: https://github.com/cc-man/SpringCloud_Learn/tree/master/servicehi/mongodb-server)

4.1 目录结构
在这里插入图片描述
4.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.nosql.mongodb</groupId>
	<artifactId>mongodb-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>mongodb-server</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

4.3 实体类 Users.java

package com.nosql.mongodb.mongodbserver.model;

import java.io.Serializable;

import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="users")
@CompoundIndexes({
        @CompoundIndex(name = "age_idx", def = "{'name': 1, 'age': -1}")
})
public class Users  implements Serializable{
    private static final long serialVersionUID = 1L;
    @Indexed
    private String uid;
    private String name;
    private int age;
    @Transient
    private String address;

    public Users(String uid, String name, int age) {
        super();
        this.uid = uid;
        this.name = name;
        this.age = age;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[name='%s', age='%s']",
                name, age);
    }
}

4.4 业务接口 IUserService.java

package com.nosql.mongodb.mongodbserver.service;

import com.nosql.mongodb.mongodbserver.model.Users;

import java.util.List;

/**
 * mongodb 案例
 *
 */
public interface IUserService {
    public void saveUser(Users users);

    public Users findUserByName(String name);

    public void removeUser(String name);

    public void updateUser(String name, String key, String value);

    public List<Users> listUser();
}

4.5 业务实现UserServiceImpl.java

package com.nosql.mongodb.mongodbserver.service.impl;

import java.util.List;

import com.nosql.mongodb.mongodbserver.model.Users;
import com.nosql.mongodb.mongodbserver.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
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.Component;



@Component("userService")
public class UserServiceImpl implements IUserService {
    @Autowired
    MongoOperations mongoTemplate;

    public void saveUser(Users users) {
        mongoTemplate.save(users);
    }

    public Users findUserByName(String name) {
        return mongoTemplate.findOne(
                new Query(Criteria.where("name").is(name)), Users.class);
    }

    public void removeUser(String name) {
        mongoTemplate.remove(new Query(Criteria.where("name").is(name)),
                Users.class);
    }

    public void updateUser(String name, String key, String value) {
        mongoTemplate.updateFirst(new Query(Criteria.where("name").is(name)),
                Update.update(key, value), Users.class);

    }

    public List<Users> listUser() {
        return mongoTemplate.findAll(Users.class);
    }
}

4.6 启动类Application.java

import org.apache.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@EnableAutoConfiguration
@ComponentScan(basePackages={"com.itstyle.mongodb"})
public class Application  {
    private static final Logger logger = Logger.getLogger(Application.class);

    public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(Application.class, args);
        logger.info("项目启动 ");
    }
}

4.7 基础配置application.properties

# 项目contextPath,一般在正式发布版本中
server.context-path=/mongodb
# 服务端口
server.port=8080
# session最大超时时间(分钟),默认为30
server.session-timeout=60
# 该服务绑定IP地址,启动服务器时如本机不是该IP地址则抛出异常启动失败,只有特殊需求的情况下才配置
# server.address=192.168.16.11
# tomcat最大线程数,默认为200
server.tomcat.max-threads=800
# tomcat的URI编码
server.tomcat.uri-encoding=UTF-8

#mongo2.x支持以上两种配置方式 mongo3.x仅支持uri方式
#mongodb note:mongo3.x will not use host and port,only use uri
#spring.data.mongodb.host=192.168.1.180
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=itstyle
#没有设置密码
spring.data.mongodb.uri=mongodb://127.0.0.1:27017/My_Mongodb
#设置了密码
#spring.data.mongodb.uri=mongodb://itstyle:itstyle@127.0.0.1:27017/My_Mongodb

4.8测试类SpringbootMongodbApplication.java

package com.nosql.mongodb.mongodbserver;

import java.util.List;

import com.nosql.mongodb.mongodbserver.model.Users;
import com.nosql.mongodb.mongodbserver.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;



@SpringBootApplication
@ComponentScan(basePackages={"com.nosql.mongodb.mongodbserver"})
public class SpringbootMongodbApplication implements CommandLineRunner {

    @Autowired
    private IUserService userService;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMongodbApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        try {
            Users users = new Users("1", "小明", 10);
            users.setAddress("青岛市");
            userService.saveUser(users);
            List<Users> list = userService.listUser();
            System.out.println("一共这么多人:"+list.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4.9 运行测试类
在这里插入图片描述
4.10 Robomongo查看
在这里插入图片描述

五、注解说明

@Document
标注在实体类上,与hibernate异曲同工。

@Document(collection="users")
public class Users  implements Serializable{
    private static final long serialVersionUID = 1L;
    ...省略代码

@CompoundIndex
复合索引,加复合索引后通过复合索引字段查询将大大提高速度。

@Document(collection="users")
@CompoundIndexes({
    @CompoundIndex(name = "age_idx", def = "{'name': 1, 'age': -1}")
})
public class Users  implements Serializable{
    private static final long serialVersionUID = 1L;
    ...省略代码

@Id
MongoDB默认会为每个document生成一个 _id 属性,作为默认主键,且默认值为ObjectId,可以更改 _id 的值(可为空字符串),但每个document必须拥有 _id 属性。
当然,也可以自己设置@Id主键,不过官方建议使用MongoDB自动生成。
@Indexed
声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度。
唯一索引的话是@Indexed(unique = true)。
也可以对数组进行索引,如果被索引的列是数组时,mongodb会索引这个数组中的每一个元素。

@Indexed
private String uid;

@Transient
被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。

@Transient
private String address;

@Field
代表一个字段,可以不加,不加的话默认以参数名为列名。

@Field("firstName")
private String name;

(github: https://github.com/cc-man/SpringCloud_Learn/tree/master/servicehi/mongodb-server)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值