MongoDB与SpringBoot整合过程及简单应用

1.在这之前应该安装好了idea和MongoDB 并且idea安装过Maven吧
我的MongoDB没有账户密码
2.打开idea创建springboot项目
在这里插入图片描述
自己起名字 随便 详细解释再搜搜昂
在这里插入图片描述
最简单的 这一步直选web的这一个创建 然后后面再需要什么东西自己加依赖就好
如果知道自己需要什么 也可以直接选上这样更省事
在这里插入图片描述
名字想改就改 然后直接创建就好了
第一次创建后可能下载相应依赖比较慢 等一下就好 前提你的maven是能用的 而且有网
在这里插入图片描述

2.后面整个的话就是贴我的代码了
先上pox.xml文件 毕竟是依赖 要先下载好
就是 log4j的依赖 以及MongoDB的依赖
然后
log4j.properties文件 这个我没配置好 但是能用

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example.mongotest</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

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

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


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

        <!-- log4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>


        <!--Mysql的依赖-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- springboot整合jdbctemplate -->
        <!--jdbctemplate的可以暂时不用导入,springboot的web包中有默认的-->
        <!-- mysql的依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

    </dependencies>

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

</project>

然后application.properties文件 这是全局配置文件 主要写我们的MongoDB的配置信息
27017 是MongoDB服务端口 db1是数据库名
注意 在刚开始的时候
我没有事先创建数据库db1和集合collection user 没有 它会自动创建 不用我们去手动创建

#设置servlet的端口号
server.port=10000
#连接MongoDB数据库
spring.data.mongodb.uri=mongodb://localhost:27017/db1

然后就是我的其他代码了 在文章最后贴出

注意

现在说明一下 没有写前端代码
在测试时 只是访问application.properties全局配置文件的配置的端口
加上配置的路径 然后传参数

参数直接在路径后面写上!!! 回车测试 看页面显示 没有返回值的看控制台输出结果

只是简单的整合
使用了一个User类 dao层 Service层 controller层
然后在初始化创建好的com.example.mongotest.demo的包下有四个包里面就是我的代码
注意一定要建在
com.example.mongotest.demo这个初始化的包的下面 不然可能发生错误在这里插入图片描述
展开
在这里插入图片描述

可以先看看结果
在这里插入图片描述
先测试写的insert方法 然后依次测试其他方法 就是依次访问不同路径 带着参数

1.增加记录的结果

访问http://localhost:10000/user/register?id=2&name=qingqing&age=20&password=123456
路径 后面跟的是参数
调用insert方法
我插入数据

在这里插入图片描述
这样我插入了好几条数据
在这里插入图片描述

在这里插入图片描述

> db.user.find()
{ "_id" : "19", "name" : "qing", "password" : "123456", "age" : 18, "_class" : "com.example.mongotest.demo.bean.User" }
{ "_id" : "9", "name" : "qingqing", "password" : "123456", "age" : 18, "_class" : "com.example.mongotest.demo.bean.User" }
{ "_id" : "1", "name" : "qingqing", "password" : "123456", "age" : 18, "_class" : "com.example.mongotest.demo.bean.User" }
{ "_id" : "2", "name" : "qingqing", "password" : "123456", "age" : 20, "_class" : "com.example.mongotest.demo.bean.User" }
{ "_id" : "3", "name" : "shuai", "password" : "123456", "age" : 18, "_class" : "com.example.mongotest.demo.bean.User" }
{ "_id" : "4", "name" : "shuai", "password" : "123456", "age" : 22, "_class" : "com.example.mongotest.demo.bean.User" }

2.findUserByUserName结果

用的template.findOne(query , User.class)方法 只返回一条数据
就是如过有重复的 默认返回第一条
在这里插入图片描述

在这里插入图片描述

3.updateUser 更新数据

本来传的的User对象 因为没有写页面 只能在地址栏通过get传值
所以修改为三个变量

注意 昂 看插入数据 是可以使用User实体类作为参数的
然后传参的时候使用三个变量 没问题 它会自动映射的!!!!!这边就这样写吧 我刚开始理解错了 所以改了

根据id更新name和age
这个是执行后的截图
本来是 加上的 ?id=1&name=sunqing&age=8
在这里插入图片描述
在这里插入图片描述
看看结果没有错
在这里插入图片描述

> db.user.find({'_id':'1'})
{ "_id" : "1", "name" : "sunqing", "password" : "123456", "age" : 8, "_class" : "com.example.mongotest.demo.bean.User" }

4.根据名字查询数据并删除

findUserByUserNameAndRemove

在这里插入图片描述
控制台的输出

 INFO [http-nio-10000-exec-6] - 我获取到了名字为shuai的这些人 他们是:
User{id='3', name='shuai', password='123456', age=18}
User{id='4', name='shuai', password='123456', age=22}
 INFO [http-nio-10000-exec-6] - 然后我删除了他们

在这里插入图片描述
在这里插入图片描述

5.查找并删除 这是根据age

findUserByCollection

http://localhost:10000/user/findUserByCollection?CollectionName=user&age=18

在这里插入图片描述
结果 删除成功
在这里插入图片描述
控制台输出

 INFO [http-nio-10000-exec-2] - 我获取到了集合为user的这些人  :18岁   他们是:
User{id='19', name='qing', password='123456', age=18}
User{id='9', name='qingqing', password='123456', age=18}
 INFO [http-nio-10000-exec-2] - 然后我删除了他们

在这里插入图片描述

6.删除对象

http://localhost:10000/user/deleteUserById?id=1

在这里插入图片描述
控制台输出

我删除了:1
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20190821191921145.png)


我的代码
User

```java
/**
 * 作者:Shishuai
 * 文件名:User
 * 时间:2019/8/21 15:28
 */

package com.example.mongotest.demo.bean;

public class User {
    private String id;
    private String name;
    private String password;
    private int age;
还有getter setter 方法 
toString方法
有参和无参构造 不贴了

MongoDBController

/**
 * 作者:Shishuai
 * 文件名:MongoDBController
 * 时间:2019/8/21 15:24
 */

package com.example.mongotest.demo.controller;

import com.example.mongotest.demo.bean.User;
import com.example.mongotest.demo.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Iterator;
import java.util.List;


@RestController
@RequestMapping("/user")
public class MongoDBController {

    private static Logger logger = Logger.getLogger(MongoDBController.class);


    @Autowired
    private UserService userService;

    @RequestMapping("/register")
    public String insert(User user){
        User user1 = userService.insert(user);
        logger.info(user1);
        logger.debug(user1);
//        return "恭喜 "+user1.getName()+" 注册成功";
        return "恭喜 注册成功";
    }

    //根据名字查询数据
    @RequestMapping("/findUserByUserNameAndRemove")
    public List<User> findUserByUserNameAndRemove(String userName){

        List<User> list = userService.findUserByUserNameAndRemove(userName);
        Iterator<User> iterator = list.iterator();
        logger.info("我获取到了名字为"+userName+"的这些人 他们是:");
        while(iterator.hasNext()){
            User user = iterator.next();
            System.out.println(user);
        }
        logger.info("然后我删除了他们");
        return list;

    }

    //查找并删除 这是根据age
    @RequestMapping("/findUserByCollection")
    public List<User> findUserByCollection(String CollectionName,int age){

        List<User> list = userService.findUserByCollectionAndRemove(CollectionName, age);
        Iterator<User> iterator = list.iterator();
        System.out.println(list);
        logger.info("我获取到了集合为"+CollectionName+"的这些人  :"+ age + "岁   他们是:");
        while(iterator.hasNext()){
            User user = iterator.next();
            System.out.println(user);
        }
        logger.info("然后我删除了他们");
        return list;
    }

    //    根据用户名查询对象
    @RequestMapping("/findUserByUser")
    public User findUserByUserName(String userName){

        User user = userService.findUserByUserName(userName);
        System.out.println("我查到了:"+user);
        logger.info("我查到了:"+user);
        return user;
    }

    //更新对象
    @RequestMapping("/updateUser")
    public void updateUser(String id, String name, int age){
       userService.updateUser(id, name, age);
        System.out.println("我更新了"+name+age+id);
        logger.info(name+age+id);
    }

    //删除对象
    @RequestMapping("/deleteUserById")
    public void deleteUserById(String id){
        userService.deleteUserById(id);
        System.out.println("我删除了:"+id);
    }

}

interface UserDao

/**
 * 作者:Shishuai
 * 文件名:UserDao
 * 时间:2019/8/21 15:27
 */

package com.example.mongotest.demo.dao;

import com.example.mongotest.demo.bean.User;

import java.util.List;

public interface UserDao {
    public User insert(User user);


    //根据名字查询数据
    public List<User> findUserByUserNameAndRemove(String userName);

    //查找并删除 这是根据age
    public List<User> findUserByCollectionAndRemove(String CollectionName,int age);

    //    根据用户名查询对象
    public User findUserByUserName(String userName);

    //更新对象
    public void updateUser(String id, String name, int age);

    //删除对象
    public void deleteUserById(String id);
}

UserDaoImpl

/**
 * 作者:Shishuai
 * 文件名:UserDaoImpl
 * 时间:2019/8/21 15:27
 */

package com.example.mongotest.demo.dao.Impl;

import com.example.mongotest.demo.bean.User;
import com.example.mongotest.demo.dao.UserDao;
import javafx.scene.shape.Circle;
import org.springframework.beans.factory.annotation.Autowired;
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.Component;

import java.util.List;

@Component
public class UserDaoImpl implements UserDao {

    @Autowired    //注入mongodb的使用
    private MongoTemplate template;

    @Override
    public User insert(User user) {
        //注意:这里的集合的名字
        //如果是第一次添加会直接在数据库中创建一个与当前的模型一样名字的集合.
        //第二次直接将数据添加到这个集合中
        System.out.println("you"+user);
        User user1 = template.save(user);
        return user1;
    }

    //根据名字查询数据
    //Criteria 专门设置条件的类
    public List<User> findUserByUserNameAndRemove(String userName) {
        Query query=new Query(Criteria.where("name").is(userName));

        //这里查找到后,会将数据库中数据删除

        List<User> userlist =  template.findAllAndRemove(query , User.class);
        System.out.println("findUsers:"+userlist);
        return userlist;
    }


    //查找并删除 这是根据age
    public List<User> findUserByCollectionAndRemove(String CollectionName,int age) {
        Query query=new Query(Criteria.where("age").is(age));
        List<User> userlist =  template.findAllAndRemove(query , User.class, CollectionName);
        System.out.println("dao"+userlist);
        return userlist;
    }




    //根据用户名查询对象
    public User findUserByUserName(String userName) {
        Query query=new Query(Criteria.where("name").is(userName));
        User user =  template.findOne(query , User.class);
        return user;
    }



    //更新对象
    public void updateUser(String id, String name, int age) {
        Query query=new Query(Criteria.where("id").is(id));
        Update update= new Update().set("name", name).set("age", age);
        //更新查询返回结果集的第一条
        template.updateFirst(query,update,User.class);
        //更新查询返回结果集的所有
        // template.updateMulti(query,update,User.class);
    }

    //删除对象
    public void deleteUserById(String id) {
        Query query=new Query(Criteria.where("id").is(id));
        template.remove(query,User.class);
    }

}

interface UserService

package com.example.mongotest.demo.service;

import com.example.mongotest.demo.bean.User;

import java.util.List;

public interface UserService {
    public User insert(User user);

    //根据名字查询数据
    public List<User> findUserByUserNameAndRemove(String userName);

    //查找并删除 这是根据age
    public List<User> findUserByCollectionAndRemove(String CollectionName,int age);

    //    根据用户名查询对象
    public User findUserByUserName(String userName);

    //更新对象
    public void updateUser(String id, String name, int age);

    //删除对象
    public void deleteUserById(String id);
}

UserServiceImpl

/**
 * 作者:Shishuai
 * 文件名:UserServiceImpl
 * 时间:2019/8/21 15:26
 */

package com.example.mongotest.demo.service.Impl;

import com.example.mongotest.demo.bean.User;
import com.example.mongotest.demo.dao.Impl.UserMySqlDaoImpl;
import com.example.mongotest.demo.dao.UserDao;
import com.example.mongotest.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;


    @Override
    public User insert(User user) {
        return userDao.insert(user);
    }

    @Override
    public List<User> findUserByUserNameAndRemove(String userName) {
        return userDao.findUserByUserNameAndRemove(userName);
    }

    @Override
    public List<User> findUserByCollectionAndRemove(String CollectionName, int age) {
        return userDao.findUserByCollectionAndRemove(CollectionName, age);
    }

    @Override
    public User findUserByUserName(String userName) {
        return userDao.findUserByUserName(userName);
    }

    @Override
    public void updateUser(String id, String name, int age) {
        userDao.updateUser(id, name, age);
    }

    @Override
    public void deleteUserById(String id) {
        userDao.deleteUserById(id);
    }
}

注意有些错误可能是包没导入对 可以对着代码看看
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值