springboot+mongodb 整合的一些使用
- mongodb的配置
spring: data: mongodb: uri: mongodb://139.9.183.232:27019/users-1
如果有密码
spring: data: mongodb: uri: mongodb://帐号:密码@139.9.183.232:27019/users-1
- 操作
两种使用方式:MogoTemplate 和 继承 MogoRepository接口,类似于JPA操作
实体定义
@Document(collection = "user") // 文档集合的名称 public class User { @Id //定义主键 private Integer id; @Field(value = "name") // 定义属性的名称 private String name; private String sex; public User() { } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
- MongoTemplate 操作
插入
public <T> T insert(T objectToSave) // 如果有@Document(collection = "user") 则使用collection的值,否则使用实体的小写类名,如果存在相同的主键则会抛出异常 public <T> T insert(T objectToSave, String collectionName)
插入/更新
public <T> T save(T objectToSave) // 如果有@Document(collection = "user") 则使用collection的值,否则使用实体的小写类名,如何有相同的主键,则会进行更新操作 public <T> T save(T objectToSave, String collectionName) // 指定collection
批量插入
public <T> Collection<T> insertAll(Collection<? extends T> objectsToSave) public <T> Collection<T> insert(Collection<? extends T> batchToSave, String collectionName) // 可指定collection
批量插入并指定实体class
public <T> Collection<T> insert(Collection<? extends T> batchToSave, Class<?> entityClass)
查询操作
public Criteria and(String key) public static Criteria byExample(Example<?> example) public static Criteria byExample(Object example) public static Criteria where(String key) public Criteria(String key)
相关操作词
public Criteria is(@Nullable Object o) // 等于 public Criteria ne(@Nullable Object o) // 不等于 public Criteria lte(Object o) // 小于等于 public Criteria lt(Object o) // 小于 public Criteria gt(Object o) // 大于等于 public Criteria gte(Object o) // 大于 public Criteria in(Object... o) // 在数组里面 public Criteria in(Collection<?> c) // 在集合里面 public Criteria all(Object... o) // 满足里面的所有条件 public Criteria all(Collection<?> o) // 满足集合里面的所有条件 public Criteria nin(Object... o) // 不在数组里面 public Criteria nin(Collection<?> o) // 不在集合里面 public Criteria mod(Number value, Number remainder) // 取模 第二个参数量模的值 public Criteria size(int s) ///////////// public Criteria exists(boolean b) // 匹配包含该字段的文档 public Criteria type(int t) // 指定字符类型 public Criteria regex(String re) // 正则规则 public Criteria regex(Pattern pattern) public Criteria near(Point point) // 距离操作 public Criteria nearSphere(Point point) public Criteria maxDistance(double maxDistance) public Criteria minDistance(double minDistance) orOperator() // 或者一个Criteria操作 public Criteria norOperator(Criteria... criteria) //指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。 andOperator() // 与一个Criteria操作
Query的操作词
public Query skip(long skip) public Query limit(int limit)
单条件查询
Query query = new Query(Criteria.where("id").lt(10)); List<User> users = mongoTemplate.find(query, User.class, "user"); // user 是collection System.out.println(users);
- 更新
Update
public static Update update(String key, Object value) // 静态调用 public Update set(String key, Object value) // 修改并设置值 public Update setOnInsert(String key, Object value) // 如何更新字段不存在则设置,如果更新字段存在则不设置 public Update unset(String key) // 删除存在的字段 key public Update inc(String key, Number inc) // 自增字段数值 public void inc(String key) // 自增字段数值 -- 针对数组的操作 -- public Update push(String key, Object value) // 操作的是一个数组,有重复也会添加进去 public Update addToSet(String key, Object value) // 操作的是一个数组,有重复数据不会添加进去 public Update pop(String key, Update.Position pos) // 弹出数据,并删除,pos有两个Enum数据,Update.Position.FIRST、Updatea.Position.LAST public Update pull(String key, Object value) // 删除数组中的数据 public Update pullAll(String key, Object[] values) // 批量删除数组中的数据 -- 其他操作 -- public Update rename(String oldName, String newName) // 重新命名 public Update currentDate(String key) // 更新成当前时间 public Update currentTimestamp(String key) //当前时间截 public Update multiply(String key, Number multiplier) // 乘法运算 public Update max(String key, Object value) // 取最大值保存 public Update min(String key, Object value) //取最小值保存
@Test void testUpdate() { Query query = new Query(Criteria.where("_id").is(14)); Update update = new Update(); //update.set("num",1); //update.setOnInsert("name1", "李四"); //update.unset("name1"); //update.inc("num"); //update.push("name1", Arrays.asList(9,23)); //update.addToSet("name1",Arrays.asList(9,23,12,1212)); //update.pop("name1", Update.Position.FIRST); //update.pull("name1", Arrays.asList(9,23)); //update.pullAll("name1",new Object[]{Arrays.asList(9,23),Arrays.asList(9,23,12,1212)}); //update.rename("name1","name2"); //update.currentTimestamp("name2"); //update.multiply("num", 2); //update.min("num", 4); UpdateResult user = mongoTemplate.updateFirst(query, update, "user"); }
删除
DeleteResult remove(Object) // 移除数据, Object是数据对象,操作的collection是操作对象的数据对象类名的小写 DeleteResult remove(Object, String) // Object是数据对象,collection名称 DeleteResult remove(Query, String) // 查询条件, DeleteResult remove(Query, Class<?>) DeleteResult remove(Query, Class<?>, String)
// 当id是主键时,内容的列名会变成_id,所以查询条件要使用"_id" Query query = new Query(Criteria.where("name").is("张三1")); mongoTemplate.remove(query, "user");
分页与排序
Pageable pageable = PageRequest.of(0,50); //分页
// 分页并排序 Sort sort = Sort.by(Sort.Direction.DESC, "_id"); //第二个参数 String... properties Pageable pageable = PageRequest.of(0,50, sort);
// 分页并排序 Sort.Order order = Sort.Order.desc("_id"); Sort sort = Sort.by(order); Pageable pageable = PageRequest.of(0,50, sort);
//条件匹配 ExampleMatcher matcher = ExampleMatcher.matching() .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()); // 匹配规则 // ignoreCase() 忽略大小写 // caseSensitive() 严格大小写 // contains() 包含 // endsWith() 以...结束 // startsWith() 以...开始 // exact() 精确匹配 // storeDefaultMatching() 默认(精确匹配) // regex() 正则匹配 Example<User> example = Example.of(实体条件, matcher);
完!