Jersey MongoDB的使用
前面介绍了Jersey与Redis的整合使用,这一章节我们介绍,jersey整合MongoDB数据库。
关于MongoDB数据库我们不做过多介绍,通过本次教程可以实现mongodb增删改查的简单使用,如果需要对mongodb有深入的学习,请参考MongoDB教程
引入依赖
<!--引入mongodb的依赖 -->
<!-- ============================== MongoDB start======================= -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.8.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
<!-- ============================== MongoDB end======================= -->
创建User类
User类上需要加上Document注解 其中collection=”user” 类似于mysql数据库中的users表、
id字段上加上@Id注解,表示mongodb会自动将该字段识别为id,如果该值为Null,mongodb会自动将内置的ObjectId作为id使用,所以在做插入数据的时候,需要我们手动设置id。
@Document(collection = "users")
public class User {
@Id
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
配置文件
spring-mongodb.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<!-- spring连接mongodb数据库的配置
host:mongodb 主机
port:mongodb 端口号
credentials 格式:${userName}:${passWord}@${dbname} userName mongodb的用户名 passWorld mongodb的密码 dbname mongodb的数据库
max-wait-time 最大等待时间
connect-timeout 连接超时时间
-->
<mongo:mongo-client host="${host}" port="${port}" credentials="${userName}:${passWord}@${dbname}" id="mongo">
<mongo:client-options write-concern="SAFE"
max-wait-time="1500"
connect-timeout="1000"
threads-allowed-to-block-for-connection-multiplier="100"
socket-keep-alive="true"
socket-timeout="1500"
connections-per-host="200" />
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="${dbname}" mongo-ref="mongo" />
<!--Srping mongo Template-->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
</beans>
UserService接口以及实现
UserService接口
public interface UserService {
public void insert(User user);
public void update(User user);
public void delete(String id);
public User selectById(String id);
public List<User> selectAll();
}
UserServiceImpl实现
我们使用Spring自动生成bean的方式生成该对象,所以需要加上@Service注解,同时需要注入MongoDBTemplate
@Service
public class UserServiceImpl implements UserService{
@Resource
private MongoTemplate mongoTemplate;
/**
* 插入用户
* @param user
*/
public void insert(User user) {
try {
mongoTemplate.insert(user);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 更新用户
* @param user
*/
public void update(User user) {
try {
Query query = new Query();
query.addCriteria(new Criteria("_id").is(user.getId()));
Update update = new Update();
update.set("age",user.getAge());
update.set("name",user.getName());
mongoTemplate.updateFirst(query,update,User.class);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 根据id删除用户
* @param id
*/
public void delete(String id) {
try {
Query query = new Query();
query.addCriteria(new Criteria("_id").is(id));
mongoTemplate.remove(query,User.class);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 通过id 查询用户
* @param id
* @return
*/
public User selectById(String id) {
try {
Query query = new Query();
query.addCriteria(new Criteria("_id").is(id));
User user = (User)mongoTemplate.findOne(query,User.class);
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 查询所有用户
* @return
*/
public List<User> selectAll() {
try {
return mongoTemplate.findAll(User.class);
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
服务提供UserResource
需要注意的是,之前的介绍中Resource类不需要继承和实现,不需要使用注解,但是在本项目中,我们需要在Resource中注入UserService,因此也需要将Resource的创建交给Spring进行管理。
@Component//resource转换为spring组件
@Path("/user")
public class UserResource {
@Resource
private UserService userService;
@Path("/add")
@POST
public Response add(@FormParam("id") String id,
@FormParam("name") String name,
@FormParam("age") int age){
User user = new User();
user.setAge(age);
user.setName(name);
user.setId(id);
userService.insert(user);
return JerseyTool.returnSuccess(new ResponseDto("OK","添加用户成功").toString());
}
/**
*
* 查询所有用户信息
* @return
*/
@GET
@Path("/getAll")
public Response getAll(){
List<User> users = userService.selectAll();
return JerseyTool.returnSuccess(JSON.toJSONString(users));
}
/**
* 根据用户id查询用户
* @param id
* @return
*/
@GET
@Path("/getById")
public Response getById(@QueryParam("id") String id){
User user = userService.selectById(id);
return JerseyTool.returnSuccess(JSON.toJSONString(user));
}
/**
* 更新用户信息
* @param id
* @param name
* @param age
* @return
*/
@PUT
@Path("update")
public Response update(@FormParam("id") String id,
@FormParam("name") String name,
@FormParam("age") int age){
User user = new User();
user.setAge(age);
user.setName(name);
user.setId(id);
userService.update(user);
return JerseyTool.returnSuccess(new ResponseDto("OK","添加用户成功").toString());
}
/**
* 根据id删除用户
* @param id
* @return
*/
@DELETE
@Path("/delete")
public Response deleteById(@QueryParam("id") String id){
userService.delete(id);
return JerseyTool.returnSuccess(new ResponseDto("OK","删除用户成功").toString());
}
}
为了更方便的响应json结果,我提供了ResponseDto。
public class ResponseDto {
private String code;
private String msg;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public ResponseDto(String code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public String toString() {
JSONObject json = new JSONObject();
json.put("code",getCode());
json.put("msg",getMsg());
return json.toString();
}
}
测试
通过Main方法启动程序.
为了更方便的测试,我们使用谷歌浏览器Postman插件进行测试。
1、添加用户
2、查询所有用户
3、根据id查询用户
4、删除用户
Jersey系列相关源码请访问:Jersey_learing项目