1. 程式人生 > >Spring和maven整合mvc,jpa,mongodb,Hibernate等

Spring和maven整合mvc,jpa,mongodb,Hibernate等

小弟前一段時間在玩弄著Spring,後來發現Spring的那些專案是個好東西啊,特別是Spring的Data那一塊,使用起來是那麼水到渠成,不管底層資料庫是結構化的還是非結構化的(MongoDB,neo4j),用起來沒什麼區別。

所以,自己手動從頭到尾搭建了一個Spring整合的專案,也就當以後做東西的模板,或者作為搭建專案的根吧。

Spring整合的MVC,Hibernate,Jpa,MongoDB,SiteMesh。

完善中,還沒完成。

等待加入Shiro,Bootstrap等。

廢話少說,先看一段程式碼:

一個Dao

package com.cn.wuxiong.spring.mongodb.landscape.dao;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import com.cn.wuxiong.spring.mongodb.landscape.domain.ScenicSpots;

@Repository
public interface ScenicDao extends MongoRepository<ScenicSpots, Long>,ScenicDaoEx { // 這個介面中可以寫一些StudentDao不能滿足要求的方法。我這裡純粹測試好玩
	
}

如果本身的MongoRepository 滿足不了要求的話,再一個介面作為拓展:

package com.cn.wuxiong.spring.mongodb.landscape.dao;

import java.util.List;

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.query.Query;

import com.cn.wuxiong.spring.mongodb.landscape.domain.ScenicSpots;

public interface ScenicDaoEx {
	public void testFunc();

	public void persist(ScenicSpots ss);

	public int getScenicSpotsCount();

	public ScenicSpots findScenicSpotsById(ObjectId id);

	public ScenicSpots findScenicSpotsByCondition(Query query);

	public List<ScenicSpots> findScenicSpotssByCondition(Query query);
}

然後對這些介面實現:

package com.cn.wuxiong.spring.mongodb.landscape.dao;

import java.util.List;

import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import com.cn.wuxiong.spring.mongodb.landscape.domain.ScenicSpots;

@Repository
public class ScenicDaoImpl implements ScenicDaoEx {// 對於那些補充的方法的實現
	@Autowired
	private MongoTemplate mongoTemplate;

	// @Override
	public void testFunc() {
		System.out.println("#############Test DAO");
	}

	public void persist(ScenicSpots ss) {
		System.out.println("進入儲存……");
		mongoTemplate.insert(ss);
		System.out.println(ss);
	}

	public int getScenicSpotsCount() {
		return mongoTemplate.findAll(ScenicSpots.class).size();
	}

	public ScenicSpots findScenicSpotsById(ObjectId id) {
		return mongoTemplate.findById(id, ScenicSpots.class);
	}

	public ScenicSpots findScenicSpotsByCondition(Query query) {
		return mongoTemplate.findOne(query, ScenicSpots.class);
	}

	public List<ScenicSpots> findScenicSpotssByCondition(Query query) {
		return mongoTemplate.find(query, ScenicSpots.class);
	}

}

基本上看不出來這裡使用了MongoDB,因為MongoRepository和後面的介面將實現細節給遮蔽了。

我當時的執行結果為:

記錄數量為:12
記錄數量為:12
進入儲存……
記錄數量為:13
新建立的物件的id為:532186787bce33658dbdd772
INFO :[2014-03-13 18:20:41]com.cn.wuxiong.spring.mongodb.landscape.service.ScenicService.addScenic(ScenicService.java:43) : 建立:ScenicSpots [id=532186787bce33658dbdd772, name=飛沙洲5, ticketPrice=55.56, openTime=8, closeTime=18, remark=落霞與孤鶩齊飛,秋水共長天一色。]

有什麼問題,歡迎大神拍磚。

專案SVN地址:http://spring-all.googlecode.com/svn/trunk/

該例子集成了Jpa,Spring mvc,MongoDB,SiteMesh,Maven,Spring Data等功能。後序還會整合其他的框架。

歡迎批評指正。