SpringBoot整合MongoDB增删改查
了解MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为
WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于JSON 对象。字段值可以包含其他文档,数组及文档数组。
docker安装Mongodb
#拉取镜像 docker pull mongo
#创建容器 docker create --name mongodb -p 27017:27017 -v /data/mongodb:/data/db mongo ## 或在常见mongodb时指定密码 docker run --name
mongo -p 27017:27017 -v mongodata:/data/db -e
MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin
-d mongo
#启动容器 docker start mongodb
#进入容器 docker exec -it mongodb /bin/bash #使用MongoDB客户端进行操作 mongo --mongo -u admin -p admin show dbs #查询所有的数据库
SpringBoot 整合
1.依赖导入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.配置
spring:
data:
mongodb:
uri: mongodb://用户名:密码@服务器IP:端口/数据库名
# 上方为明确指定某个数据的用户进行连接
# 也可以使用admin 数据库中的用户进行连接 统一到admin 数据库进行认证
# admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1
3.pojo
package com.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
//指定文档的集合
@Document(collection = "taobao")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
@Id
private String _id;
@Field(value = "goodsName")
private String goodsName;
@Field(value = "goodsPrice")
private Double goodsPrice;
@Field(value = "goodsNum")
private Integer goodsNum;
@Field
//日期格式
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createDate;
public Goods(String goodsName, Double goodsPrice, Integer goodsNum, Date createDate) {
this.goodsName = goodsName;
this.goodsPrice = goodsPrice;
this.goodsNum = goodsNum;
this.createDate = createDate;
}
}
4.dao层
package com.dao;
import com.pojo.Goods;
import java.util.List;
public interface GoodsDao {
//查询所有
List<Goods> findAll();
//插入数据
void insertOneGoods(Goods goods);
//删除数据
void deleteOne(String id);
//根据名字得到id
void deleteOneName(String name);
//根据名字查询
Goods findByName(String name);
//根据id查询
Goods findById(String id);
}
5.实现类
package com.dao;
import com.pojo.Goods;
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.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository
public class GoodsDaoImpl implements GoodsDao{
@Resource
private MongoTemplate mongoTemplate;
@Override
public List<Goods> findAll() {
return mongoTemplate.findAll(Goods.class);
}
@Override
public void insertOneGoods(Goods goods) {
mongoTemplate.insert(goods);
}
@Override
public void deleteOne(String id) {
System.out.println(id);
//条件构造器
Criteria criteria=new Criteria();
criteria.and("_id").is(id);
Query query=new Query(criteria);
mongoTemplate.remove(query,Goods.class);
}
@Override
public void deleteOneName(String name) {
}
@Override
public Goods findByName(String name) {
System.out.println(name);
//条件构造器
Criteria criteria=new Criteria();
criteria.and("goodsName").is(name);
Query query=new Query(criteria);
return mongoTemplate.findOne(query,Goods.class);
}
@Override
public Goods findById(String id) {
return mongoTemplate.findById(id,Goods.class);
}
}
6.Test类
package com;
import com.dao.GoodsDaoImpl;
import com.pojo.Goods;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@SpringBootTest
class SpringBootMongoDbApplicationTests {
@Resource
private GoodsDaoImpl goodsDao;
@Test
void contextLoads() {
}
//查询全部
@Test
void testFindAll() {
List<Goods> all = goodsDao.findAll();
System.out.println(all.toString());
}
//根据id删除
@Test
void testDeleteOne() {
//根据姓名查询id 然后在做查询
Goods good = goodsDao.findByName("华硕电脑");
System.out.println(good.toString());
goodsDao.deleteOne(good.get_id());
System.out.println("删除成功");
}
//新增
@Test
void testInsertGoods() {
//根据姓名查询id 然后在做查询
Goods good = new Goods("外星人电脑",5000.0,2000,new Date());
System.out.println(good.toString());
goodsDao.insertOneGoods(good);
System.out.println("新增成功");
}
@Test
void testFindById() {
//根据姓名查询id 然后在做查询
try {
Goods good = goodsDao.findByName("华硕电脑");
System.out.println(good.toString());
Goods byId = goodsDao.findById(good.get_id());
System.out.println(byId.toString());
}catch (Exception ex){
System.out.println("用户名不存在"+ex);
}
}
}