您的位置:首页 > 数据库 > Mongodb

springboot - 集成MongoDB实现

2017-09-15 15:02 676 查看
今天就半天时间了,感慨一下;最近一年多都忙的不可开交;今天终于可有点儿时间,可以着手写点东西了.....非常感谢工作和生活.....

结合自身项目特点,合理组织自身代码

1、开发环境

 wind7 、jdk1.8、IJ EDEA 2017(实际开发中2016版本,在集成kafka的过程中始终报错,巨坑)

2、准备工作 

      安装mongoDB (不说)

3、创建springboot项目(不说)

4、配置maven的jar包坐标:(以下地方均贴放完整代码,方便各位参考开发)

mongo的坐标:

<!--mongo -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.4.RELEASE</version>
</dependency>

整体配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>com.qhzx.sdip</groupId>
<artifactId>sdip-config-center</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.4.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.2</version>
</dependency>

</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>


5.配置application.properties中mongoDB的地址

#mongodb配置
spring.data.mongodb.uri=mongodb://username:password@IP:PORT/mongoDBName


6.加载mongo模板

MongoTemplate 提供了一些非常好用的增删改查api;方便开发

import com.mongodb.DBCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

/**
* <p>类描述</p>
*
* @author YUANYIRUI839
*/
@Component("mgTemplate")
public class MgTemplate {

@Autowired
private MongoTemplate mongoTemplate;

public DBCollection getCollection(String collectionName) {
return mongoTemplate.getCollection(collectionName);
}

}

7.编写service层代码

接口:接口是规范,抽象类是模板

import com.mongodb.BasicDBList;
import com.mongodb.DBObject;

/**
* <p>类描述</p>
* 用户管理:
* 1.分配用户:机构号,手机,法人身份证,联系人,状态(启用,禁用),描述-->>分配用户和密码
* 2.更新用户:
* 3.找回用户:机构号,手机,法人身份证
*
* @created by yuanyirui839 20170904
*/
public interface IUserService {

//新增用户  返回 用户名和密码
int addUser(String orgCode, String mobileNum, String IDCard, String contact, String userId, String pwd);

//查询用户(找回用户)
DBObject queryUser(String userId, String orgCode, String mobileNum, String IDCard);

//删除(禁用和启用)
int operateUser(String orgCode, String status);

//更新
int updateUser(String userId, String orgCode, String mobileNum, String IDCard, String contact);

//更新密码
int updateUserPwd(String orgCode, String oldPwd, String newPwd);

//删除用户
int deleteUser(String orgCode, String userId);
}

接口实现:

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
* <p>类描述</p>
* 用户管理:
* 1.分配用户:机构号,手机,法人身份证,联系人,状态(启用,禁用),描述-->>分配用户和密码
* 2.更新用户:
* 3.找回用户:机构号,手机,法人身份证
*
* @created by yuanyirui839 20170904
*/
@Component("userService")
public class UserService implements IUserService {
private static Log logger = LogFactory.getLog(UserService.class);
//商户用户
static String COLLECTION_NAME = "ORG_USER";

@Autowired
MgTemplate mgTemplate;

//新增用户  返回 用户名和密码
public int addUser(String orgCode, String mobileNum, String IDCard, String contact, String userId, String pwd) {
//构建文档(本身是面向文档存储)
DBObject document = new BasicDBObject();
document.put(Const.ORG_CODE, orgCode);
document.put(Const.MOBILE_NUM, mobileNum);
document.put(Const.ID_CARD, IDCard);
document.put(Const.CONTACT, contact);
document.put(Const.USER_ID, userId);
document.put(Const.USER_PWD, pwd);
//设置为使用中
document.put(Const.STATUS, Const.INUSE);
//存入的时候,注意相同的数据只保存一条
document.put(Const._ID, orgCode);

//获取集合,在集合中插入数据 getN()返回受影响的条数
int row = mgTemplate.getCollection(COLLECTION_NAME).save(document).getN();
return row;
}

//查询用户(找回用户信息)
public DBObject queryUser(String userId, String orgCode, String mobileNum, String idCard) {
DBObject query = buildQuery(userId, orgCode, mobileNum, idCard);
DBObject dbObject = new BasicDBObject();
dbObject.put(Const._ID, 0);
DBObject result = mgTemplate.getCollection(COLLECTION_NAME).findOne(query, dbObject);
return result;
}

//构造查询条件
private DBObject buildQuery(String userId, String orgCode, String mobileNum, String idCard) {
DBObject query = new BasicDBObject();
if (StringUtils.isNotBlank(userId)) {
query.put(Const.USER_ID, userId);
}
if (StringUtils.isNotBlank(orgCode)) {
query.put(Const.ORG_CODE, orgCode);
}
if (StringUtils.isNotBlank(mobileNum)) {
query.put(Const.MOBILE_NUM, mobileNum);
}
if (StringUtils.isNotBlank(idCard)) {
query.put(Const.ID_CARD, idCard);
}
return query;
}

//删除(禁用和启用)
public int operateUser(String orgCode, String status) {
DBObject update = queryUser("", orgCode, "", "");
//构建文档(本身是面向文档存储)
DBObject query = new BasicDBObject();
//存入的时候,注意相同的数据只保存一条
query.put(Const.ORG_CODE, orgCode);
update.put(Const.STATUS, status);
//获取集合,在集合中插入数据 getN()返回受影响的条数
int row = mgTemplate.getCollection(COLLECTION_NAME).update(query, update).getN();
return row;
}

//更新
public int updateUser(String userId, String orgCode, String mobileNum, String idCard, String contact) {
DBObject document = queryUser(userId, orgCode, "", "");
logger.info("返回值:"+document.toString());
document.put(Const.MOBILE_NUM, mobileNum);
document.put(Const.ID_CARD, idCard);
document.put(Const.CONTACT, contact);
//存入的时候,注意相同的数据只保存一条
document.put(Const._ID, orgCode);
//设置为使用中
document.put(Const.STATUS, Const.INUSE);
//获取集合,在集合中插入数据 getN()返回受影响的条数
int row = mgTemplate.getCollection(COLLECTION_NAME).save(document).getN();
return row;
}

//更新密码
public int updateUserPwd(String orgCode, String oldPwd, String newPwd) {
DBObject query = new BasicDBObject();
query.put(Const.ORG_CODE, orgCode);
DBObject update = queryUser("", orgCode, "", "");
update.put(Const.USER_PWD, newPwd);
//获取集合,在集合中插入数据 getN()返回受影响的条数
int row = mgTemplate.getCollection(COLLECTION_NAME).update(query, update).getN();
return row;
}

//删除
@Override
public int deleteUser(String orgCode, String userId) {
DBObject query = new BasicDBObject();
if (StringUtils.isNotBlank(orgCode)) {
query.put(Const.ORG_CODE, orgCode);
}
if (StringUtils.isNotBlank(userId)) {
query.put(Const.USER_ID, userId);
}
//获取集合,在集合中插入数据 getN()返回受影响的条数
int row = mgTemplate.getCollection(COLLECTION_NAME).remove(query).getN();
return row;
}

}


