Spring整合MongoDB之CRUD

本文介绍了如何使用Spring进行MongoDB的整合,包括创建Person实体类、PersonDao接口及其实现类,以及配置类AppConfig,重点是AppConfig中对MongoDB的配置和MongoTemplate的管理。最后提供了测试类的说明。

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

最近在学习MongoDB,之前使用java简单的对mongoDB进行CRUD操作,这次就尝试Spring和MongoDB的整合,小编也是第一次接触MongoDB,如有写的完善的地方,还望大家多多包涵;好啦,废话不多说,咋们直接上代码。
Tips : 本次整合我们没有使用XMl的方式来管理Spring, 我们使用编码的方式。
一 :开发环境准备
(1):开发工具 IDEA 2016
(2):Spring 4.0.0 MongoDB 3.2.2 Maven 3.2
二 :创建maven工程,引入相应的依赖
    创建过程在这里就不用多说了,下面是pom.xml的相关依赖
(1):pom.xml
<dependencies>
  <!-- Junit测试依赖 -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <!-- Spring依赖 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.0.0.RELEASE</version>
  </dependency>
  <!-- MongoDB驱动 -->
  <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.2.2</version>
  </dependency>
  <!-- spring-data 依赖 -->
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.8.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons-core</artifactId>
    <version>1.4.1.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>1.10.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.7.0.RELEASE</version>
  </dependency>
  <!-- 日志依赖 -->
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
  </dependency>
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.2</version>
  </dependency>
  <dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
  </dependency>
  <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
  </dependency>
  <dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.4</version>
  </dependency>
  <dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.5</version>
  </dependency>
  <dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.8.3</version>
  </dependency>
</dependencies>

(二):Person.java

/**
* 使用@Document注解标明在MongoDB数据库中生成的集合名称
*
* 若不指定则默认为类名第一个字母小写
*/
@Document(collection = "persons")
public class Person implements Serializable {

    @Id
    private String id;

    private String name;

    private Integer age ;

    public Person() {
    }

    public Person(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = 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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

(三):PersonDao.java

public interface PersonDao {

    /**
    * 保存信息
    * @param person
    */
    void save(Person person);

    /**
    * 根据ID查询信息
    * @param id
    * @return
    */
    Person findOneById(String id);

    /**
    * 根据姓名模糊查询
    * @param nameReg
    * @return
    */
    List<Person> findListByRegex(String nameReg);

    /**
    * 根据ID查询并修改信息
    * @param id
    * @param person
    * @return
    */
    Person findAndModify(String id, Person person);

    /**
    * 根据ID删除信息
    * @param id
    */
    void deleteById(String id);
}

(4):PersonDaoImpl.java

public class PersonDaoImpl implements PersonDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
    * 保存信息
    *
    * @param person
    */
    public void save(Person person) {
        mongoTemplate.save(person);
    }

    /**
    * 根据ID查询信息
    *
    * @param id
    * @return
    */
    public Person findOneById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        return mongoTemplate.findOne(query, Person.class);
    }

    /**
    * 根据姓名模糊查询
    *
    * @param nameReg
    * @return
    */
    public List<Person> findListByRegex(String nameReg) {
        String reg = "\\w*" + nameReg + "\\w*";
        Query query = new Query(Criteria.where("name").regex(reg));
        return mongoTemplate.findAllAndRemove(query, Person.class);
    }

    /**
    * 根据ID查询并修改信息
    * 返回更新前的信息, 若要返回更新后的信息,则还需要第四个参数 FindAndModifyOptions
    * @param id
    * @param person
    * @return
    */
    public Person findAndModify(String id, Person person) {
        Query query = new Query(Criteria.where("id").is(id));
        Update update = new Update().set("age", person.getAge())
                                    .set("name", person.getName());

        //实现返回更新后的信息
        FindAndModifyOptions options = new FindAndModifyOptions();
        options.returnNew(true);
        return mongoTemplate.findAndModify(query, update, options, Person.class);
    }

    /**
    * 根据ID删除信息
    *
    * @param id
    */
    public void deleteById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, Person.class);
    }
}

(5):java配置类(AppConfig.java)

@Configuration
public class AppConfig extends AbstractMongoConfiguration {

    /**
    * 指定数据库名称
    * @return
    */
    protected String getDatabaseName() {
        return "springMongoJavaCode";
    }

    /**
    * 连接MongoDB的主机和端口
    * @return
    * @throws Exception
    */
    public Mongo mongo() throws Exception {
        return new MongoClient("localhost",27017);
    }

    /**
    * 将PersonDao放入Spring容器中,让Spring进行管理
    * @return
    */
    @Bean
    public PersonDao personDao(){
        return new PersonDaoImpl();
    }

}

Tips : 在这个配置类注意到我们继承了org.springframework.data.mongodb.config.AbstractMongoConfiguration类
通过查看该类的源码我们不难发现,该类已经为我们管理了MongoTemplate, Mongo……

@Configuration
public abstract class AbstractMongoConfiguration {
    public AbstractMongoConfiguration() {
    }

    protected abstract String getDatabaseName();  //返回集合的名称

    /** @deprecated */
    @Deprecated
    protected String getAuthenticationDatabaseName() {
        return null;
    }

    public abstract Mongo mongo() throws Exception;  //通过它获取MongoClient

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(this.mongoDbFactory(), this.mappingMongoConverter());
    }

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(this.mongo(), this.getDatabaseName(), this.getUserCredentials(), this.getAuthenticationDatabaseName());
    }
  }

(6):测试类

public class PersonDaoImplTest {

    @Autowired
    private PersonDao personDao;

    @Test
    public void save() throws Exception {
        Person person = new Person("1002","鱼小七",13);
        personDao.save(person);
    }

    @Test
    public void findOneById() throws Exception {
        String id = "1002";
        Person person = personDao.findOneById(id);
    }

    @Test
    public void findListByRegex() throws Exception {
        String nameReg = "大";
        List<Person> persons = personDao.findListByRegex(nameReg);
        System.out.println(persons);
    }

    @Test
    public void findAndModify() throws Exception {
        String id = "1002";
        Person person = personDao.findOneById(id);
        person.setAge(8);
        Person person1 = personDao.findAndModify(id, person);
        System.out.println(person1);
    }

    @Test
    public void deleteById() throws Exception {
        String id = "1002";
        personDao.deleteById(id);
    }

}

接下来让我们看看运行的截图
我们可以看到是数据库中有一个名为springMongoJavaCode的数据库

插入的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值