SpringBoot+MongoDB+Thymeleaf简单增删改案例

1. 准备

JDK 1.8、IDEA2018.3.5、MongoDB 版本4.0.6、以及基本的springboot构建项目知识、thymeleaf相关知识,不了解的可以参考我之前的文章:

thymeleaf入门

2. MongnDB简单介绍

MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。

2.1 主要特点

  1. MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  2. 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
  3. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  4. 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  5. Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  6. MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  7. Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  8. Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  9. Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  10. GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  11. MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  12. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  13. MongoDB安装简单。

3. 安装

安装包官方下载地址:点击前往下载

具体的安装过程这里就不一一介绍了,可以参考一下其他文章:Windows下安装MongoDB

4. 案例

先放出整个工程的目录
SpringBoot+MongoDB+Thymeleaf简单增删改案例_第1张图片
下面我们一步步来
新建一个工程,模板选上web,模板引擎用thymeleaf
SpringBoot+MongoDB+Thymeleaf简单增删改案例_第2张图片

4.1 修改pom.xml文件

添加相关依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <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>
        <!--添加MongonDB的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>

4.2 修改application.properties文件

#MongoDB的配置
spring.data.mongodb.uri=mongodb://localhost:27017/user
# 如果mongodb设置了密码,这样配置 spring.data.mongodb.uri=mongodb://username:123456@localhost:27017/user
#多节点配置
# more ip cluster
##spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

#thymeleaf 配置
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
#缓存设置为false, 这样修改之后马上生效,便于调试
spring.thymeleaf.cache=false
#上下文,可以不需要,如果加上则要在浏览器url加上/thymeleaf
#server.servlet.context-path=/thymeleaf

4.3 新建实体类

新建一个pojo包,用于存放实体类
在包下新建一个User类

package com.eknaij.springbootmongodb.pojo;

public class User {
    int userId;
    String name;


    public String getName() {
        return name;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

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

    @Override
    public String toString() {
        return "user:[userId:"+userId+"---name:"+name+"]";
    }
}


4.3 Dao层

新建一个dao包,用于存放相关的dao接口
新建一个UserDao接口

package com.eknaij.springbootmongodb.dao;

import com.eknaij.springbootmongodb.pojo.User;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserDao extends MongoRepository<User, Integer> {
    public User getByUserId(int id);
    public User getByUserIdLike(int id);
}



MongoRepository是MongoDB自带的一个仓库,满足基本的增删查改操作,可以直接使用,表示实体类和主键,如果自带的函数不满足需求,可以在接口编写新的方法。这里新加两个方法,根据ID查找user,一个精确查找,一个模糊查找。

4.4 service层

新建一个service包,用于存放service层的相关类
新建一个UserService

package com.eknaij.springbootmongodb.service;

import com.eknaij.springbootmongodb.pojo.User;

import java.util.List;

public interface UserService {
    public User getByUserid(int id);
    public User getByUseridLike(int id);
    public void saveUser(User user);
    public void removeUserByUserid(int id);
    public void updateUser(User user);
    public List<User> getAllUser();
    public User findOne(int id);
}



4.5 service的实现类

新建一个用于存放service的实现类的Impl包
新建service的实现类,实现了UserService的接口

package com.eknaij.springbootmongodb.serviceImpl;

import com.eknaij.springbootmongodb.dao.UserDao;
import com.eknaij.springbootmongodb.pojo.User;
import com.eknaij.springbootmongodb.service.UserService;
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.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private MongoTemplate mongoTemplate;
    @Resource
    private UserDao userDao;

    @Override
    public User getByUserid(int id) {
        return userDao.getByUserId(id);
    }

    @Override
    public User getByUseridLike(int id) {
        return userDao.getByUserIdLike(id);
    }

    @Override
    public void saveUser(User user) {
        userDao.save(user);
    }

    @Override
    public void removeUserByUserid(int id) {
        Query q=new Query(new Criteria("userId").is(id));
        mongoTemplate.remove(q,User.class);
    }

    @Override
    public void updateUser(User user) {
        Query q=new Query(new Criteria("userId").is(user.getUserId()));
        Update update=new Update();
        update.set("userId", user.getUserId());
        update.set("name", user.getName());
        mongoTemplate.updateMulti(q, update,User.class);
    }

    @Override
    public List<User> getAllUser() {
        return userDao.findAll();
    }

    @Override
    public User findOne(int id) {
        Query q=new Query(new Criteria("userId").is(id));
        return mongoTemplate.findOne(q,User.class);
    }
}

4.6 controller层

新建一个controller包,用来存放controller类
新建一个UserController类

package com.eknaij.springbootmongodb.controller;

import com.eknaij.springbootmongodb.pojo.User;
import com.eknaij.springbootmongodb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/add")
    public String addUser() {
        return "add";
    }

    /**
     * 添加一条数据
     * @param user
     * @return
     */
    //@RequestMapping("/saveUser")
    @PostMapping("/user")//restful风格
    public String saveUser(User user) {
        System.out.println("添加的数据是:"+user);
        userService.saveUser(user);
        return "redirect:/getAll";
    }

    /**
     * 查询所有数据
     * @param model
     * @return
     */
    @RequestMapping("/getAll")
    public String findallUser(Model model){
        List ls= userService.getAllUser();
        model.addAttribute("users",ls);
        return "show";
    }

    /**
     * 根据id查找一条数据
     * @return
     */
   // @RequestMapping("/findOne")
    @GetMapping("/user/{id}")
    public String findOne(@PathVariable("id") int id, Model model){
        User user = userService.findOne(id);
        System.out.println("查询到的数据是:"+user);
        model.addAttribute("user",user);
        return "edit";
    }
    /**
     * 根据id删除一条数据
     * @param id
     * @return
     */
    @RequestMapping("/removeUserById")
    public String removeUserById(int id) {
        System.out.println("需要删除的编号是:"+id);
        userService.removeUserByUserid(id);
        return "redirect:/getAll";
    }

    /**
     * 修改数据
     * @return
     */
   // @RequestMapping("/updateUser")
    @PutMapping("/user/{id}")
    public String updateUser(User user) {
        userService.updateUser(user);
        return "redirect:/getAll";
    }

}


4.7 视图页面

  1. 新建一个add.html用于添加数据



    
    添加数据


    
userId:
name:
  1. 新建一个show.html用于查询所有数据



    
    查询所有数据


序号 id name 编辑 删除
1 name 编辑 删除
  1. 新建一个edit.html用于修改数据



    
    修改信息


    
userId:
name:

5 运行测试

  1. 添加如下数据
    SpringBoot+MongoDB+Thymeleaf简单增删改案例_第3张图片
    查看数据库:
    SpringBoot+MongoDB+Thymeleaf简单增删改案例_第4张图片
    有数据,添加成功!

  2. 查询
    SpringBoot+MongoDB+Thymeleaf简单增删改案例_第5张图片

可以看到我添加进去的数据已经成功从数据库查询出来

其他功能请大家自行测试,有问题欢迎留言我们一起探讨。

本文源码已上传githug,需要的自行下载:点我前往下载源码

你可能感兴趣的:(SpringBoot)