1. 基于Java基本操作
package com.czxy.xuecheng;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
@RunWith(SpringRunner.class)
public class MongoTest {
@Test
public void testConnection(){
MongoClient mongoClient = new MongoClient("localhost", 27017);
System.out.println(mongoClient);
}
@Test
public void FindFirst(){
MongoClientURI connectionString = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> student = database.getCollection("student");
Document first = student.find().first();
String s = first.toJson();
System.out.println(s);
}
@Test
public void testCollection(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
database.createCollection("teacher");
}
@Test
public void testDocument(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> collection = database.getCollection("teacher");
Document document = new Document();
document.append("name","L老师");
document.append("age",18);
document.append("phone","18181818181");
document.append("sex","男");
collection.insertOne(document);
}
@Test
public void ArrayCollection(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> collection = database.getCollection("teacher");
Document dco1 = new Document();
dco1.append("name","M老师");
dco1.append("age",19);
dco1.append("phone","18191819181");
dco1.append("sex","男");
Document dco2 = new Document();
dco2.append("name","Z老师");
dco2.append("age",18);
dco2.append("phone","19191919191");
dco2.append("sex","女");
ArrayList<Document> documents = new ArrayList<>();
documents.add(dco1);
documents.add(dco2);
collection.insertMany(documents);
}
@Test
public void testSelectAll(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> teacher = database.getCollection("teacher");
FindIterable<Document> documents = teacher.find();
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
String name = document.get("name", String.class);
Integer age = document.get("age", Integer.class);
String phone = document.get("phone", String.class);
String sex = document.get("sex", String.class);
System.out.println(name+","+age+","+phone+","+sex);
}
}
@Test
public void testUpdate(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> teacher = database.getCollection("teacher");
teacher.updateMany(Filters.eq("age",18),new Document("$set",new Document("age",20)));
}
@Test
public void testDelete(){
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
MongoClient mongoClient = new MongoClient(mongoClientURI);
MongoDatabase database = mongoClient.getDatabase("user");
MongoCollection<Document> teacher = database.getCollection("teacher");
teacher.deleteOne(Filters.eq("age",19));
}
}
2. 整合 Spring Data
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
spring:
data:
mongodb:
uri: mongodb://root:root@localhost:27017/user
package com.czxy.xuecheng.domain;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "teacher")
@Data
public class Teachers {
@Id
private String id;
private String name;
private Integer age;
private String phone;
private String sex;
}
- 步骤四:编写dao,继承 MongoRepository
package com.czxy.xuecheng.dao;
import com.czxy.xuecheng.domain.Teacher;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface TeacherRepository extends MongoRepository<Teacher,String> {
}
- 步骤五:编写启动类,使用 @ComponentScan 扫描dao
package com.czxy.xuecheng;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = "com.czxy.xuecheng.dao")
public class TeacherApplication {
public static void main(String[] args) {
SpringApplication.run(TeacherApplication.class,args);
}
}
package com.czxy.xuecheng;
import com.czxy.xuecheng.dao.TeacherRepository;
import com.czxy.xuecheng.domain.Teachers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TeacherApplication.class)
public class SpringMongoDBTest {
@Resource
private TeacherRepository teacherRepository;
@Test
public void FindAll(){
List<Teachers> tlist = teacherRepository.findAll();
System.err.println(tlist);
}
@Test
public void FindListBySort(){
List<Teachers> tlist = teacherRepository.findAll(Sort.by(Sort.Order.desc("age")));
for (Teachers teachers : tlist) {
System.err.println(teachers);
}
}
@Test
public void FindListByPage(){
int page = 0;
int size = 1;
Page<Teachers> pi = teacherRepository.findAll(PageRequest.of(page, size));
List<Teachers> teachersList = pi.getContent();
System.err.println("总条数:"+pi.getTotalElements());
for (Teachers teachers : teachersList) {
System.err.println(teachers);
}
}
@Test
public void AddTeacher(){
Teachers t = new Teachers();
t.setName("Z老师");
t.setAge(18);
t.setPhone("11111111111");
t.setSex("女");
teacherRepository.insert(t);
}
@Test
public void UpdateTeacher(){
Optional<Teachers> teachersOptional = teacherRepository.findById("5ee6e9efcc77594068db7e0f");
if (teachersOptional.isPresent()){
Teachers teachers = teachersOptional.get();
teachers.setName("梁老师");
teacherRepository.save(teachers);
}
}
@Test
public void FindTeacherByID(){
Optional<Teachers> Optional = teacherRepository.findById("5ee6e9efcc77594068db7e0f");
if (Optional.isPresent()){
Teachers teachers = Optional.get();
System.err.println(teachers);
}else{
System.err.println("没有数据");
}
}
@Test
public void deleteByID(){
teacherRepository.deleteById("5ee8968f21ea5353500148c9");
}
自定义Dao
@Test
public void FindTeacherByName(){
Teachers teacher = teacherRepository.findByName("梁老师");
System.err.println(teacher);
}
@Test
public void findByNameLikeAndAge(){
List<Teachers> tlist = teacherRepository.findByNameLikeAndAge("老师",20);
for (Teachers teachers : tlist) {
System.err.println(teachers);
}
}
@Test
public void findByNameLike(){
int Page = 0;
int Size = 2;
PageRequest pageRequest = PageRequest.of(Page, Size);
org.springframework.data.domain.Page<Teachers> page = teacherRepository.findByNameLike("老师",pageRequest);
List<Teachers> teachersList = page.get().collect(Collectors.toList());
for (Teachers teachers : teachersList) {
System.err.println(teachers);
}
}
}
条件查询 模板MongoTemplate
- 只要能使用 MongoRepository的,就可以直接使用MongoTemplate,Repository底层使用的就是Template。
- 编写测试类,获得Template
package com.czxy.xuecheng;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestMongo2Application.class )
public class TestMongoTemplate {
@Resource
private MongoTemplate mongoTemplate;
@Test
public void testFind(){
System.out.println(mongoTemplate);
}
}
@Test
public void testFind(){
Query query = new Query();
query.addCriteria( Criteria.where("age").is(20) );
List<Teacher> list = mongoTemplate.find(query, Teacher.class);
list.forEach(System.out::println);
}
@Test
public void testFind2(){
Query query = new Query();
query.addCriteria( Criteria.where("age").gte(25) );
List<Teacher> list = mongoTemplate.find(query, Teacher.class);
for (Teacher teacher : list) {
System.out.println(teacher);
}
}
@Test
public void testFind3(){
int pageNum = 0;
int pageSize = 2;
PageRequest pageRequest = PageRequest.of(pageNum, pageSize);
Query query = new Query();
query.addCriteria(Criteria.where("age").is(21));
long count = mongoTemplate.count(query, Teacher.class);
System.out.println(count);
query.with(pageRequest);
List<Teacher> list = mongoTemplate.find(query, Teacher.class);
list.forEach(System.out::println);
}
@Test
public void testFind4(){
Sort sort = Sort.by(Sort.Order.asc("age"));
int pageNum = 0;
int pageSize = 2;
PageRequest pageRequest = PageRequest.of(pageNum, pageSize,sort);
Query query = new Query();
query.addCriteria(Criteria.where("password").is("666777"));
long count = mongoTemplate.count(query, Teacher.class);
System.out.println(count);
query.with(pageRequest);
List<Teacher> list = mongoTemplate.find(query, Teacher.class);
list.forEach(System.out::println);
}
@Test
public void testFind5(){
String username = "o";
Query query = new Query();
Pattern pattern = Pattern.compile("^.*"+username+".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria( Criteria.where("username").regex(pattern));
List<Teacher> list = mongoTemplate.find(query,Teacher.class);
list.forEach(System.out::println);
}