1讼稚、什么是MongoDB ?
MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫椭赋。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案雇庙。
MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品谓形,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的状共。
MongoDB 是由C++語言編寫的套耕,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)谁帕。
在高負載的情況下峡继,添加更多的節(jié)點,可以保證服務器性能匈挖。
MongoDB 將數(shù)據(jù)存儲為一個文檔碾牌,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。
MongoDB 文檔類似于 JSON 對象儡循。字段值可以包含其他文檔舶吗,數(shù)組及文檔數(shù)組。
MongoDB和關系數(shù)據(jù)庫的對比
mongodb的增刪改查
Spring Boot對各種流行的數(shù)據(jù)源都進行了封裝择膝,當然也包括了mongodb,下面給大家介紹如何在spring boot中使用mongodb:
- 1誓琼、pom包配置
pom包里面添加spring-boot-starter-data-mongodb包引用
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
- 2、在application.properties中添加配置
pom包里面添加spring-boot-starter-data-mongodb包引用
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
- 2肴捉、在application.properties中添加配置
spring.data.mongodb.uri=mongodb://name:password@localhost:27017/admin
2腹侣、創(chuàng)建數(shù)據(jù)實體
@Data
@ToString
public class User implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
@Id
private Long id;
private String username;
private Integer age;
public User(Long id, String username, Integer age) {
this.id = id;
this.username = username;
this.age = age;
}
}
- 實現(xiàn)User的數(shù)據(jù)訪問對象:UserRepository
public interface UserRepository extends MongoRepository<User, Long> {
User findByUsername(String username);
User findByUsernameAndAge(String username, Integer age);
User findByAge(Integer age);
}
- 在單元測試中調(diào)用
@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbApplicationTests {
@Autowired
private UserRepository userRepository;
@Test
public void test1() throws Exception {
// User user = userRepository.findByAge(40);
// System.out.println(user.toString());
User user1 = userRepository.findByUsernameAndAge("mama", 40);
System.out.println(user1.toString());
}
@Test
public void test() throws Exception {
// 創(chuàng)建三個User,并驗證User總數(shù)
userRepository.save(new User(1L, "didi", 30));
userRepository.save(new User(2L, "mama", 40));
userRepository.save(new User(3L, "kaka", 50));
Assert.assertEquals(3, userRepository.findAll().size());
// 刪除一個User齿穗,再驗證User總數(shù)
User u = userRepository.findById(1L).get();
System.out.println(u.toString());
userRepository.delete(u);
Assert.assertEquals(2, userRepository.findAll().size());
// 刪除一個User傲隶,再驗證User總數(shù)
u = userRepository.findByUsername("mama");
System.out.println(u.toString());
// userRepository.delete(u);
Assert.assertEquals(2, userRepository.findAll().size());
}
}
使用 MongoTemplate 操作
- 創(chuàng)建
UserEntity
@Data
public class UserEntity implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
private String userName;
private String passWord;
}
- 創(chuàng)建實體dao的增刪改查操作
dao層實現(xiàn)了UserEntity
對象的增刪改查
@Component
public class UserEntityDao implements IUserEntityDao {
@Autowired
private MongoTemplate mongoTemplate;
public void save() {
UserEntity userEntity = new UserEntity();
userEntity.setUserName("mengma");
userEntity.setPassWord("33333");
mongoTemplate.save(userEntity);
}
public UserEntity findByUserName(String username) {
// 使用 query 對象 聲明查詢 條件
Query query = new Query(Criteria.where("userName").is(username));
UserEntity userEntity = mongoTemplate.findOne(query, UserEntity.class);
return userEntity;
}
/**
* 通過 userName 更新 passWord
*
* @param:
* @return:
* @auther: Tangzhiqiang
* @date: 2019/1/14 9:21
*/
public void updateUser(String userName, String password) {
// 通過 query 對象 聲明更新的條件
Query query = new Query(Criteria.where("userName").is(userName));
// 通過 update 對象 聲明更新字段 值
Update update = new Update().set("passWord", password);
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, UserEntity.class);
}
public void delByUsername(String username) {
Query query = new Query(Criteria.where("userName").is(username));
mongoTemplate.remove(query, UserEntity.class);
}
/**
* 查詢分頁
*
* @param:
* @return:
* @auther: Tangzhiqiang
* @date: 2019/1/14 10:42
*/
public void findPage(int size, int page, String username) {
// 通過 pageable 對象設置 分頁條件
Pageable pageable = new PageRequest(page - 1, size);
// 分頁具體邏輯條件
Query query = new Query(Criteria.where("userName").is(username));
List<UserEntity> userEntityList = mongoTemplate.find(query.with(pageable), UserEntity.class);
System.out.println(userEntityList.toString());
}
}
- 測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserEntityDaoTest {
@Autowired
private UserEntityDao userEntityDao;
@Test
public void save() {
userEntityDao.save();
}
@Test
public void findByUserName() {
UserEntity userEntity = userEntityDao.findByUserName("mengma");
System.out.println(userEntity.toString());
}
@Test
public void updateUser() {
userEntityDao.updateUser("mengma", "99999999");
}
@Test
public void delByUserName() {
userEntityDao.delByUsername("mengma");
}
@Test
public void findPage() {
userEntityDao.findPage(2, 1, "mengma");
}
}
- 分頁查詢
public void findPage(int size, int page, String username) {
// 通過 pageable 對象設置 分頁條件
Pageable pageable = new PageRequest(page - 1, size);
// 分頁具體邏輯條件
Query query = new Query(Criteria.where("userName").is(username));
List<UserEntity> userEntityList = mongoTemplate.find(query.with(pageable), UserEntity.class);
System.out.println(userEntityList.toString());
}