目錄
3、AbstractMongodbDao類,實現MongoDb的CRUD操作
4.1 MongoUser 實體類,對應db中的集合user
4.4 MongoUserManage(controller)
5、啓動MongoDB Server,爲數據庫testdb,添加一個用戶
Demo已上傳Github: https://github.com/cloudgyb/spring-mongodb,供參考!
首先創建一個Spring MVC的Maven項目,用於整合MongoDB。
1、在pom.xml文件中添加mongoDB的依賴:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
2、通過xml配置MongoTemplate
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mongoDbFactory" class="org.springframework.data.mongodb.core.SimpleMongoClientDbFactory">
<constructor-arg value="mongodb://venus:123456@localhost:27017/testdb" />
</bean>
<bean class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
</bean>
</beans>
MogoTemplate依賴MongoDbFactory,SimpleMongoClientDbFactory是其一個實現類,通過構造器注入mongodb的uri,uri中包含了連接的數據庫的用戶名、密碼、主機、端口和數據庫名稱,格式爲mongodb://userName:password@host:port/dbName.通過上述配置mongoTemplate就注入到Spring 容器中了。
3、AbstractMongodbDao類,實現MongoDb的CRUD操作
import com.gyb.spring.mongodb.domain.Pagination;
import com.mongodb.client.result.DeleteResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;
/**
* @author geng
* 2020/5/15
*/
public abstract class AbstractMongodbDao<T> {
protected final MongoTemplate mongoTemplate;
private Class<T> entityClass;
public AbstractMongodbDao(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
Type genericSuperclass = this.getClass().getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
ParameterizedType paraType = (ParameterizedType) genericSuperclass;
Type[] params = paraType.getActualTypeArguments();
if(params[0] instanceof Class) {
entityClass = (Class<T>) params[0];
}
}
}
public void add(T entity){
mongoTemplate.insert(entity);
}
public void add(Collection<T> coll){
mongoTemplate.insertAll(coll);
}
public List<T> find(Query query){
if(query == null)
return findAll();
return mongoTemplate.find(query, entityClass);
}
/**
* 按照field字段進行查找
* @param field 對應數據庫中的字段名
* @param value 屬性值
*/
public List<T> find(String field,String value){
Criteria criteria = new Criteria();
criteria.and(field).is(value);
Query query = new Query(criteria);
return find(query);
}
public Pagination<T> findPage(Query query, int pageNum, int pageSize){
if(query == null)
query = new Query();
long total = count(query);
query.skip((pageNum-1)*pageSize).limit(pageSize);
List<T> data = find(query);
return Pagination.of(pageNum,pageSize,total,data);
}
public List<T> findAll(){
return mongoTemplate.findAll(entityClass);
}
public long count(Query query){
if(query == null){
query = new Query();
}
return mongoTemplate.count(query,entityClass);
}
public long remove(Query query){
DeleteResult result = mongoTemplate.remove(query, entityClass);
return result.getDeletedCount();
}
}
這個類實現了基本的CRUD,後續的數據庫操作可以繼承這個類即可。
4、測試
以都熟知的用戶管理功能爲例,看看效果。
4.1 MongoUser 實體類,對應db中的集合user
/**
* @author geng
* 2020/5/15
*/
@Document(collection = "user")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MongoUser {
@Id
private String id;
private String name;
private String password;
}
@Document註解標記了這個類對應db中的user集合。@Id指定一個字段對應集合中的id。
4.2 UserMongoDao
/**
* @author geng
* 2020/5/15
*/
@Repository
public class UserMongoDao extends AbstractMongodbDao<MongoUser> {
public UserMongoDao(MongoTemplate mongoTemplate) {
super(mongoTemplate);
}
}
繼承了AbstractMongodbDao。
4.3 MongoUserManageService
/**
* @author geng
* 2020/5/18
*/
@Service
public class MongoUserManageService {
private final UserMongoDao userMongoDao;
public MongoUserManageService(UserMongoDao userMongoDao) {
this.userMongoDao = userMongoDao;
}
public List<MongoUser> getAll(){
return userMongoDao.findAll();
}
public List<MongoUser> getByUserName(String userName){
return userMongoDao.find("name",userName);
}
public Pagination<MongoUser> page(int pageNum,int pageSize){
return userMongoDao.findPage(null,pageNum,pageSize);
}
public void addUser(MongoUser user){
userMongoDao.add(user);
}
public long deleteUser(String id){
Criteria id1 = Criteria.where("id").is(id);
Query query = new Query(id1);
return userMongoDao.remove(query);
}
}
4.4 MongoUserManage(controller)
@RestController
@RequestMapping("/mongoUser")
public class MongoUserManage {
private final MongoUserManageService mongoUserManageService;
public MongoUserManage(MongoUserManageService mongoUserManageService) {
this.mongoUserManageService = mongoUserManageService;
}
@RequestMapping("/list")
public List<MongoUser> userList() {
return mongoUserManageService.getAll();
}
@RequestMapping("/query")
public List<MongoUser> userList(@RequestParam String userName) {
return mongoUserManageService.getByUserName(userName);
}
@RequestMapping("/page")
public Pagination<MongoUser> userList(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize){
return mongoUserManageService.page(pageNum,pageSize);
}
@PostMapping("/add")
public void add(@RequestBody MongoUser user){
mongoUserManageService.addUser(user);
}
@DeleteMapping("/delete")
public void delete(String id){
long l = mongoUserManageService.deleteUser(id);
System.out.println(l);
}
}
5、啓動MongoDB Server,爲數據庫testdb,添加一個用戶
下載MongoDB-server:https://www.mongodb.com/download-center/community,選擇合適的版本去下載。
下載完解壓,進入bin目錄,執行下面的命令啓動Mongo服務:
mongod --dbpath ../data //指定存放數據的目錄爲bin目錄上一級的data目錄。
執行mongo,進入客戶端控制檯,執行下面的命令,創建用戶:
use testdb
db.createUser( { user: "venus", //用戶名 pwd: "123456", // 密碼 roles: [ { role: "readWrite", db: "testdb" }] } )
然後關掉Mongo Server,重啓以需要認證的模式啓動Server:
mongod --dbpath ../data --auth //指定訪問db需要認證
mongo 的幫助文檔:https://docs.mongodb.com/manual/
6、啓動項目
調用接口測試一下,應該問題不大。
Demo已上傳Github: https://github.com/cloudgyb/spring-mongodb,供參考!