mongoDB學習之路,安裝、配置、啟動、命令、應用(五)-
阿新 • • 發佈:2018-12-14
上篇說了java連線mongo,並進行增刪改查
這篇說一下spring整合mongo
github上也有小demo,很簡單,適合初學者,地址:點選跳轉
1、首先建立maven專案,新增依賴
<!-- mongo驅動 --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.8.1</version> </dependency> <!-- spring與mongo整合 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.7.RELEASE</version> </dependency>
2、mongo.properties 檔案
mongo.host=localhost mongo.port=27017 mongo.username=root mongo.password=root mongo.defaultDbName=test mongo.connectionsPerHost=10 mongo.threadsAllowedToBlockForConnectionMultiplier=5 mongo.minConnectionsPerHost=5 #連線超時時間 mongo.connectTimeout=1000 #等待時間 mongo.maxWaitTime=1500 #Socket超時時間 mongo.socketTimeout=1000 mongo.socketKeepAlive=true mongo.description=chat messgae mongodb database mongo.maxConnectionIdleTime=1500 mongo.maxConnectionLifeTime=0 #mongo slave mongo.heartbeatSocketTimeout=1000 mongo.heartbeatConnectTimeout=1500 mongo.minHeartbeatFrequency=5 mongo.heartbeatFrequency=10 mongo.autoConnectRetry=true mongo.slaveOk=true
3、spring_mongo.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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <context:property-placeholder location="classpath:mongo.properties" /> <context:component-scan base-package="com.zhangchao.mongo" /> <!-- Activate annotation configured components --> <context:annotation-config/> <!-- ============ MongoDB config start ============ --> <!-- 定義mongo物件,對應的是mongodb官方jar包中的Mongo,replica-set設定叢集副本的ip地址和埠 --> <mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" > <!-- 一些連線屬性的設定 --> <mongo:client-options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}"></mongo:client-options> </mongo:mongo-client> <!-- 定義MongoDbFactory --> <mongo:db-factory id="dbFactory" dbname="${mongo.defaultDbName}" mongo-ref="mongoClient"/> <!-- 定義沒有_class欄位的converter --> <bean id="mongoMappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" /> <bean id="defaultTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper"> <constructor-arg name="typeKey"><null/></constructor-arg> </bean> <bean id="mongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter"> <constructor-arg name="mongoDbFactory" ref="dbFactory" /> <constructor-arg name="mappingContext" ref="mongoMappingContext" /> <property name="typeMapper" ref="defaultTypeMapper"></property> </bean> <!-- 定義Template --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="dbFactory"/> <constructor-arg name="mongoConverter" ref="mongoConverter"/> <!--<constructor-arg name="databaseName" value="${mongo.databaseName}"/>--> </bean> <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> <!-- ============ MongoDB config end ============ --> </beans>
4、準備一個實體類
package com.zhangchao.mongo.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.Date;
/**
* @author zc
*/
@Document(collection = "student") //註解對應表名
public class Student {
@Id
private String id;
@Field
private String name;
@Field
private Integer age;
@Field
private String gender;
@Field
private Date createTime;
public Student() {
}
public Student( String name, Integer age, String gender, Date createTime) {
this.name = name;
this.age = age;
this.gender = gender;
this.createTime = createTime;
}
public Student( String id, String name, Integer age, String gender, Date createTime) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.createTime = createTime;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", createTime=" + createTime +
'}';
}
}
5、通過mongoTemplate操作資料庫進行增刪改查
package com.zhangchao.mongo.main;
import com.mongodb.WriteResult;
import com.zhangchao.mongo.entity.Student;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* @author zc
*/
public class MongoTemplateTest{
@Resource
private static MongoOperations mongoTemplate;
@Before
public void setUp() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring_mongo.xml");
mongoTemplate = (MongoOperations) context.getBean("mongoTemplate");
}
/**
* insert插入
*/
@Test
public void insertone(){
//insert: 若新增資料的主鍵已經存在,則會拋 org.springframework.dao.DuplicateKeyException 異常提示主鍵重複,不儲存當前資料
mongoTemplate.insert(new Student( "dsfsdfsdfsdfsde","王五2",15,"女",new Date()),"student");
}
/**
* save插入
*/
@Test
public void save(){
//save若新增資料的主鍵已經存在,則會對當前已經存在的資料進行修改操作
mongoTemplate.save(new Student( "wwwwwwwwwwww","宋九",21,"男",new Date()),"student");
}
/**
* 查詢所有
*/
@Test
public void find() {
List<Student> all = mongoTemplate.findAll(Student.class,"student");
for (Student s:all
) {
System.out.println(s);
}
}
/**
* 條件查詢
*/
@Test
public void find1(){
Query query = new Query(Criteria.where("name").is("王五").and("age").gte(20).lte(30));
List<Student> student = mongoTemplate.find(query, Student.class, "student");
for (Student s :
student) {
System.out.println(s);
}
}
/**
* 排序查詢(按年齡倒序)
*/
@Test
public void find2(){
Query query = new Query();
Query q = query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "age")));
List<Student> student = mongoTemplate.find(q, Student.class, "student");
for (Student s :
student) {
System.out.println(s);
}
}
/**
* 刪除(名字包含趙)
*/
@Test
public void delete(){
Query query = new Query(Criteria.where("name").regex("趙"));
WriteResult result = mongoTemplate.remove(query, "student");
System.out.println(result);
}
/**
* 修改
* 如果query條件沒有篩選出對應的資料,那麼upsert會插入一條新的資料,而update則什麼都不會做
*/
@Test
public void update(){
Query query = new Query(Criteria.where("age").ne(25));
Update update = Update.update("gender","女");
// 更新滿足條件的第一條資料
// WriteResult result = mongoTemplate.updateFirst(query, update, "student");
// System.out.println(result);
// 更新所有滿足條件的資料
WriteResult result1 = mongoTemplate.updateMulti(query, update, "student");
System.out.println(result1);
}
@Test
public void upsert(){
Query query = new Query(Criteria.where("age").is(35));
Update update = Update.update("gender","男");
WriteResult result = mongoTemplate.upsert(query, update, "student");
System.out.println(result);
}
}