pom工程:

1、环境准备

1.1用到的jar

Spring整合Mongodb

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>${mongodb.java.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>${data.mongodb.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb-cross-store</artifactId>
    <version>${data.mongodb.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb-log4j</artifactId>
    <version>${data.mongodb.version}</version>
</dependency
>

1.2配置文件:
Spring整合Mongodb
mongo.host=192.168.0.205
mongo.port=27017
mongo.defaultDbName=sdzn
mongo.user=
mongo.pwd=
mongo.connectionsPerHost=10
mongo.threadsAllowedToBlockForConnectionMultiplier=5
mongo.minConnectionsPerHost=5
mongo.connectTimeout=10000
mongo.maxWaitTime=120000
mongo.socketTimeout=0
mongo.socketKeepAlive=true

mongo.description=test
mongo.maxConnectionIdleTime=1500
mongo.maxConnectionLifeTime=0
#mongo slave
mongo.heartbeatSocketTimeout=1000
mongo.heartbeatConnectTimeout=1500
mongo.minHeartbeatFrequency=5
mongo.heartbeatFrequency=10
配置服务器需要的ip、端口号、数据库名称、用户、密码(创建的无密码登录服务器),其他的都用默认配置就足够了。
1.3 mongodb.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
    http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    <context:component-scan base-package="com.mongo" />
    <!-- 获取配置资源 -->
    <context:property-placeholder location="classpath:mongodb-context-config.properties" />
    
    
    <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}" >
        <mongo:options 
            connections-per-host="${mongo.connectionsPerHost}" 
            threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" 
            connect-timeout="${mongo.connectTimeout}" 
            max-wait-time="${mongo.maxWaitTime}" 
            auto-connect-retry="${mongo.autoConnectRetry}" 
            socket-keep-alive="${mongo.socketKeepAlive}" 
            socket-timeout="${mongo.socketTimeout}" 
            slave-ok="${mongo.slaveOk}" 
            write-number="1" 
            write-timeout="0" write-fsync="true"/> 
    </mongo:mongo>
    <!-- 设置使用的数据库 名-->
    <mongo:db-factory dbname="test" mongo-ref="mongo"/>
    <!-- mongodb的模板 -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
       <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>
</beans>
2、常用操作:
(crud)

public class test(){

@Autowried
    private MongoTemplate mongoTemplate;//直接注入MongoTemplate
 @Before
     public void testBefore() {



  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-mvc-servlet.xml");
   mongoTemplate = (MongoTemplate) context.getBean("mongoTemplate");
}
//新增




@Test
public void addTest(){
    User user= nuew User();
    user.setName("张三");
    user.setAge(22);
    mongoTemoplate.insert(user);
}
//查询
@Test  
public void selectTest(){
//用到了Query和Criteria

Query query = new Query();

Criteria criteria = where("age").gt(22);//查询年龄等于22的用户;

query.addCriteria(criteria);

List<User> users = mongodbTemplate.find(query,User.class);//查询

//其他查询条件

 // criteria.and("name").is("cuichongfei");等于
        // List<String> interests = new ArrayList<String>();
        // interests.add("study");
        // interests.add("linux");
        // criteria.and("interest").in(interests); in查询
        // criteria.and("home.address").is("henan"); 内嵌文档查询
        // criteria.and("").exists(false); 列存在
        // criteria.and("").lte(); 小于等于
        // criteria.and("").regex(""); 正则表达式
        // criteria.and("").ne(""); 不等于
//多条件查询
Query query = new Query();
Criteria criteria = new Criteria();

criteria.andOperator(Criteria.where("age").gt(22),Criteria.where("name").regex("张.*"));

query.addCriteria(criteria);

List<User> users = mongodbTemplate.find(query,User.class);

//andOperator 并且,orOperator 或者,(sql中的and、or);
//排序(按照年龄倒序查询)
query.sort().on("age,Order.Desc)

//查询全部
mongodbTemplate.findAll(User.class);

//查询数量
mongodbTemplate.count(query,User.class);

//只查询两个字段(在query中添加条件)
query.fields.include("name").include("age");

}

//删除
 @Test
public void delTest(){

Query query = new Quer();

Criteria criteria = where("age").gt(22);//年龄等于22的用户;
query.addCriteria(criteria);

mongodbTemplate.remove(query,User.class);

}

//修改
@Test
public void updateTest(){

Query query = new Query();

query.addCriteria(where("id").is(1));

Update update = new Update();

update.set("age",23);

update.unset("name");

mongodbTemplate.updateMulit(query,update,User.class);//修改id=1的年龄,并删除name字段
 
// age值加2
        update.inc("age", 2);
        // update.set("name", "zhangsan"); 直接赋值
        // update.unset("name"); 删去字段
        // update.push("interest", "java"); 把java追加到interest里面,interest一定得是数组
        // update.pushAll("interest", new String[]{".net","mq"})
        // 用法同push,只是pushAll一定可以追加多个值到一个数组字段内
        // update.pull("interest", "study"); 作用和push相反,从interest字段中删除一个等于value的值
        // update.pullAll("interest", new String[]{"sing","dota"})作用和pushAll相反
        // update.addToSet("interest", "study") 把一个值添加到数组字段中,而且只有当这个值不在数组内的时候才增加
        // update.rename("oldName", "newName") 字段重命名

        // 只更新第一条记录,age加2,name值更新为zhangsan
        mongoTemplate.updateFirst(query, new Update().inc("age", 2).set("name", "zhangsan"), User.class);

        // 批量更新,更新所有查询到的数据
        mongoTemplate.updateMulti(query, update, User.class);
}
}


@Id          文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。

@Document       把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。

@DBRef        声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。

@Indexed       声明该字段需要索引,建索引可以大大的提高查询效率。

@CompoundIndex    复合索引的声明,建复合索引可以有效地提高多字段的查询效率。

@GeoSpatialIndexed 声明该字段为地理信息的索引。

@Transient      映射忽略的字段,该字段不会保存到mongodb。

@PersistenceConstructor   声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据。







相关文章: