Spring Boot + MongoDB 增刪改查的簡單使用
阿新 • • 發佈:2018-12-24
MongoDB簡介
mongodb是一個介於nosql資料庫和mysql資料庫之間的一個數據儲存系統,它沒有嚴格的資料格式,但同時支援複雜查詢,而且自帶sharding模式和Replica Set模式,支援分片模式,複製模式,自動故障處理,自動故障轉移,自動擴容,全內容索引,動態查詢等功能。擴充套件性和功能都比較強大。
mongodb在資料查詢方面,支援類sql查詢,可以一個key多value內容,可以組合多個value內容來查詢,支援索引,支援聯合索引,支援複雜查詢 ,支援排序,基本上除了join和事務型別的操作外,mongodb支援所有mysql支援的查詢,甚至某個客戶端api支援直接使用sql語句查詢mongodb。
MongoDB的優缺點
優點
- 文件結構的儲存方式,能夠更便捷的獲取資料
- 內建GridFS,支援大容量的儲存
- 內建Sharding,分片簡單
- 海量資料下,效能優越
- 支援自動故障恢復(複製集)
- 不支援事務操作
- 佔用空間過大
- MongoDB沒有如MySQL那樣成熟的維護工具
- 無法進行關聯表查詢,不適用於關係多的資料
- 複雜聚合操作通過mapreduce建立,速度慢
- 模式自由, 自由靈活的檔案儲存格式帶來的資料錯誤
MongoDB的增刪改查
1、pom包配置
首先安裝MongoDB,然後建立一個spring boot 的web專案,然後在pom.xml上增加MongoDB的導包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2、在application.properties中新增配置
spring.data.mongodb.uri=mongodb://localhost:27017/test
我的MongoDB安裝在本地,埠預設都是27017,用的庫是test。
3、建立資料實體
如果沒有設定id欄位,mongodb會預設生成一個唯一的_id。public class UserEntity implements Serializable { private static final long serialVersionUID = -7084823252504701248L; private Long userId; private String userName; private String passsWord; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPasssWord() { return passsWord; } public void setPasssWord(String passsWord) { this.passsWord = passsWord; } }
3、使用MongoTemple建立實體dao的增刪改查操作
dao層的實現方法
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 建立物件
* @param user
*/
public void saveUser(UserEntity user) {
mongoTemplate.save(user);
}
/**
* 根據使用者名稱查詢物件
* @param userName
* @return
*/
public UserEntity findUserByUserName(String userName){
Query query = new Query(Criteria.where("userName").regex(userName));//模糊查詢
return mongoTemplate.findOne(query,UserEntity.class);
}
/**
* 更新物件
* @param user
*/
public void updateUser(UserEntity user){
Query query = new Query(Criteria.where("id").is(user.getUserId()));
Update update = new Update().set("userName",user.getUserName()).set("passWord",user.getPasssWord());
//更新查詢返回結果集的第一條
mongoTemplate.updateFirst(query,update,UserEntity.class);
}
/**
* 刪除物件
* @param id
*/
public void deleteUserById(Long id){
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query,UserEntity.class);
}
/**
* 根據Id查詢物件
* @param Id
* @return
*/
public UserEntity findUserById(Long Id){
Query query = new Query(Criteria.where("user").is(Id));
return mongoTemplate.findOne(query,UserEntity.class);
}
/**
* 根據使用者名稱查詢數量
* @param userName
* @return
*/
public Long findCountByUserName(String userName){
Query query = new Query(Criteria.where("userName").regex(userName));
Long num = mongoTemplate.count(query,UserEntity.class);
return num;
}
/**
* 分頁查詢
* @param pageNo
* @param pageSize
* @return
*/
public List<UserEntity> findAll(int pageNo,int pageSize){
Query query = new Query();
query.skip((pageNo - 1) * pageSize);
query.limit(pageSize);
query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "userId")));//按照userId排序
List<UserEntity> users = mongoTemplate.find(query,UserEntity.class);
return users;
}
service層實現方法
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
/**
* 建立物件
* @param user
*/
public void saveUser(UserEntity user) {
userDao.saveUser(user);
}
/**
* 根據使用者名稱查詢物件
* @param userName
* @return
*/
public UserEntity findUserByUserName(String userName){
return userDao.findUserByUserName(userName);
}
/**
* 根據Id查詢物件
* @param Id
* @return
*/
public UserEntity findUserById(Long Id){
return userDao.findUserById(Id);
}
/**
* 根據使用者名稱查詢數量
* @param userName
* @return
*/
public Long findCountByUserName(String userName){
return userDao.findCountByUserName(userName);
}
/**
* 更新物件
* @param user
*/
public void updateUser(UserEntity user){
userDao.updateUser(user);
}
/**
* 刪除物件
* @param id
*/
public void deleteUserById(Long id){
userDao.deleteUserById(id);
}
public List<UserEntity> findAll(int pageNo, int pageSize){
return userDao.findAll(pageNo,pageSize);
}
}
介面層controller實現方法
@RestController
public class UserController {
@Autowired
private UserService userService;
/**
* 新增
* @return
*/
@RequestMapping(value = "/add")
public void addUser(@RequestParam(value = "id",required = false)Long id,@RequestParam(value = "name",required = false)String name,@RequestParam(value = "pwd",required = false)String pwd){
UserEntity userEntity = new UserEntity();
userEntity.setUserId(id);
userEntity.setUserName(name);
userEntity.setPasssWord(pwd);
userService.saveUser(userEntity);
}
/**
* 改
* @return
*/
@RequestMapping("/update")
public void updateUser(@RequestParam("id")Long id,@RequestParam("name")String name,@RequestParam("pwd")String pwd){
UserEntity userEntity = new UserEntity();
userEntity.setUserName(name);
userEntity.setPasssWord(pwd);
userService.updateUser(userEntity);
}
/**
* 查 名字
* @return
*/
@RequestMapping("/name/query/{userName}")
public UserEntity finUserByName(@PathVariable("userName")String userName){
return userService.findUserByUserName(userName);
}
/**
* 查 名字 數量
* @return
*/
@RequestMapping("/name/query/count/{userName}")
public Long finCountByName(@PathVariable("userName")String userName){
return userService.findCountByUserName(userName);
}
/**
* 查 id
* @return
*/
@RequestMapping("/id/query/{id}")
public UserEntity finUserById(@PathVariable("id")Long id){
return userService.findUserById(id);
}
/**
* 刪除
* @return
*/
@RequestMapping("/delete")
public void findOneUser(@RequestParam("id")Long id){
userService.deleteUserById(id);
}
/**
* 分頁
* @return
*/
@RequestMapping("/query/{pageInde}/{pageSize}")
public List<UserEntity> findOneUser(@PathVariable("pageInde")int pageInde,@PathVariable("pageSize")int pageSize){
return userService.findAll(pageInde,pageSize);
}
}