8.编写controller层代码:

springboot 封装注解:

@RestController
@RequestMapping("dsint")

代码:

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
* Created by YUANYIRUI839 on 2017-09-04.
* 用户配置中心
*/
@RestController
@RequestMapping("userConfCenter")
public class UserConfigCenter {
private static Log logger = LogFactory.getLog(UserConfigCenter.class);

@Autowired
private IUserService userService;

/**
* 新增用户;机构可以申请或者系统分配用户名和密码
*/
@ResponseBody
@RequestMapping("/addUser")
public AjaxResult addUser(String orgCode, String mobileNum, String IDCard, String contact, String userId, String userPwd) {
AjaxResult result = AjaxResult.createSuccAjaxResult();
try {
if (StringUtils.isBlank(orgCode)) {
return AjaxResult.createErrorAjaxResult("请填写组织机构代码");
}
if (StringUtils.isBlank(userId) && StringUtils.isBlank(userPwd)) {
boolean existUserId = false;
while (!existUserId) {
userId = RandomStringUtils.random(8, Const.RANDOM_STR_UP);
logger.info("生成用户ID:" + userId);
existUserId = queryUserByUserId(userId) == null ? true : false;
}
//生成密码
userPwd = RandomStringUtils.random(8, Const.RANDOM_STR);
}
//添加用户
int addRow = userService.addUser(orgCode, mobileNum, IDCard, contact, userId, userPwd);
DBObject dbObject=new BasicDBObject();
dbObject.put(Const.USER_ID,userId);
dbObject.put(Const.USER_PWD,userPwd);
result.setData(dbObject);
logger.info("返回行数: " + dbObject.toString());
return result;
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.createErrorAjaxResult(e.getMessage());
}
}

private DBObject queryUserByUserId(String userId) {
DBObject dbObject = userService.queryUser(userId, "", "", "");
return dbObject;
}

/**
* 删除用户
*/
@ResponseBody
@RequestMapping("/deleteUser")
public AjaxResult deleteUser(String orgCode, String userId) {
AjaxResult result = AjaxResult.createSuccAjaxResult();
try {
//
int operateRow = userService.deleteUser(orgCode, userId);
result.setData(operateRow);
logger.info("删除用户影响的条数 : " + operateRow);
return result;
} catch (Exception e) {
return AjaxResult.createErrorAjaxResult(e.getMessage());
}
}

/**
* 更新用户信息
*/
@ResponseBody
@RequestMapping("/updateUser")
public AjaxResult updateUser(String userId, String orgCode, String mobileNum, String IDCard, String contact) {
AjaxResult result = AjaxResult.createSuccAjaxResult();
try {
//更新
int updateRow = userService.updateUser(userId, orgCode, mobileNum, IDCard, contact);
result.setData(updateRow);
logger.info("更新影响的条数 : " + updateRow);
return result;
} catch (Exception e) {
return AjaxResult.createErrorAjaxResult(e.getMessage());
}
}

}


到此结束,请忽略返回值,请将返回值,直接改为String类型即可;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb