spingboot整合mongodb

mongodb是使用c++编写的面向文档存储的数据库,它支持一种类似JSON的BSON数据格式,既可以存储简单的数据格式,也可以存储复杂的数据格式。它支持的查询语言非常强大,同时还支持对数据建立索引来实现更快的排序。

一、mongodb安装

1.下载mongodb
执行命令:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz下载mongodb,此时可能有报错:在这里插入图片描述
网上有人说加上--no-check-certificate,即使用命令wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz --no-check-certificate,试了下我这块不行,最后升级了下wget:yum -y update wget,再次执行命令,下载正常了。
下载好之后,解压下载文件:tar -zxvf mongodb-linux-x86_64-4.0.0.tgz
将解压好的文件移动到安装目录:mv mongodb-linux-x86_64-4.0.0 /usr/local/mongodb
2.配置mongodb
进入mongodb目录下,创建data和log文件夹,分别用于保存数据和日志:

cd /usr/local/mongodb/
mkdir data
mkdir log

进入bin目录下,创建一个新的mongodb的配置文件mongodb.conf,文件内容如下:

dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
fork=true

各项配置的含义:
dbpath:数据存储目录
logpath:日志文件位置
port:启动端口号
fork:表示以守护进程方式启动mongodb,即允许mongodb在后台运行
3.启动和关闭mongodb
(1)启动mongodb
进入mongodb的bin目录下,运行如下命令启动mongodb:./mongod -f mongodb.conf --bind_ip_all
其中:-f指定了配置文件的位置,--bind_ip_all表示允许所有远程地址连接该mongodb实例。出现如下回显信息,则表明mongodb启动成功,守护进程号为8838.
在这里插入图片描述
(2)通过mongdb后台管理shell登录
进入mongdb的bin目录下,执行./mongo登录后台shell,此时将默认连接mongdb的test库,输入db.version()命令查看mongodb版本号,同时因为mongodb shell是一个javascripte shell,所以以可以进行简单的数学运算:
在这里插入图片描述
(3)关闭mongodb数据库
启动mongodb后默认连接的是test库,而关闭mongodb需要在admin库中执行,所以首先切换数据库,再关闭,命令如下:

use admin;
db.shutdownServer();
exit

回显如下信息,表明数据库已经关闭
在这里插入图片描述
4.mongodb安全管理
(1)添加用户
前面登录数据库,都是直接登录,没有使用密码,这对于生产环境而言很不安全,鉴于安全因素,我们需要对mongodb设置密码。不同于mysql,oracel等关系型数据库,mongodb中每一个库都有自己独立的密码,在哪个库创建用户就要在哪一个库验证密码。可以使用如下命令进行创建:

use admin;
db.createUser({user:"adminuser",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]});

执行以上命令后,会有如下回显信息:
在这里插入图片描述
刚才创建的用户adminuser的角色是userAdminAnyDatabase,它可以用来创建删除用户,要对数据库进行存取数据操作,还需要在test库创建一个用户testuser,使它具有读写权限:

use test;
db.createUser({user:"testuser",pwd:"123456",roles:[{role:"readWrite",db:"test"}]});

设置密码后,停止该数据库实例:

use admin;
db.shutdownServer();
exit

通过如下命令启动,开启认证:./mongod -f mongodb.conf --auth --bind_ip_all

注:关于用户角色,有如下几种:

1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system

具体作用如下:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

(2)验证
登录mongodb后台shell后,输入命令查看数据库:show dbs;
在这里插入图片描述
提示认证失败,此时需要切换到admin库下面,进行认证:

use admin;
db.auth("adminuser","123456");

这时候再次输入命令,正常返回数据。
接下来验证一下用户权限,首先使用adminuser登录admin库,然后执行插入数据的命令:

use admin;
db.auth("adminuser","123456");
db.abc.insert({"a":1,"b":2});

此时有报错:
在这里插入图片描述
切换到testuser,执行插入命令:

use test;
db.auth("testuser","123456");
db.abc.insert({"a":1,"b":2});

数据插入成功:
在这里插入图片描述
5.mongodb常用操作
(1)show dbs: 查看所有数据库,只显示了含有数据的数据库,不含数据的数据库需要增加数据后才能显示;
(2)db:查看当前数据库名称;
(3)use local:使用local数据库,同时,如果使用的数据库不存在,则会自动创建数据库;
(4)db.dropDatabase():删除当前数据库;
(5)show collectionsshow tables):查看当前数据库中所有的集合名称;
(6)db.createCollection(name, options):创建集合,如db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )表示创建结合名为mycol,集合固定大小为6142800kb,文档最大个数为1000个。
(7)db.collectionName.drop():删除名称为collectionName的集合
(8)db.collection.insert():向collection的集合中插入数据,如果collection不存在,则会自动创建collection集合,然后再添加数据,如db.abc.insert({"a":1,"b":3});表示向名称为abc的集合里添加一条{"a":1,"b":3}
(9)db.collection.find():查询collection集合中的所有的文档,如果加入参数,则查询指定参数值的文档,如:db.abc.find({"a":1});表示查询所有文档中a=1的文档
(10)db.collection.update()以及db.collection.save()均用于更新数据,update()方法是按照传入的数据更新原有文档,save()方法是直接替换原有文档。

二、springboot集成mongodb

1.引入maven依赖
在springboot项目根pom文件中引入如下依赖:

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

2.配置mongodb
在application.yml中配置mongod连接信息,配置项如下:

spring:
  data:
    mongodb:
      uri: mongodb://testuser:123456@192.168.184.128:27017/test

3.创建User实体类:

public class User {
    private Long id;
    private String name;
    private Byte sex;
    private String phone;
    private Byte age;
    private Boolean status;
    private String address;
    //getter setter
    }

4.创建controller用于测试:

@RestController
@RequestMapping(value = "/test/mongodb")
public class MongodbTestController {
    @Autowired
    private MongoTemplate mongoTemplate;

    @GetMapping(value = "/writeAndRead")
    public void insertUser(){
        List<User> userList=new ArrayList<User>();
        User user01=new User();
        user01.setName("张三");
        user01.setId(1L);
        user01.setStatus(false);
        user01.setAge((byte)18);
        user01.setPhone("1234567890");
        User user02=new User();
        user02.setId(2L);
        user02.setName("李四");
        user02.setSex((byte)2);
        user02.setPhone("09876543212");
        user02.setAddress("陕西");
        userList.add(user01);
        userList.add(user02);
        mongoTemplate.insertAll(userList);
        //查询所有数据
        List<User> allUser = mongoTemplate.findAll(User.class);
        System.out.println("allUser="+allUser);
        //查询id=2的数据
        User userById = mongoTemplate.findById(2, User.class);
        System.out.println("userById="+userById);
    }
}

5.启动应用进行测试
启动时候发现报错:
在这里插入图片描述
尝试了很多方法无效后,最终升级了spring-boot-starter-parent的版本,由2.0.4.RELEASE升级到2.1.0.RELEASE后解决该问题。
服务正常启动后,浏览器访问:https://localhost:8081/test/mongodb/writeAndRead,查看IDEA控制台输出:
在这里插入图片描述
可以看到,两条数据已经全部插入到数据库,并且可以正常查询数据库中所有的数据,同时,可以按照id查询某一条记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值