1. 程式人生 > >Spring Boot + MongoDB 增刪改查的簡單使用

Spring Boot + MongoDB 增刪改查的簡單使用

MongoDB簡介

mongodb是一個介於nosql資料庫和mysql資料庫之間的一個數據儲存系統,它沒有嚴格的資料格式,但同時支援複雜查詢,而且自帶sharding模式和Replica Set模式,支援分片模式,複製模式,自動故障處理,自動故障轉移,自動擴容,全內容索引,動態查詢等功能。擴充套件性和功能都比較強大。

    mongodb在資料查詢方面,支援類sql查詢,可以一個key多value內容,可以組合多個value內容來查詢,支援索引,支援聯合索引,支援複雜查詢 ,支援排序,基本上除了join和事務型別的操作外,mongodb支援所有mysql支援的查詢,甚至某個客戶端api支援直接使用sql語句查詢mongodb。

MongoDB的優缺點

優點

  1. 文件結構的儲存方式,能夠更便捷的獲取資料
  2. 內建GridFS,支援大容量的儲存
  3. 內建Sharding,分片簡單
  4. 海量資料下,效能優越
  5. 支援自動故障恢復(複製集)
缺點
  1. 不支援事務操作
  2. 佔用空間過大
  3. MongoDB沒有如MySQL那樣成熟的維護工具
  4. 無法進行關聯表查詢,不適用於關係多的資料
  5. 複雜聚合操作通過mapreduce建立,速度慢
  6. 模式自由,  自由靈活的檔案儲存格式帶來的資料錯誤

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、建立資料實體

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;
    }
}
如果沒有設定id欄位,mongodb會預設生成一個唯一的_id。

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);
    }


}