千家信息网

【MongoDB】spring-data-mongo配置

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,config.properties#mongodb settingmongo.host=127.0.0.1mongo.port=27017mongo.connectionsPerHost=100mon
千家信息网最后更新 2024年10月19日【MongoDB】spring-data-mongo配置
  • config.properties

#mongodb settingmongo.host=127.0.0.1mongo.port=27017mongo.connectionsPerHost=100mongo.threadsAllowedToBlockForConnectionMultiplier=50mongo.connectTimeout=1000mongo.maxWaitTime=1500mongo.autoConnectRetry=truemongo.socketKeepAlive=truemongo.socketTimeout=0mongo.slaveOk=true


  • spring_mongo.xml

                        


  • entity

@Document(collection = "user")public class User {        @Id        private int id;        private String name;        private int age;        private String city;        private String mote;                public int getId() {                return id;        }        public void setId(int id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public int getAge() {                return age;        }        public void setAge(int age) {                this.age = age;        }        public String getCity() {                return city;        }        public void setCity(String city) {                this.city = city;        }        public String getMote() {                return mote;        }        public void setMote(String mote) {                this.mote = mote;        }        }


  • dao配置

public interface MGUserDao extends MongoRepository{        /**         * 方法名的严格遵守规定         * @param age         * @param page         * @return         */        public Page findByAgeGreaterThan(int age, Pageable page);                /**         * 有@Query声明查询, 方法名不需要严格遵守规定         * @param name         * @param ageFrom         * @param ageTo         * @param pageable         * @return         */        @Query("{'name':{'$regex':?0}, 'age': {'$gte':?1,'$lte':?2}}")        public Page findByNameAndAgeRange(String name, int ageFrom, int ageTo, Pageable pageable);                @Query("{?0:?1}")        public List findByAttribute(String key, String value);}


  • dao层的使用

MongoRepository实现了的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为"findBy+字段名+方法后缀",方法传进的参数即字段的值,此外还支持分页查询,通过传进一个Pageable对象,返回Page集合。 例如:

//查询大于age的数据 public Page findByAgeGreaterThan(int age,Pageable page) ;

下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,mongodb原生查询语句)

GreaterThan(大于) findByAgeGreaterThan(int age) {"age" : {"$gt" : age}}LessThan(小于) findByAgeLessThan(int age) {"age" : {"$lt" : age}}Between(在...之间) findByAgeBetween(int from, int to) {"age" : {"$gt" : from, "$lt" : to}}IsNotNull, NotNull(是否非空) findByFirstnameNotNull() {"age" : {"$ne" : null}}IsNull, Null(是否为空) findByFirstnameNull() {"age" : null}Like(模糊查询) findByFirstnameLike(String name) {"age" : age} ( age as regex)(No keyword) findByFirstname(String name) {"age" : name}Not(不包含) findByFirstnameNot(String name) {"age" : {"$ne" : name}}Near(查询地理位置相近的) findByLocationNear(Point point) {"location" : {"$near" : [x,y]}}Within(在地理位置范围内的) findByLocationWithin(Circle circle) {"location" : {"$within" : {"$center" : [ [x, y], distance]}}}Within(在地理位置范围内的) findByLocationWithin(Box box) {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}


尽管以上查询功能已经很丰富,但如果还不能满足使用情况的话可以用一下方法---基于mongodb原本查询语句的查询方式。

例一:在原接口中加入,注释Query里面的就是mongodb原来的查询语法,我们可以定义传进来的查询参数,通过坐标定义方法的参数。

@Query("{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}")public Page findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);

例二:还可以在后面指定要返回的数据字段,如上面的例子修改如下,则只通过person表里面的name和age字段构建person对象。

@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}") public Page findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);


0