五、MongoDB与Spring结合

1.Maven依赖

<!-- Spring-MongoDB -->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>1.10.18.RELEASE</version>
</dependency>

2.Spring配置

<?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-4.0.xsd
	    http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">

    <!-- MongoDB连接池配置 -->
    <mongo:mongo-client host="192.168.137.100" port="27017" id="mongo">
        <mongo:client-options write-concern="ACKNOWLEDGED"
                              connections-per-host="100"
                              threads-allowed-to-block-for-connection-multiplier="5"
                              max-wait-time="120000"
                              connect-timeout="10000"/>
    </mongo:mongo-client>

    <!-- 转换器 -->
    <mongo:mapping-converter base-package="com.zava.mongodb.entity" id="mongoConverter">
        <mongo:custom-converters>
            <mongo:converter>
                <bean class="com.zava.mongodb.convert.BigDecimalToDecimal128Converter"/>
            </mongo:converter>
            <mongo:converter>
                <bean class="com.zava.mongodb.convert.Decimal128ToBigDecimalConverter"/>
            </mongo:converter>
        </mongo:custom-converters>
    </mongo:mapping-converter>

    <!-- MongoDB数据库连接工厂配置 -->
    <mongo:db-factory dbname="rab" mongo-ref="mongo"/>

    <!-- MongoDB模板配置 -->
    <bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
        <constructor-arg name="mongoConverter" ref="mongoConverter"/>
        <property name="writeResultChecking" value="EXCEPTION"/>
    </bean>
</beans>

3.定义实体-Collection

package com.zava.mongodb.entity;

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.Document;

import java.math.BigDecimal;

@Document(collection = "users")
public class User {

    private ObjectId id;

    private String username;

    private String country;

    private Address address;

    private Favorites favorites;

    private int age;

    private BigDecimal salary;

    private float lenght;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public Favorites getFavorites() {
        return favorites;
    }

    public void setFavorites(Favorites favorites) {
        this.favorites = favorites;
    }

    public ObjectId getId() {
        return id;
    }

    public void setId(ObjectId id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

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

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }

    public float getLenght() {
        return lenght;
    }

    public void setLenght(float lenght) {
        this.lenght = lenght;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", country="
                + country + ", address=" + address + ", favorites=" + favorites
                + ", age=" + age + ", salary=" + salary + ", lenght=" + lenght
                + "]";
    }


}

4.新增

@Resource
private MongoOperations template;

@Test
public void insertDemo() {
    User user = new User();

    user.setUsername("cang");
    user.setCountry("USA");
    user.setAge(20);
    user.setLenght(1.77f);
    user.setSalary(new BigDecimal("6265.22"));

    //添加“address”子文档
    Address address1 = new Address();
    address1.setaCode("411222");
    address1.setAdd("sdfsdf");
    user.setAddress(address1);

    //添加“favorites”子文档,其中两个属性是数组
    Favorites favorites1 = new Favorites();
    favorites1.setCites(Arrays.asList("东莞", "东京"));
    favorites1.setMovies(Arrays.asList("西游记", "一路向西"));
    user.setFavorites(favorites1);

    User user1 = new User();
    user1.setUsername("chen");
    user1.setCountry("China");
    user1.setAge(30);
    user1.setLenght(1.77f);
    user1.setSalary(new BigDecimal("6885.22"));
    Address address2 = new Address();
    address2.setaCode("411000");
    address2.setAdd("我的地址2");
    user1.setAddress(address2);
    Favorites favorites2 = new Favorites();
    favorites2.setCites(Arrays.asList("珠海", "东京"));
    favorites2.setMovies(Arrays.asList("东游记", "一路向东"));
    user1.setFavorites(favorites2);

    template.insertAll(Arrays.asList(user, user1));
}

5.查询

@Test
public void testFind() {
    // select * from users  where favorites.cites has "东莞"、"东京"
    Criteria all = where("favorites.cites").all(Arrays.asList("东莞", "东京"));

    List<User> find = template.find(query(all), User.class);

    System.out.println(find.size());

    for (User user : find) {
        System.out.println("user->" + user);
    }

    // select * from users  where username like '%s%' and (contry= EngLish or contry = USA)
    String regexStr = ".*s.*";
    // username like '%s%'
    Criteria regex = where("username").regex(regexStr);
    // country = English
    Criteria or1 = where("country").is("English");
    // country = USA
    Criteria or2 = where("country").is("USA");

    Criteria or = new Criteria().orOperator(or1, or2);

    Query query = query(new Criteria().andOperator(regex, or));

    List<User> find2 = template.find(query, User.class);

    System.out.println(find.size());

    for (User user : find2) {
        System.out.println(user);
    }
}

6.修改

@Test
public void testUpdate() {
    // update  users  set age=6 where username = 'lison'
    Query query = query(where("username").is("lison"));

    Update update = update("age", 6);

    WriteResult updateFirst = template.updateMulti(query, update, User.class);

    // update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"
    query = query(where("favorites.cites").is("东莞"));

    update = new Update().addToSet("favorites.cites").each("小电影2", "小电影3");

    WriteResult updateMulti = template.updateMulti(query, update, User.class);

    System.out.println("--------------------->" + updateMulti.getN());
}

7.删除

@Test
public void testDelete() {
    // delete from users where username = 'lison'
    Query query = query(where("username").is("lison"));

    WriteResult remove = template.remove(query, User.class);
    System.out.println("--------------------->" + remove.getN());

    // delete from users where age >8 and age <25
    query = query(new Criteria().andOperator(where("age").gt(8).where("age").lt(25)));

    WriteResult remove2 = template.remove(query, User.class);

    System.out.println("--------------------->" + remove2.getN());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值