Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
2017-07-26 11:51
585 查看
文章目录
1. 环境依赖
2. 数据源
2.1. 方案一 使用 Spring Boot 默认配置
2.2. 方案二 手动创建
3. 使用mongoTemplate操作4. 总结
3.1. 实体对象
3.2. DAO相关
3.3. Service相关
3.4. Controller相关
5. 源代码
本文讲解Spring Boot基础下,如何使用MongoDB,编写数据访问。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
默认使用localhost:27017的名称叫做test的数据库。
此外,我们也可以在 src/main/resources/application.properties 中配置数据源信息。
spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
如果存在密码,配置改成如下
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/dbname
@Configuration
@EnableMongoRepositories
public class MongoConfig extends AbstractMongoConfiguration {
private String mongoHost = "localhost";
private int mongoPort = 27017;
private String dbName = "springboot-db";
private static final String MONGO_BASE_PACKAGE = "com.lianggzone.springboot.action.data.mongodb.entity";
@Autowired
private ApplicationContext appContext;
@Override
protected String getDatabaseName() {
return dbName;
}
@Override
public Mongo mongo() throws Exception {
MongoClient mongoClient = new MongoClient(mongoHost, mongoPort);
return mongoClient;
}
@Override
protected String getMappingBasePackage() {
return MONGO_BASE_PACKAGE;
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo(), getDatabaseName());
}
}
public class Author {
@Id
private Long id;
private String realName;
private String nickName;
// SET和GET方法
}
@Repository
public class AuthorDao {
@Autowired
private MongoTemplate mongoTemplate;
public void add(Author author) {
this.mongoTemplate.insert(author);
}
public void update(Author author) {
this.mongoTemplate.save(author);
}
public void delete(Long id) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
this.mongoTemplate.remove(query, Author.class);
}
public Author findAuthor(Long id) {
return this.mongoTemplate.findById(id, Author.class);
}
public List<Author> findAuthorList() {
Query query = new Query();
return this.mongoTemplate.find(query, Author.class);
}
}
@Service
public class AuthorService {
@Autowired
private AuthorDao authorDao;
public void add(Author author) {
this.authorDao.add(author);
}
public void update(Author author) {
this.authorDao.update(author);
}
public void delete(Long id) {
this.authorDao.delete(id);
}
public Author findAuthor(Long id) {
return this.authorDao.findAuthor(id);
}
public List<Author> findAuthorList() {
return this.authorDao.findAuthorList();
}
}
@RestController
@RequestMapping(value="/data/mongodb/author")
public class AuthorController {
@Autowired
private AuthorService authorService;
/**
* 查询用户列表
*/
@RequestMapping(method = RequestMethod.GET)
public Map<String,Object> getAuthorList(HttpServletRequest request) {
List<Author> authorList = this.authorService.findAuthorList();
Map<String,Object> param = new HashMap<String,Object>();
param.put("total", authorList.size());
param.put("rows", authorList);
return param;
}
/**
* 查询用户信息
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.GET)
public Author getAuthor(@PathVariable Long userId, HttpServletRequest request) {
Author author = this.authorService.findAuthor(userId);
if(author == null){
throw new RuntimeException("查询错误");
}
return author;
}
/**
* 新增方法
*/
@RequestMapping(method = RequestMethod.POST)
public void add(@RequestBody JSONObject jsonObject) {
String userId = jsonObject.getString("user_id");
String realName = jsonObject.getString("real_name");
String nickName = jsonObject.getString("nick_name");
Author author = new Author();
if (author!=null) {
author.setId(Long.valueOf(userId));
}
author.setRealName(realName);
author.setNickName(nickName);
try{
this.authorService.add(author);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("新增错误");
}
}
/**
* 更新方法
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.PUT)
public void update(@PathVariable Long userId, @RequestBody JSONObject jsonObject) {
Author author = this.authorService.findAuthor(userId);
String realName = jsonObject.getString("real_name");
String nickName = jsonObject.getString("nick_name");
author.setRealName(realName);
author.setNickName(nickName);
try{
this.authorService.update(author);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("更新错误");
}
}
/**
* 删除方法
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.DELETE)
public void delete(@PathVariable Long userId) {
try{
this.authorService.delete(userId);
}catch(Exception e){
throw new RuntimeException("删除错误");
}
}
}
(完)
如果觉得我的文章对你有帮助,请随意打赏。
版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
文章标题:Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
文章链接:http://blog.720ui.com/2016/springboot_02_data_mongodb/
1. 环境依赖
2. 数据源
2.1. 方案一 使用 Spring Boot 默认配置
2.2. 方案二 手动创建
3. 使用mongoTemplate操作4. 总结
3.1. 实体对象
3.2. DAO相关
3.3. Service相关
3.4. Controller相关
5. 源代码
本文讲解Spring Boot基础下,如何使用MongoDB,编写数据访问。
环境依赖
修改 POM 文件,添加spring-boot-starter-data-mongodb依赖。<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
数据源
方案一 使用 Spring Boot 默认配置
MongoDB 使用,在 Spring Boot 中同样提供了自配置功能。默认使用localhost:27017的名称叫做test的数据库。
此外,我们也可以在 src/main/resources/application.properties 中配置数据源信息。
spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
如果存在密码,配置改成如下
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/dbname
方案二 手动创建
通过 Java Config 创建mongoTemplate。@Configuration
@EnableMongoRepositories
public class MongoConfig extends AbstractMongoConfiguration {
private String mongoHost = "localhost";
private int mongoPort = 27017;
private String dbName = "springboot-db";
private static final String MONGO_BASE_PACKAGE = "com.lianggzone.springboot.action.data.mongodb.entity";
@Autowired
private ApplicationContext appContext;
@Override
protected String getDatabaseName() {
return dbName;
}
@Override
public Mongo mongo() throws Exception {
MongoClient mongoClient = new MongoClient(mongoHost, mongoPort);
return mongoClient;
}
@Override
protected String getMappingBasePackage() {
return MONGO_BASE_PACKAGE;
}
@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo(), getDatabaseName());
}
}
使用mongoTemplate操作
实体对象
@Document(collection = "author")public class Author {
@Id
private Long id;
private String realName;
private String nickName;
// SET和GET方法
}
DAO相关
我们通过mongoTemplate进行数据访问操作。@Repository
public class AuthorDao {
@Autowired
private MongoTemplate mongoTemplate;
public void add(Author author) {
this.mongoTemplate.insert(author);
}
public void update(Author author) {
this.mongoTemplate.save(author);
}
public void delete(Long id) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
this.mongoTemplate.remove(query, Author.class);
}
public Author findAuthor(Long id) {
return this.mongoTemplate.findById(id, Author.class);
}
public List<Author> findAuthorList() {
Query query = new Query();
return this.mongoTemplate.find(query, Author.class);
}
}
Service相关
Service层调用Dao层的方法,这个是典型的套路。@Service
public class AuthorService {
@Autowired
private AuthorDao authorDao;
public void add(Author author) {
this.authorDao.add(author);
}
public void update(Author author) {
this.authorDao.update(author);
}
public void delete(Long id) {
this.authorDao.delete(id);
}
public Author findAuthor(Long id) {
return this.authorDao.findAuthor(id);
}
public List<Author> findAuthorList() {
return this.authorDao.findAuthorList();
}
}
Controller相关
为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。@RestController
@RequestMapping(value="/data/mongodb/author")
public class AuthorController {
@Autowired
private AuthorService authorService;
/**
* 查询用户列表
*/
@RequestMapping(method = RequestMethod.GET)
public Map<String,Object> getAuthorList(HttpServletRequest request) {
List<Author> authorList = this.authorService.findAuthorList();
Map<String,Object> param = new HashMap<String,Object>();
param.put("total", authorList.size());
param.put("rows", authorList);
return param;
}
/**
* 查询用户信息
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.GET)
public Author getAuthor(@PathVariable Long userId, HttpServletRequest request) {
Author author = this.authorService.findAuthor(userId);
if(author == null){
throw new RuntimeException("查询错误");
}
return author;
}
/**
* 新增方法
*/
@RequestMapping(method = RequestMethod.POST)
public void add(@RequestBody JSONObject jsonObject) {
String userId = jsonObject.getString("user_id");
String realName = jsonObject.getString("real_name");
String nickName = jsonObject.getString("nick_name");
Author author = new Author();
if (author!=null) {
author.setId(Long.valueOf(userId));
}
author.setRealName(realName);
author.setNickName(nickName);
try{
this.authorService.add(author);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("新增错误");
}
}
/**
* 更新方法
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.PUT)
public void update(@PathVariable Long userId, @RequestBody JSONObject jsonObject) {
Author author = this.authorService.findAuthor(userId);
String realName = jsonObject.getString("real_name");
String nickName = jsonObject.getString("nick_name");
author.setRealName(realName);
author.setNickName(nickName);
try{
this.authorService.update(author);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("更新错误");
}
}
/**
* 删除方法
*/
@RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.DELETE)
public void delete(@PathVariable Long userId) {
try{
this.authorService.delete(userId);
}catch(Exception e){
throw new RuntimeException("删除错误");
}
}
}
总结
上面这个简单的案例,让我们看到了 Spring Boot 整合 MongoDB 的整个流程。实际上,与 Spring 4 中 通过 Spring Data MongoDB 整合 MongoDB 是相同的, Spring Boot 默认集成了一些配置信息,但是个人更加偏向于方案二的手动创建方式,有更好的扩展性。源代码
(完)
如果觉得我的文章对你有帮助,请随意打赏。
版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
文章标题:Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
文章链接:http://blog.720ui.com/2016/springboot_02_data_mongodb/
相关文章推荐
- Spring Boot 揭秘与实战(二) 数据存储篇 - MySQL
- Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置
- Spring Boot 揭秘与实战(二) 数据存储篇 - MyBatis整合
- Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch
- Spring Boot 揭秘与实战(二) 数据存储篇 - JPA整合
- Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理
- Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
- Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
- Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块
- 文章标题Spring Boot干货系列:(十一)数据存储篇-Spring Boot整合Mybatis通用Mapper插件
- Spring Boot 揭秘与实战(五) 服务器篇 - 内嵌的服务器 Tomcat剖析
- Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache
- Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache
- Spring Boot 揭秘与实战(八) 发布与部署 - 远程调试
- Spring Boot 揭秘与实战之数据存储篇 - MySQL
- Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控
- 【云星数据---mesos实战系列003】:marathon实战009--marathon部署一个springboot应用
- Spring Boot 揭秘与实战(八) 发布与部署 - 开发热部署
- Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用
- Spring Boot 揭秘与实战(二) 数据存储篇 - Redis