mongodb整合spring之增删改查

本文介绍如何将MongoDB与Spring框架进行整合,并提供了一个实际应用案例。从配置文件到Maven依赖,再到控制层、服务层及DAO层的具体实现方法均有详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲着无事,研究一下mongo,之前一直都是直接些方法调用方法,一直没有和spring整合过,今天研究一下,原来整合后的语法简单多了,同时也看到了spring的强大之处.


废话不多说看我spring-mongo.xml文件配置:

<!-- 获取配置资源 -->
    <context:property-placeholder location="classpath:mongodb-context-config.properties" />


    <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}" >
        <mongo:options
                connections-per-host="${mongo.connectionsPerHost}"
                threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                connect-timeout="${mongo.connectTimeout}"
                max-wait-time="${mongo.maxWaitTime}"
                auto-connect-retry="${mongo.autoConnectRetry}"
                socket-keep-alive="${mongo.socketKeepAlive}"
                socket-timeout="${mongo.socketTimeout}"
                slave-ok="${mongo.slaveOk}"
                write-number="1"
                write-timeout="0" write-fsync="true"/>
    </mongo:mongo>

    <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
    <mongo:db-factory dbname="gang" mongo-ref="mongo" />

    <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>

    <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
    <mongo:mapping-converter base-package="com.lv.gang.entity" />

    <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
    <mongo:repositories base-package="com.lv.gang.mapper" />

    <context:annotation-config />
    <context:component-scan base-package="com.lv.gang.service,com.lv.gang.mapper" />


maven相关依赖:

<dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>2.10.1</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>1.2.1.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb-cross-store</artifactId>
      <version>1.2.1.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb-log4j</artifactId>
      <version>1.2.1.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>


控制层方法:

@Controller
@RequestMapping("test")
public class TestController {
    @Autowired
    private MongoService mongoService;
    @RequestMapping("add")
    public void add(){
        User u=new User();
        u.setUserId(UUID.randomUUID().toString());
        u.setAge(11);
        u.setUserName("gang");
        mongoService.addUser(u);
    }
    @RequestMapping("select")
    public void selectUser(){
        mongoService.seleteUser();
    }
    @RequestMapping("findList")
    public void findList(){
        mongoService.findList();
    }

}


service层方法:

@Service
public class MongoService {
    @Autowired
    private MongoMapper mongoMapper;

    public void addUser(User u) {
        mongoMapper.addUser(u);
    }

    public void seleteUser() {
        mongoMapper.selectUser();
    }

    public void findList() {
        mongoMapper.findList();
    }
}


dao层方发:

@Repository
public class MongoMapperImpl implements MongoMapper{
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * mongo的增加方法
     * @param u
     */
    @Override
    public void addUser(User u) {
        mongoTemplate.insert(u);
    }

    /**
     * mongo的条件查询方法
     */
    @Override
    public void selectUser() {
        Query query=new Query();
        query.addCriteria(new Criteria("userId").is("3eafc603-62fb-43f7-817d-0e34180b591f"));
        User one = mongoTemplate.findOne(query, User.class);
        System.out.print(one.getAge()+one.getUserId()+one.getUserName());
    }

    /**
     * mongo的分页查询方法
     */
    @Override
    public void findList() {
        Query query=new Query();
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC,"_id")));
        query.skip(0).limit(2);
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.print(users);
    }

}


dao层全部实现:

 @Override  
    public List<Person> findAll() {  
        // TODO Auto-generated method stub  
        return getMongoTemplate().find(new Query(), Person.class);     
  
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#findAndModify(java.lang.String) 
     */  
    @Override  
    public void findAndModify(String id) {  
        // TODO Auto-generated method stub  
        //new Query(Criteria.where("id").is(id)), new Update().inc("age", 3)  
          
        getMongoTemplate().updateFirst(new Query(Criteria.where("id").is(id)), new Update().inc("age", 3));  
  
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#findByRegex(java.lang.String) 
     */  
    @Override  
    public List<Person> findByRegex(String regex) {  
        // TODO Auto-generated method stub  
         Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);     
          Criteria criteria = new Criteria("name").regex(pattern.toString());     
            return getMongoTemplate().find(new Query(criteria), Person.class);     
  
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#findOne(java.lang.String) 
     */  
    @Override  
    public Person findOne(String id) {  
        // TODO Auto-generated method stub  
         return getMongoTemplate().findOne(new Query(Criteria.where("id").is(id)), Person.class);     
  
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#insert(com.mongo.bean.Person) 
     */  
    @Override  
    public void insert(Person person) {  
        // TODO Auto-generated method stub  
        getMongoTemplate().insert(person);     
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#removeAll() 
     */  
    @Override  
    public void removeAll() {  
        // TODO Auto-generated method stub  
        List<Person> list = this.findAll();     
        if(list != null){     
            for(Person person : list){     
                getMongoTemplate().remove(person);     
            }     
        }     
  
    }  
  
    /* (non-Javadoc) 
     * @see com.mongo.dao.AbstractRepository#removeOne(java.lang.String) 
     */  
    @Override  
    public void removeOne(String id) {  
        // TODO Auto-generated method stub  
        Criteria criteria = Criteria.where("id").in(id);     
        if(criteria == null){     
             Query query = new Query(criteria);     
             if(query != null && getMongoTemplate().findOne(query, Person.class) != null)     
                 getMongoTemplate().remove(getMongoTemplate().findOne(query, Person.class));     
        }     
  
    }  
  
    /** 
     * @return the mongoTemplate 
     */  
    public MongoTemplate getMongoTemplate() {  
        return mongoTemplate;  
    }  
  
    /** 
     * @param mongoTemplate the mongoTemplate to set 
     */  
    public void setMongoTemplate(MongoTemplate mongoTemplate) {  
        this.mongoTemplate = mongoTemplate;  
    }  
  
}


数据库数据:




项目demo的地址:


http://download.youkuaiyun.com/download/qq_38665235/10034040

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值