springboot系列14:单数据源MongoDB
MongoDB 简介
MongoDB 是最早热门非关系数据库的之一,高性能,开源,无模式的文档型数据库,使用也比较普遍,一般会用做离线数据分析来使用。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。一条记录就是一个文档,是一个数据结构,由字段和值对组成。MongoDB 文档与 JSON 对象类似。字段的值有可能包括其它文档、数组以及文档数组。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MongoDB 的增删改查
1、pom 配置
<dependencies> <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> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2、在 application.properties 配置
spring.data.mongodb.uri=mongodb://localhost:28018/test
3、创建用户实体
public class User implements Serializable { private Long id; private String userName; private String passWord; //get set }
4、创建实体的增删改查操作
package top.zlcxy.mongodb.repository.impl; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; import org.springframework.beans.factory.annotation.Autowired; 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.Component; import top.zlcxy.mongodb.domain.User; import top.zlcxy.mongodb.repository.UserRepository; @Component public class UserRepositoryImpl implements UserRepository { @Autowired private MongoTemplate mongoTemplate; @Override public long saveUser(User user) { return mongoTemplate.save(user) != null ? 1 : 0; } @Override public User findUserByUserName(String userName) { Query query = new Query(Criteria.where("userName").is(userName)); User user = mongoTemplate.findOne(query, User.class); return user; } @Override public long updateUser(User user) { Query query = new Query(Criteria.where("id").is(user.getId())); Update update = new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord()); //更新查询返回结果集的第一条 UpdateResult result = mongoTemplate.updateFirst(query, update, User.class); return result != null ? result.getMatchedCount() : 0; } @Override public long deleteUserById(Long id) { Query query = new Query(Criteria.where("id").is(id)); DeleteResult result = mongoTemplate.remove(query, User.class); return result != null ? result.getDeletedCount() : 0; } }
4、测试方法
package top.zlcxy.mongodb; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import top.zlcxy.mongodb.domain.User; import top.zlcxy.mongodb.repository.UserRepository; @RunWith(SpringRunner.class) @SpringBootTest public class UserRepositoryTest { @Autowired private UserRepository userRepository; @Test public void testSaveUser() throws Exception { User user = new User(); user.setId(3l); user.setUserName("小明"); user.setPassWord("123"); Assert.assertEquals("新增成功",userRepository.saveUser(user),1L); } @Test public void findUserByUserName() { User user = userRepository.findUserByUserName("小明"); Assert.assertNotNull(user); } @Test public void updateUser() { User user = new User(); user.setId(2l); user.setUserName("小红"); user.setPassWord("456"); Assert.assertEquals("更新成功",userRepository.updateUser(user),1L); } @Test public void deleteUserById() { Assert.assertEquals("删除成功",userRepository.deleteUserById(1l),1L); } }
5、测试结果