SringBoot集成Mongodb
程序员文章站
2022-04-30 20:00:00
...
默认Mongodb在本地已经安装完成
Mongodb特性
1.由文档对象(document)、集合(collection)、数据库(database)组成。
2.存储的数据类型为bson类似json可以存储复杂数据类型。
3.集合对应表,文档对象对应一条记录。
4.适合对大量或者无固定格式的数据进行存储,不适合多表级联查询。
5.MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
6.Mongodb在单个文档的大小为几KB时表现的最好。
SpringBoot集成Mongodb
1.添加Mongodb的maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.在springboot的配置文件中添加对mongodb的配置
无用户名密码的配置
spring.data.mongodb.uri=mongodb://localhost:27017/test
有用户名密码的配置(name为用户名,pass是密码)
spring.data.mongodb.uri=mongodb://name:[email protected]:27017/test
3.创建实体类
@Data
@Document
//@Document(collection = "user")
// 若未加 collection属性 ,该 bean save 到 mongo 的 UserEntity collection(类名)
// 若添加 collection属性 ,则 save 到 user collection(自定义)
public class UserEntity {
@Id
private Long id;
@Indexed(unique = true)//创建索引,并且为唯一性索引
private String name;
private Integer age;
//@DBRef
//private Set<Book> books;
//会引用books表
}
4.创建Dao层类
public interface UserDao extends MongoRepository<UserEntity,Long> {
//简单的curd已经包含
UserEntity findByName(String name);
}
新建自定义查询操作
根据实体类中的属性进行查询:方法名的规则为:find + By + 属性名(首字母大写),如:根据姓名查询user
public UserEntity findByName(String name);
根据实体类中的属性进行模糊查询:模糊查询定义方法名的规则为:find + By + 属性名(首字母大写) + Like
public List<UserEntity> findByNameLike(String name);
根据实体类中的属性进行模糊查询带分页 :参数不同而已
public Page<UserEntity> findByNameLike(String name,Pageable pageable);
在service中对仓库中的方法的调用:
public List<UserEntity> queryByNameAndPage(int page, int rows, String name){
PageRequest pageRequest = new PageRequest(page-1,rows);
return userDao.findByNameLike(name, pageRequest).getContent();
}
GreaterThan(大于)
方法名举例:findByAgeGreaterThan(int age)
LessThan(小于)
方法名举例:findByAgeLessThan(int age)
Between(在…之间)
方法名举例:findByAgeBetween(int from, int to)
Not(不包含)
方法名举例:findByNameNot(String name)
Near(查询地理位置相近的)
方法名举例:findByLocationNear(Point point)
5.创建service层实现业务需要
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Autowired
private MongoTemplate mongoTemplate;
/**
* 保存用户
* @param user
*/
public void save(UserEntity user){
userDao.save(user);
}
/**
* 得到全部用户
* @return
*/
public List<UserEntity> getUserList(){
return userDao.findAll();
}
/**
* 根据id获取名称--自定义查询
* @param id
* @return
*/
public String getNameById(Long id){
Query query = new Query();
//在Criteria中添加查询条件
query.addCriteria(Criteria.where("id").is(id));
return mongoTemplate.findOne(query, UserEntity.class).getName();
}
}
6.创建对应controller层进行service调用
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
/**
* 保存用户到mongodb
* @return
*/
@GetMapping("save/{id}")
@ApiOperation(value = "保存用户信息", notes = "传入id,新建用户信息")
@ApiImplicitParam(name = "id", value = "用户id")
public String save(@PathVariable Long id){
boolean isHave = userService.isHave(id);
if(isHave){
return "已存在";
}
UserEntity user = new UserEntity();
user.setId(id);
user.setName(String.valueOf(new Random().nextInt(100)));
Long age = 20 + id;
user.setAge(age.intValue());
userService.save(user);
return "success";
}
/**
* 获取全部用户列表
* @return
*/
@GetMapping("getUserList")
@ApiOperation(value = "获取全部用户列表", notes = "获取全部用户列表")
public List<UserEntity> getUserList(){
List<UserEntity> list = userService.getUserList();
return list;
}
}