SpringBoot简单使用MongoDB
MongoDB介绍
SpringBoot简单使用MongoDB
一、配置步骤
1、application.yml
2、pom
3、entity
4、mapper
二、案例代码使用
1、库
前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ
跟关系型数据库概念对比
Mysql MongoDB
Database(数据库) Database(数据库)
Table(表) Collection(集合)
Row(行) Document(文档)
Column(列) Field(字段)
数据格式
MongoDB 将数据存储为一个文档,BSON格式。由key 和 value组成。
{"_id" : ObjectId("61d6927658c3b5acf4723616"),"name" : "希望小学","studentNum" : 10000.0
}
使用场景
大数据量存储场景
MongoDB自带副本集和分片,天生就适用于大数量场景,无需开发人员通过中间件去分库分表,非常方便。
操作日志存储
很多时候,我们需要存储一些操作日志,可能只需要存储比如最近一个月的,一般的做法是定期去清理,在MongoDB中有固定集合的概念,我们在创建集合的时候可以指定大小,当数据量超过大小的时候会自动移除掉老数据。
爬虫数据存储
爬下来的数据有网页,也有Json格式的数据,一般都会按照表的格式去存储,如果我们用了MongoDB就可以将抓下来的Json数据直接存入集合中,无格式限制。
社交数据存储
在社交场景中使用 MongoDB 存储存储用户地址位置信息,通过地理位置索引实现附近的人,附近的地点等。
电商商品存储
不同的商品有不同的属性,常见的做法是抽出公共的属性表,然后和SPU进行关联,如果用MongoDB的话那么SPU中直接就可以内嵌属性。
CRUD
单个文档插入到集合中
db.collection.insertOne()
多个文档插入到集合中
db.collection.insertMany()
单个或者多个文件插入到集合中
db.collection.insert()
查询数据
db.collection.find( )
更新单条
db.inventory.updateOne()
更新多条
db.inventory.updateMany()
删除单条文档
db.inventory.deleteOne( )
删除多条文档
db.inventory.deleteMany()
开发工作必用
MongoDB跟Mysql的语法对比
https://blog.csdn.net/qq_42483764/article/details/122350164
MongoDB基础操作
db.集合名称.insert/save/insertOne(文档) //添加
db.集合名称.update({条件},{操作种类:{文档}})
db.集合名称.remove(条件)
示例:
db.book.save({'name':'spring boot',type:'spring boot'}) //添加
db.book.remove({type:'spring boot'}) //删除//修改第一条
db.book.update({name:'spring boot'}, {$set:{name:'Spring Boot'}})
//修改所有
db.book.updateMany({name:'spring boot'}, {$set:{type:'spring'}})
db.getCollection('book').find({}) //查询
db.book.find({type:'spring boot'}) //查询
定义核心配置文件
# 登录用户所在的数据库
spring.data.mongodb.authentication-database=admin# 数据库的ip地址
spring.data.mongodb.host=192.168.133.142# MongoDB端口号
spring.data.mongodb.port=27017# 用户账号
spring.data.mongodb.username=zlfeng# 用户密码
spring.data.mongodb.password=123456# 指定使用的数据库
# 不必预先创建,不存在该数据库会自动创建
spring.data.mongodb.database=db_student
修改yml配置
spring:data:mongodb:#192.168.217.128根据自己的ip进行修改#test是MongoDB的集合名称 也就是表名
添加实体类
@Data
@AllArgsConstructor
@Document("User") //指定了这个模型类型所对应的集合名称即collection 表名
public class User {@Id //自动生成的主键ID 主键 不可重复 自带索引private String id;private String name;private Integer age;
}
方法测试
@SpringBootTest
public class MongoTemplateTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testMongoDB(){//向表中插入数据User user = new User(null,"张三",20);User user1 = new User(null,"李四",16);mongoTemplate.insert(user);mongoTemplate.insert(user1);//查询表中所有记录List<User> userList = mongoTemplate.findAll(User.class);System.out.println(userList);//[User(id=63acf541e6af652ac74fd008, name=张三, age=20),// User(id=63acf541e6af652ac74fd009, name=李四, age=16)]//根据表中id查询记录User user2 = mongoTemplate.findById("63acf541e6af652ac74fd008", User.class);System.out.println(user2);//User(id=63acf541e6af652ac74fd008, name=张三, age=20)//条件查询Query query = new Query(Criteria.where("name").is("李四").and("age").is(16));List<User> users = mongoTemplate.find(query, User.class);System.out.println(users);//[User(id=63acf541e6af652ac74fd009, name=李四, age=16)]//根据_id删除表中记录Query query2 = new Query(Criteria.where("_id").is("63acf541e6af652ac74fd008"));DeleteResult remove = mongoTemplate.remove(query2, User.class);//获取删除记录的个数long count = remove.getDeletedCount();System.out.println(count);//1//删除表中所有数据Query query3 = new Query();mongoTemplate.remove(query3,User.class);}
}
二、基于MongoRepository开发
Spring Data提供了对MongoDB数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。
构建仓库
public interface UserRepository extends MongoRepository<User,String> {
}
方法测试
@SpringBootTest
public class MongoRepositoryTest {@Autowiredprivate UserRepository userRepository;@Testpublic void test(){//向数据库表中插入数据User user = new User(null,"张三三",18);User user1 = new User(null,"李四",16);userRepository.save(user);userRepository.save(user1);//查询数据库表中所有记录List<User> all = userRepository.findAll();System.out.println(all);//[User(id=63acf24938e0d1033d50dc20, name=张三三, age=18),// User(id=63acf24938e0d1033d50dc21, name=李四, age=16)]//按照id查询表中数据User user2 = userRepository.findById("63acf24938e0d1033d50dc20").get();System.out.println(user2);//User(id=63acf24938e0d1033d50dc20, name=张三三, age=18)//按条件(姓名与年龄)查询Example<User> example = Example.of(new User(null,"李四",16));List<User> list = userRepository.findAll(example);System.out.println(list);//User(id=63acf24938e0d1033d50dc21, name=李四, age=16)//模糊查询User user3 = new User(null,"三",18);//模糊查询匹配规则ExampleMatcher matcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING).withIgnoreCase(true);//忽略大小写Example<User> example1 = Example.of(user3,matcher);List<User> list1 = userRepository.findAll(example1);System.out.println(list1);//User(id=63acf24938e0d1033d50dc20, name=张三三, age=18)//分页查询Pageable pageable = PageRequest.of(0, 2);//设置分页参数:第1页 每页2条数据Page<User> page = userRepository.findAll(pageable);System.out.println("Page的总页数是:" + page.getTotalPages() + ",Page的总记录条数是:" + page.getTotalElements());//Page的总页数是:1 + ,Page的总记录条数是:2//根据_id修改信息User user4 = userRepository.findById("63acf24938e0d1033d50dc20").get();user4.setName("王五");//将取出的信息修改其nameuserRepository.save(user4);//根据id删除userRepository.deleteById("63acf24938e0d1033d50dc20");//删除全部userRepository.deleteAll();}
一、配置步骤
进入mongodb中创建数据库和用户
# (1)授权
# 我的管理员是root,密码是123456
db.auth("root", "123456")# (2)创建应用数据库和用户
# 连接库直接使用相应库中的用户名称即可,如果仅仅使用appdb库,直接使用user=appdb,pwd=123456连接即可
use appdb
db.createUser({user:'appdbuser', pwd:'123456', roles:[ {role:'dbOwner', db:'appdb'} ]})
1、application.yml
#数据库配置
spring:data:mongodb:# mongodb://用户名:密码@IP地址:27017/数据库uri: mongodb://appdbuser:123456@127.0.0.1:27017/appdb# 可以不用设置数据库# database: appdb
2、pom
org.springframework.boot spring-boot-starter-data-mongodb3、entity
@Document("book")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {@Idprivate Long id;private String title;private Integer page;
}
4、mapper
@Repository
public interface BookDao extends MongoRepository<Book, Integer> {
}
二、案例代码使用
@SpringBootTest
@Slf4j
class MymongoApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid contextLoads() {// 插入多条数据Book book1 = new Book(2L, "China", 8);Book book2 = new Book(3L, "American", 8);ArrayList<Book> bookArrayList = Lists.newArrayList();bookArrayList.add(book1);bookArrayList.add(book2);bookDao.saveAll(bookArrayList);// 查询一条数据Book book3 = new Book();book3.setTitle("American");Example<Book> example = Example.of(book3);Optional<Book> one = bookDao.findOne(example);log.info(one.get().toString());//Book(id=3, title=American, page=8)}
}
操作集合下的文档
- 切换至集合
连接至具体数据库以后,使用以下代码切换到集合,如果集合不存在,则使用如下代码新建集合:
MongoCollection collection = database.getCollection("myTestCollection");
- 插入文档
切换至集合后,就可以进行文档的增、删、改、查操作。首先定义文档,并使用 append。方法追加内容,代码如下:
Document document = new Document("_id", 1999).append("title", "MongoDB Insert Demo").append("description","database").append("likes", 30).append("by", "demo point").append("url", "http://c.biancheng.net/mongodb/");
document 为 BSON 类型的文档,实际上为一个列表,每项有两个元素,即字段名和值。
文档定义完成后,再使用 insertOne 方法将此文档插入集合:
collection.insertOne(document);
如果插入多条数据,需要先定义一个 Document 列表,然后用 add() 方法添加多个 Document 元素,最后用 insertMany() 方法插入,代码如下:
List<Document> documents = new ArrayList<Document>();documents.add(document1);collection.insertMany(documents);
- 删除文档
使用 delete() 方法删除一个或多个文档,代码如下:
collection.deleteOne(document);collection.deleteMany(new Document ("likes", 30));
- 更新数据
使用 updataOne() 方法更新一条数据或多个数据,代码如下:
collection.updataOne (eq ("likes", 30), new Document ("$set", new Document ("likes", 50)));
updateOne() 方法中有两个参数,第一个参数表示更新的内容等于 (“likes”,30) 的文档,第二个参数为要修改的内容,使用 $set 参数修改当前值,修改的内容为 (“likes”, 50)。
- 查询数据
利用游标类型实现数据的查询和遍历显示,使用游标前需要 import MongoCursor 类库。
import com.mongodb.client.MongoCursor;document Doc = (Document)collection.find(eq("likes", 30)).iterator();MongoCursor<Document> cursor =collection.find().iterator();try{while (cursor.hasNext()){System.out.printin(cursor.next().toJson());}} finally{Cursor.close();
}
设置 find() 方法的参数为查询条件,参数为比较的 Document 元素。
- 其他方法
删除数据库或集合,代码如下:
mDatabase.drop();collection.drop();
关闭客户端连接,代码如下:
mongoClient.close();