mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统,它没有严格的数据格式,但同时支持复杂查询,而且自带sharding模式和Replica Set模式,支持分片模式,复制模式,自动故障处理,自动故障转移,自动扩容,全内容索引,动态查询等功能。扩展性和功能都比较强大。
mongodb在数据查询方面,支持类sql查询,可以一个key多value内容,可以组合多个value内容来查询,支持索引,支持联合索引,支持复杂查询 ,支持排序,基本上除了join和事务类型的操作外,mongodb支持所有mysql支持的查询,甚至某个客户端api支持直接使用sql语句查询mongodb。
优点
首先安装MongoDB,然后创建一个spring boot 的web项目,然后在pom.xml上增加MongoDB的导包。
org.springframework.boot
spring-boot-starter-data-mongodb
spring.data.mongodb.uri=mongodb://localhost:27017/test
我的MongoDB安装在本地,端口默认都是27017,用的库是test。
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。
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 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 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 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 findOneUser(@PathVariable("pageInde")int pageInde,@PathVariable("pageSize")int pageSize){
return userService.findAll(pageInde,pageSize);
}
}