Jersey MongoDB的使用

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项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值