MongoDB的基本使用
springboot项目 第一步加依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> </parent> <groupId>cn.itcast.mongodb</groupId> <artifactId>itcast-mongodb</artifactId> <version>1.0-SNAPSHOT</version> <dependencies>
<!--<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.9.1</version>
</dependency>-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <version>1.18.4</version> </dependency> </dependencies> <build> <plugins> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
第二步 配置 编写application.properties配置文件
# Spring boot application spring.application.name = itcast-mongodb #无认证信息的配置 #spring.data.mongodb.uri=mongodb://192.168.31.81:27017/tanhua #springboot 配置 spring.data.mongodb.username=tanhua spring.data.mongodb.password=l3SCjl0HvmSkTtiSbN0Swv40spYnHhDV spring.data.mongodb.authentication-database=admin spring.data.mongodb.database=tanhua spring.data.mongodb.port=27018 spring.data.mongodb.host=192.168.31.81
第三步 实体示例
@Data @Builder @AllArgsConstructor @NoArgsConstructor @Document(collection = "abcUser") // 这个注解是指定当前实体对应的表名称 public class User implements Serializable { // 实体中的属性名称是 id 自动对应 _id // 如果没有id属性 默认也会有一个 _id 值是十六进制字符串 private ObjectId id; //@Id // 把这个字段值作为 _id的值 //private String userid; private String username; // @Indexed // 会对这个属性创建索引 private Integer age; private String password; private Date birthday; } @Data @AllArgsConstructor @NoArgsConstructor public class Person { private ObjectId id; private String name; private int age; private Address address; } @Data @AllArgsConstructor @NoArgsConstructor public class Address { private String street; private String city; private String zip; }
第四步:dao
@Component public class PersonDao { @Autowired private MongoTemplate mongoTemplate; //增 public void savePerson(Person person) { this.mongoTemplate.save(person); } //根据名字查 public List<Person> queryPersonListByName(String name) { Query query = Query.query(Criteria.where("name").is(name)); return this.mongoTemplate.find(query, Person.class); } //分页查询 public List<Person> queryPersonPageList(Integer page, Integer rows) { Query query = new Query().limit(rows).skip((page - 1) * rows); return this.mongoTemplate.find(query, Person.class); } //修改 public UpdateResult update(Person person) { Query query = Query.query(Criteria.where("id").is(person.getId())); Update update = Update.update("age", person.getAge()); return this.mongoTemplate.updateFirst(query, update, Person.class); } 删除 public DeleteResult deleteById(String id) { Criteria.where("id").is(12).and("dsf").is(12) .orOperator(Criteria.where("").is(23)); Query query = Query.query(Criteria.where("id").is(id)); return this.mongoTemplate.remove(query, Person.class); } }
第五步:测试
@RunWith(SpringRunner.class) @SpringBootTest(classes = MongoApplication.class) public class TestPersonDao { @Autowired private PersonDao personDao; //增 @Test public void testSave() { Person person = new Person(ObjectId.get(), "张三", 20, new Address("人民路", "上海市", "666666")); this.personDao.savePerson(person); } //根据名字查 @Test public void testQuery() { List<Person> personList = this.personDao.queryPersonListByName("张三"); for (Person person : personList) { System.out.println(person); } } //分页查 @Test public void testQuery2() { List<Person> personList = this.personDao.queryPersonPageList(2, 2); for (Person person : personList) { System.out.println(person); } } //修改 @Test public void testUpdate() { Person person = new Person(); person.setId(new ObjectId("5c0956ce235e192520086736")); person.setAge(30); this.personDao.update(person); } //删除 @Test public void testDelete() { this.personDao.deleteById("5c09ca05235e192d8887a389"); } }
User测试
@RunWith(SpringRunner.class) @SpringBootTest public class TestSpringUser { //注入mongodb @Autowired private MongoTemplate mongoTemplate; @Test public void test01() { // ObjectId("5fec33c5c61d9528b062b790") // ObjectId 是MongoDB中主键类型 长度是24位的16进制数 0-9 a-f // 所以不是任何的字符串都可以转成ObjectID // 添加一个 指定id //User user = User.builder().id(1).username("aaa").password("123").birthday(new Date()).age(21).build(); //User user = User.builder().id("10").username("aaa").password("123").birthday(new Date()).age(21).build(); /* User user = User.builder().username("aaa").password("123").birthday(new Date()).age(21).build(); // tanhua.user.insert({}) // 如果不指定表名 默认是 实体类的类名 User insert = mongoTemplate.insert(user,"adminuser"); //User insert = mongoTemplate.insert(user); System.out.println("insert = " + insert);*/ // 添加一个 不指定id 报异常 // 可以将id属性去除再添加自动生成id 或者将id设置为字符串 // 新插入数据将自动带回id /*User user = User.builder().username("aaa").password("123").birthday(new Date()).age(21).build(); User insert = mongoTemplate.insert(user); System.out.println("insert = " + insert);*/ // 添加多个 User user2 = User.builder().username("aaa").password("123").birthday(new Date()).age(20).build(); User user3 = User.builder().username("abd").password("123").birthday(new Date()).age(21).build(); User user4 = User.builder().username("ddd").password("123").birthday(new Date()).age(22).build(); User user5 = User.builder().username("daa").password("123").birthday(new Date()).age(23).build(); User user6 = User.builder().username("ada").password("123").birthday(new Date()).age(24).build(); ArrayList<User> users = new ArrayList<>(); users.add(user2); users.add(user3); users.add(user4); users.add(user5); users.add(user6); Collection<User> users1 = mongoTemplate.insertAll(users); for (User user : users1) { System.out.println("user = " + user); } /*Collection<User> usesr = mongoTemplate.insert(users); for (User user : usesr) { System.out.println("user = " + user); }*/ } @Test public void test02() { // 删除 //User user2 = User.builder().username("aaa").password("123").birthday(new Date()).age(21).build(); //User user2 = User.builder().id("5fec3544c61d951450500895").username("aaa").password("123").birthday(new Date()).age(21).build(); //User user2 = User.builder().id("5fec3544c61d951450500894").build(); /*User user2 = User.builder().id(new ObjectId("60dacdc058b1c93bb0409040")).username("ddd").build(); // 该对象必须要有id才可以删除 DeleteResult remove = mongoTemplate.remove(user2); System.out.println("remove = " + remove);*/ // 根据条件删除 // 名字是aaa的 如果有多条匹配的都会被删除 /*Query query = Query.query(Criteria.where("username").is("aaa")); mongoTemplate.remove(query,"user");*/ // 名称中包含d 且 年龄>20 或者 年龄=21 // regex("d") %d% // regex("^d") d% // regex("d$") %d // regex("^d$") ==d ddd 是不对的 /*Criteria cr = new Criteria(); cr.orOperator(Criteria.where("username").regex("^d$").and("age").gt(20), Criteria.where("age").is(21)); List<User> user = mongoTemplate.find(Query.query(cr), User.class, "abcUser"); for (User user1 : user) { System.out.println("user1 = " + user1); }*/ /*Criteria cr = new Criteria(); cr.orOperator(Criteria.where("username").regex("d").and("age").gt(20), Criteria.where("age").is(21)); mongoTemplate.remove(Query.query(cr), "user");*/ } @Test public void test03() { // 更新 只修改我们更新的字段 不会覆盖其他字段 mongoTemplate.updateFirst(Query.query(Criteria.where("age").is(20)), Update.update("password", "456"), "abcUser"); /*Update update = new Update(); update.set("password","aaaa"); update.set("username","xxoo"); update.set("address","xxoo123"); update.set("birthday",new Date()); mongoTemplate.updateFirst(Query.query(Criteria.where("age").is(20)), update, "user");*/ /*Query query = new Query(); Criteria ccc = new Criteria(); ccc.and("username").is("aaa"); query.addCriteria(ccc); Update updat = new Update(); updat.set("password","456"); mongoTemplate.updateFirst(query,updat,User.class);*/ } @Test public void test04() { // 查询 // 查询所有 /*List<User> all = mongoTemplate.findAll(User.class); for (User user : all) { System.out.println("user = " + user); }*/ // 根据条件查询 /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("age").is(20)), User.class); for (User user : age) { System.out.println("user = " + user); }*/ /*List<Map> age = mongoTemplate.find(Query.query(Criteria.where("age").is(20)), Map.class,"user"); for (Map map : age) { System.out.println("map = " + map); }*/ // 多条件查询 /*List<User> users = mongoTemplate.find(Query.query(Criteria.where("username").is("aaa") .and("password").is("123") .and("age").gte(18) ), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // username = aaa or age >= 22 /*List<User> users = mongoTemplate.find(Query.query(Criteria.where("username").is("aaa") .orOperator(Criteria.where("age").gte(22)) ), User.class);*/ /*Criteria criteria = new Criteria(); criteria.and("username").is("aaa"); Criteria criteria2 = new Criteria(); criteria2.and("age").gte(22); Criteria ccc = new Criteria(); ccc.orOperator(criteria,criteria2); List<User> users = mongoTemplate.find(Query.query(ccc), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 模糊查询 // 名称中包含d 且 年龄>20 或者 年龄=21 // regex("d") %d% // regex("^d") d% // regex("d$") %d // regex("^d$") ==d ddd 是不对的 /*List<User> users = mongoTemplate.find(Query.query(Criteria.where("username").regex("^d$")), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 分页查询 /*int rows = 2; // 每次查询的记录条数 int page = 2; // 每次查询的页码 Query query = new Query().limit(rows).skip((page - 1) * rows); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ /*Query query = new Query(); query.with(PageRequest.of(0,10)) .with(new Sort(Sort.Direction.DESC,"age")); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 排序查询 query.with().limit().skip() /*Query query = new Query(); query.with(new Sort(Sort.Direction.DESC,"age")); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 统计全部 /*long user = mongoTemplate.count(new Query(), "user"); System.out.println("user = " + user);*/ // 条件统计 long count = mongoTemplate.count(Query.query(Criteria.where("username").is("aaa")), User.class); System.out.println("count = " + count); } }
@RunWith(SpringRunner.class) @SpringBootTest public class TestSpringUser49 { @Autowired private MongoTemplate mongoTemplate; /** * 添加数据到Mongodb中 */ @Test public void test01() { // 如果不指定表名 默认是类名 // mongoTemplate.insert(User.builder().id(1).username("zhs").password("123").birthday(new Date()).build()); // mongoTemplate.insert(User.builder().id(1).username("zhs").password("123").birthday(new Date()).build(),"abcUser"); // User lsi = mongoTemplate.insert(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); // System.out.println("lsi = " + lsi); /*User user = User.builder().userid("10010").username("ww4").password("123").birthday(new Date()).build(); //mongoTemplate.insert(user,"aaa"); // 如果没有手动指定表名 默认是 对象的 类名 mongoTemplate.insert(user);*/ /*ArrayList userList = new ArrayList(); userList.add(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); userList.add(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); userList.add(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); userList.add(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); userList.add(User.builder().username("zhliu").password("123456").birthday(new Date()).build()); // 批量插入 mongoTemplate.insertAll(userList);*/ } /** * 修改MongoDB中的数据 */ @Test public void test02() { // 分步骤去写 // Query query = new Query(); // Criteria cc = new Criteria(); // cc.and("username").is("zhs"); // cc.and("age").gt(20); // // address中包含hangzhou的 // cc.and("address").regex("hangzhou"); // query.addCriteria(cc); // // Update update = new Update(); // update.set("passwrod", "123"); // mongoTemplate.updateFirst(query, update, User.class); // 必须要掌握的写法 mongoTemplate.updateFirst(Query.query(Criteria.where("username").is("zhs") .and("age").gt(20) .and("age").gt(20) .and("age").gt(20) .and("age").gt(20) ), Update.update("password", "123") .set("", "") .set("", "") , User.class); /*UpdateResult result = mongoTemplate.updateMulti(Query.query(Criteria.where("username").is("zhliu")), Update.update("password", "456"), User.class);*/ /*UpdateResult result = mongoTemplate.updateMulti(Query.query(Criteria.where("age").gte(22)), Update.update("password", "123").set("age",19) , User.class); System.out.println("result = " + result);*/ } /** * 删除MongoDB中的数据 */ @Test public void test03() { // 根据对象删除 这个对象必须要有id属性 其他属性可以写也可以不写 写了也没有用 //mongoTemplate.remove(User.builder().id(new ObjectId("612b334163190e29d4a541aa")).username("zhs").build()); // 根据条件删除 mongoTemplate.remove(Query.query(Criteria.where("password").is("1234")), User.class); } @Test public void test04() { // 查询 // 根据id查询 // User user = mongoTemplate.findById("612b34f963190e1d704d77c4", User.class); // System.out.println("user = " + user); // Map user = mongoTemplate.findById("612b34f963190e1d704d77c4", Map.class, "aaa"); // System.out.println("user = " + user); // User user = mongoTemplate.findById("612b34f963190e1d704d77c4", User.class, "aaa"); // System.out.println("user = " + user); // 查询所有 // List<User> all = mongoTemplate.findAll(User.class); // for (User user : all) { // System.out.println("user = " + user); // } // 根据条件查询 // 查询年龄>22 // List<User> age = mongoTemplate.find(Query.query(Criteria.where("password").is("123")), User.class); // for (User user : age) { // System.out.println("user = " + user); // } // 查询名字中包含 d 的 // %w% /*List<User> users = mongoTemplate.find(Query.query(Criteria.where("username").regex("w")), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 查询名字 以w 开头的 w% /*List<User> username = mongoTemplate.find(Query.query(Criteria.where("username").regex("^w")), User.class); for (User user : username) { System.out.println("user = " + user); }*/ // 查询名字 以w结尾的 %w /*List<User> username = mongoTemplate.find(Query.query(Criteria.where("username").regex("w$")), User.class); for (User user : username) { System.out.println("user = " + user); }*/ // ^w$ == w /*List<User> username = mongoTemplate.find(Query.query(Criteria.where("username").regex("^w$")), User.class); for (User user : username) { System.out.println("user = " + user); }*/ // 多条件查询 // 模糊查询 // 年龄 > 22 并且 名称包含w的 /*List<User> username = mongoTemplate.find(Query.query(Criteria.where("username").regex("w") .and("age").gt(22)), User.class); for (User user : username) { System.out.println("user = " + user); }*/ // password = 456 或者 名称包含w的 // 错误的写法 /*List<User> users = mongoTemplate.find(Query.query(Criteria.where("password").is("456") .orOperator(Criteria.where("username").regex("w"))), User.class); for (User user : users) { System.out.println("user = " + user); }*/ /* // 创建一个条件 年龄 = 20 Criteria criteria1 = new Criteria(); criteria1.and("age").is(20); // 创建一个条件 名称包含d的 Criteria criteria2 = new Criteria(); criteria2.and("username").regex("d"); // 创建了一个条件 Criteria criteria = new Criteria(); criteria.orOperator(criteria1,criteria2);*/ // 总的条件 里面可以包含多个子的条件 /*Criteria criteria = new Criteria(); criteria.orOperator(Criteria.where("age").is(20),Criteria.where("username").regex("d")); List<User> users = mongoTemplate.find(Query.query(criteria), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 分页查询 /*Query query = new Query(); // PageRequest 页码从0开始 query.with(PageRequest.of(1, 2)); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 排序查询 query.with().limit().skip() /*Query query = new Query(); query.with(Sort.by(Sort.Direction.DESC,"password")); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 统计全部 // long count = mongoTemplate.count(new Query(), User.class); // System.out.println("count = " + count); // 条件统计 名字中包含a // long count = mongoTemplate.count(Query.query(Criteria.where("username").regex("w")), User.class); // System.out.println("count = " + count); } }
@RunWith(SpringRunner.class) @SpringBootTest public class TestSpringUser51 { /* 在MongoDB中不用先创建表/集合 可以直接往一个表中添加数据 MongoDB会自动创建这个表 */ @Autowired private MongoTemplate mongoTemplate; /** * 添加数据到Mongodb中 */ @Test public void test01() { // 不指定表名 默认是实体类名称 // 如果我们的实体类名和集合名称不一致怎么办 /*mongoTemplate.insert(User.builder() .username("zhs").password("123").age(23).birthday(new Date()) .build());*/ // 指定表名 /*User user = mongoTemplate.insert(User.builder() .username("zhs").password("123").age(23).birthday(new Date()) .build(), "abcdUser"); System.out.println("user = " + user);*/ // ID的类型 // 如果我们的id类型是 int 我们要自己去维护这个id的值 MongoDB不能自动生成 // 如果我们的id类型是 String 或者 ObjectID MongoDB会自动生成 // 我们在返回值中可以拿到MongoDB中默认生成的那个ID值 /*User user = mongoTemplate.insert(User.builder() .username("zhs12345").password("123").age(23).birthday(new Date()) .build()); System.out.println("user = " + user);*/ ArrayList<User> userList = new ArrayList<>(); userList.add(User.builder().username("zhs").password("123").age(23).birthday(new Date()).build()); userList.add(User.builder().username("lis").password("123").age(24).birthday(new Date()).build()); userList.add(User.builder().username("ww").password("123").age(45).birthday(new Date()).build()); userList.add(User.builder().username("zhliu").password("123").age(56).birthday(new Date()).build()); mongoTemplate.insertAll(userList); } /** * 修改MongoDB中的数据 */ @Test public void test02() { // 分步骤去写 /*// username = zhangsan12345 age = 100 Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("username").is("zhs12345"); query.addCriteria(criteria); Update update = new Update(); update.set("age", 100); mongoTemplate.updateFirst(query,update,User.class);*/ // 常用写法(掌握) //mongoTemplate.updateFirst(Query.query(Criteria.where("username").is("zhs12345")), Update.update("age","200"), User.class); /*mongoTemplate.updateFirst(Query.query(Criteria.where("username").is("zhs12345").and("age").gt(45)), Update.update("age","200") .set("password", "789") , User.class);*/ // 修改单条 // 修改多条 // age > 30 password = 456 mongoTemplate.updateMulti(Query.query(Criteria.where("age").gt(30)), Update.update("password","456"), User.class); } /** * 删除MongoDB中的数据 */ @Test public void test03() { // 根据ID进行删除 传一个Bean 要求必须有ID属性 其他属性写不写都没有用 //mongoTemplate.remove(User.builder().id(new ObjectId("6162a9203f3bce10e00d1916")).username("zhs111").password("123567").age(23).build()); // 根据条件删除 mongoTemplate.remove(Query.query(Criteria.where("password").is("456")), User.class); } /** * 查询MongoDB中的数据 */ @Test public void test04() { // 查询 // 根据id查询 User.class 的作用是啥 : 代表要查询的是那个表 结果集的封装 // User byId = mongoTemplate.findById(new ObjectId("6162ac693f3bce21a4ccb1b7"), User.class); // System.out.println("byId = " + byId); // Map abcUser = mongoTemplate.findById(new ObjectId("6162ac693f3bce21a4ccb1b7"), Map.class, "abcUser"); // System.out.println("abcUser = " + abcUser); // 查询所有 /*List<User> all = mongoTemplate.findAll(User.class); for (User user : all) { System.out.println("user = " + user); }*/ // 条件查询 // 查询年龄>22 /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("age").gt(22)), User.class); for (User user : age) { System.out.println("user = " + user); }*/ // 模糊查询 // 查询名字中包含 i 的 /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("i")), User.class); for (User user : age) { System.out.println("user = " + user); }*/ // 查询名字 以w 开头的 w% /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("^w")), User.class); for (User user : age) { System.out.println("user = " + user); }*/ // 查询名字 以w结尾的 %w /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("w$")), User.class); for (User user : age) { System.out.println("user = " + user); }*/ /* ^w$ == w */ /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("^w$")), User.class); for (User user : age) { System.out.println("user = " + user); }*/ // 年龄 > 30 并且 名称包含w的 /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("w").and("age").gt(30)), User.class); for (User user : age) { System.out.println("user = " + user); }*/ // password = 456 或者 名称包含w的 // 错误写法 /*List<User> age = mongoTemplate.find(Query.query(Criteria.where("username").regex("w") .orOperator(Criteria.where("password").is("456"))), User.class); for (User user : age) { System.out.println("user = " + user); }*/ /*Query query = new Query(); Criteria criteria = new Criteria(); Criteria criteria1 = new Criteria(); criteria1.and("password").is("456"); Criteria criteria2 = new Criteria(); criteria2.and("username").regex("w"); criteria.orOperator(criteria1,criteria2); query.addCriteria(criteria); List<User> age = mongoTemplate.find(query, User.class); for (User user : age) { System.out.println("user = " + user); }*/ /*Criteria criteria = new Criteria(); criteria.orOperator(Criteria.where("username").regex("w"),Criteria.where("password").is("456")); List<User> users = mongoTemplate.find(Query.query(criteria), User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 分页查询 /*Query query = new Query(); //query.limit(2).skip(2); query.with(PageRequest.of(1,2)); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 排序查询 /*Query query = new Query(); query.with(Sort.by(Sort.Direction.DESC,"age")); List<User> users = mongoTemplate.find(query, User.class); for (User user : users) { System.out.println("user = " + user); }*/ // 统计全部 // long count = mongoTemplate.count(new Query(), User.class); // System.out.println("count = " + count); // 条件统计 名字中包含w // long count = mongoTemplate.count(Query.query(Criteria.where("username").regex("w")), User.class); // System.out.println("count = " + count); } }
启动类
@SpringBootApplication public class MongoApplication { public static void main(String[] args) { SpringApplication.run(MongoApplication.class, args); } }

浙公网安备 33010602011771号