接着昨天来,今日整合入MongoDB,做个简单的查找功能出来。多说无用,开搞~
今日目标:加入MongoDB支持。写一个简单的查询。
首先,搭建环境、学习MongoDB这都不提了,这里只说java相关,顺嘴提一句,比起繁琐的SQL来说,感觉要简单不少。可能是还没有深入了解的原因。
步骤一:在pom.xml中加入对MongoDB的支持,配置相关properties:
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.properties:
spring.data.mongodb.uri=mongodb://simon:123456@192.168.150.128:27017/MongoDemo
步骤二:添加相应实体类(根据数据库中表字段添加)
package com.simon.pojo;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* @Author Simon
* @Date 2017/5/9 23:07
*/
@Document
public class Users {
private ObjectId id;
private String name;
private String sex;
private String age;
public Users(Long id, String name, String sex, String age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
//Getter Setter省略。
}
步骤三:创建与数据库交互的Dao类和Services类
package com.simon.dao;
import com.simon.pojo.Users;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @Author Simon
* @Date 2017/5/9 23:20
*/
@Component
public interface UsersDao extends MongoRepository<Users, Long> {
//自定义方法
List<Users> findByName(String name);
}
package com.simon.services;
import com.simon.pojo.Users;
import java.util.List;
/**
* @Author Simon
* @Date 2017/5/9 23:33
*/
public interface UsersServices {
List<Users> findByName(String name);
void save(Users users);
void delete(Users users);
void udate(Users users);
List<Users> findAll();
}
package com.simon.services.impl;
import com.simon.dao.UsersDao;
import com.simon.pojo.Users;
import com.simon.services.UsersServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class UsersServicesImpl implements UsersServices {
@Autowired
UsersDao usersDao;
@Override
public List<Users> findByName(String name){
return usersDao.findByName(name);
}
@Override
public void save(Users users){
usersDao.insert(users);
}
@Override
public void delete(Users users){
usersDao.delete(users);
}
@Override
public void udate(Users users){
usersDao.save(users);
}
@Override
public List<Users> findAll(){
return usersDao.findAll();
}
}
步骤三:Controller类:
package com.simon.controller;
import com.simon.pojo.Users;
import com.simon.services.UsersServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @Author Simon
* @Date 2017/5/9 0:02
*/
@Controller
public class HelloController {
@Autowired
UsersServices usersServices;
@RequestMapping("/findAllUsers")
@ResponseBody
public String findAll(){
List<Users> list = usersServices.findAll();
StringBuffer sb = new StringBuffer();
for (Users users : list){
sb.append(users.getName());
}
return sb.toString();
}
@RequestMapping("/findByName")
@ResponseBody
public String findByName(@RequestParam(value = "name")String name){
List<Users> list = usersServices.findByName(name);
StringBuffer sb = new StringBuffer();
for (Users users : list){
sb.append(users.getName());
}
return sb.toString();
}
}
此处只写两个查询,增删改留到junit中测试。
运行结果如下:
查询所有:
根据姓名查询:
问题1:增删改差只有接口,并没有实现类,怎么实现的。按字段查找也没有实现类,怎么实现的。
答:目前只知道是org.springframework.data.mongodb.repository包下的接口类MongoRepository有实现类,是他实现的,但是按照字段查找目前仍未找到原因,明天深查。
问题2:在pojo类Users中,id字段原本使用的是long类型,结果报错No converter found capable of converting from type org.bson.types.ObjectId to type Long
,后改为org.bson.types.ObjectId类型才解决。
答:仍未找到答案,后续补充。
明日目标:测试增删改,增加SpringBoot热部署功能。查找今日问题。