Maven x Mongo x Spring
簡裕維
Apache Maven
• 函式庫管理
• 專案管理
• 套件管理
• pom.xml:maven 的設定檔
• 下載:
https://maven.apache.org/download.cgi
Apache Maven-函式庫管理
• Maven Repository:
– jar 線上儲存庫
• jar 電腦 local 端的集中放置處
– .m2 目錄
Apache Maven-專案管理
• jar:Java Archive
• war:Web Archive
• pom:Project Object Model
– 此專案內可包多個小專案,小專案可以是 jar、
war、pom
– 多層次管理
Apache Maven-套件管理
• 編譯器設定
– 設定 java rumtime、jdk的版本
– 預設記憶體大小
• Web container 設定
– 立即使用 tomcat 執行網頁
– mvn tomcat7:run
• 其他套件
– 與CI server 結合
– Deploy 到 Maven Repository
Apache Maven-入門建置
• http://gaduo-chien-
blog.logdown.com/posts/2014/04/13/
apache-maven-build-maven-project
Apache Maven-pom.xml
• groupId:專案組織名稱,edu.tcu.mi.xxx
• artifactId:該專案名稱
• version:該專案版本號
• packaging:專案打包型態,jar、war、pom
• parent:父專案
• properties:變數設定
• modules:子專案模組
• dependencies:相依函式庫
• build:建置用plugin設定
Apache Maven-專案架構
helloworld/
├── pom.xml
├── lib
├── target
└── src
├── main
│ └── java
│ │ └── edu
│ │ └── tcu
│ │ └── mi
│ │ └── App.java
│ └── resources
│
│
└── test
└── java
│ └── edu
│ └── tcu
│ └── mi
│ └── AppTest.java
└── resources
Apache Maven-常用指令
• 建置
– mvn install
• 清除 chache
– mvn clean
• 建置時,略過單元測試
– mvn install –DskipTests
• 連著使用
– mvn clean install –DskipTests
• 立即執行 tomcat
– mvn tomcat7:run
– 前提須搭配其他設定
個人常用函式庫
• guava:
– 通用函式
– https://github.com/google/guava/wiki
• gson:json 與物件互相轉換
• junit:單元測試
• log4j:收集 log
• lombok:@Getter @Setter
• joda-time:時間型態的計算
• jetm:執行時間的收集與報告
Mongodb
• 文件儲存資料庫
• json 格式:BSON (binary json)
• javascript
• schema less
• no join
– 但還是有關聯
• no transaction
名詞對映
Mongo 傳統關聯式資料庫
Database Database
Collection Table
Mongodb Server
• 下載&解壓縮
– https://fastdl.mongodb.org/win32/mongodb-win32-
x86_64-3.0.7.zip
• 設定環境變數 $MONGO_HOME/bin
• 建立資料儲存位置
– $USER/mongo/data/data01
• >:表示「>」後面的敘述為指令
• 無認證授權-啟動 mongo
> mongod.exe –dbpath $USER/mongo/data/data01
– port 預設為 27017
Mongodb Client
• mongo shell
– mongo.exe
– javascript
• GUI Client:MongoChef
– http://3t.io/mongochef/download/
Mongodb Client-mongo shell
• 連線至 server
> mongo –host 127.0.0.1 –port 27017
• 常用指令
– https://docs.mongodb.org/manual/refer
ence/mongo-shell/
Mongodb Client-mongo shell(2)
• 顯示所有資料庫
> show dbs
• 使用某一個資料庫或新增資料庫
> use <database>
> use pet
• 顯示該資料庫中的所有的 collections
> show collections
• 新增Collection
– https://docs.mongodb.org/manual/reference/method/db.createCollection/
> db.createCollection(“user”)
Mongodb Client-mongo shell(3)
• 已經指向某一個 database 時
• 新增資料
> db.$Collection.insert
> db.user.insert({“name”:”gaduo”});
> db.user.insert({
“name”:”test”,
“psw”:”000test”
});
• schema less
Mongodb Client-mongo shell(4)
• https://docs.mongodb.org/manual/tutorial/query-
documents/
• Query
> db.$Collection.find()
> db.$Collection.find().pretty()
> db.user.find({})
> db.user.find({“name”:”gaduo”})
• PK: _id
– ObjectId(“xxx”)
– String
• FK: <collection>.$id
Spring-data-mongo
• Maven Dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
• spring-petclinic-example
– https://github.com/Gaduo/spring-petclinic-example
business-context.xml
<context:component-scan base-package="edu.tcu.mi.spring.web.service" />
<beans:beans profile="mongodb">
<mongo:repositories base-package="edu.tcu.mi.spring.web.repository.mongo"/>
<context:property-placeholder location="classpath:data-access.properties" />
<mongo:mongo id="mongo" host="${mongo.host.name}" port="${mongo.host.port}"/>
<beans:bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<beans:constructor-arg ref="mongo" />
<beans:constructor-arg value="${mongo.databaseName}" />
</beans:bean>
</beans:beans>
Spring-data-mongo
@Document
@JsonSerialize(include=JsonSerialize.Inclusion.NON_EMPTY)
public class Pet extends BaseEntity {
protected String name;
public Pet(){
id = new ObjectId().toString();
}
@Override
public String toString() {
return new Gson().toJson(this);
}
// getter … seter …
}
Spring Mongo/JPA Repository
Spring Mongo/JPA Repository

Maven & mongo & sring