JDK 1.8、IDEA2018.3.5、MongoDB 版本4.0.6、以及基本的springboot构建项目知识、thymeleaf相关知识,不了解的可以参考我之前的文章:
thymeleaf入门
MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。
安装包官方下载地址:点击前往下载
具体的安装过程这里就不一一介绍了,可以参考一下其他文章:Windows下安装MongoDB
先放出整个工程的目录
下面我们一步步来
新建一个工程,模板选上web,模板引擎用thymeleaf
添加相关依赖
<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>
#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
新建一个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+"]";
}
}
新建一个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自带的一个仓库,满足基本的增删查改操作,可以直接使用,
新建一个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);
}
新建一个用于存放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);
}
}
新建一个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";
}
}
添加数据
查询所有数据
序号
id
name
编辑
删除
1
name
编辑
删除
修改信息
可以看到我添加进去的数据已经成功从数据库查询出来
其他功能请大家自行测试,有问题欢迎留言我们一起探讨。
本文源码已上传githug,需要的自行下载:点我前往下载源码