MongoDb学习(四)--Repository

在学习这个的时候。关于Repository的映射。在备注xml的时候出现了错误。

错误有点坑。以后写的时候注意一点,在学习的时候。用的mongo的jar包版本比较低。

然而本机操作的时候,用的是最新版。其xml的配置发生的变化。

关于配置的信息。在配置的时候去官网查一下当前版本的使用方法。

这里记录一下spring-data-mongodb 的使用方法。增删改查。语法使用等。

通过学习这个。发现spring的好处。降低了开发门槛。而且可以提高开发的速度。还是不错的。

在前面几次学习中。都是使用的原生方法进行查询。这次换一种全新的方法。

基本操作就是创建一个自定义Repository的接口。让他继承与CrudRepository。

然后里面有附带的一些增删改查的方法。

这个最大的好处就是我们只用关注业务逻辑和接口的定义即可。

开发的时候,可以直接写接口。然后不用去写实现类,除非有复杂的方法有实现。

当然,这个接口里面的方法不是随便写的。而是有标准与规范的。具体写法,可以去官网查询api文档

当前版本

      <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.1.3.RELEASE</version>
  </dependency>

配置文件,版本不同,配置文件不同

<?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:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Default bean name is 'mongo' -->
    
        <mongo:mongo-client host="localhost" port="27017"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
  <constructor-arg ref="mongoClient"/>
  <constructor-arg name="databaseName" value="chaoba"/>
</bean>

   <mongo:repositories base-package="SpringMogo.mongo" />
</beans>
    List<Chaoba> findByName(String name);//根据条件查询
    List<Chaoba> findByNameAndSex(String name,String sex);//and查询
    List<Chaoba> findByNameAndSexAndAge(String name,String sex,String age);//多个and查询
    List<Chaoba> findByNameOrSex(String name,String sex);//or查询
    List<Chaoba> findByName(String name,Pageable page);//分页查询
    List<Chaoba> findByName(String name,Sort sort);//排序查询
    
    List<Chaoba> findTop2ByName(String name);//查询前几条

本次学习代码如下

ChaobaRepository类
package SpringMogo.mongo;

import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository("ChaobaRepository")
public interface ChaobaRepository extends CrudRepository<Chaoba, String> {

    List<Chaoba> findByName(String name);// 根据条件查询

    List<Chaoba> findByNameAndSex(String name, String sex);// and查询

    List<Chaoba> findByNameAndSexAndAge(String name, String sex, String age);// 多个and查询

    List<Chaoba> findByNameOrSex(String name, String sex);// or查询

    List<Chaoba> findByName(String name, Pageable page);// 分页查询

    List<Chaoba> findByName(String name, Sort sort);// 排序查询

    List<Chaoba> findTop2ByName(String name);// 查询前几条

}
实体类
package SpringMogo.mongo;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document(collection = "chaoba1")
public class Chaoba {
    @Id
    private String id;
    @Field("name")
    private String name;
    @Field("sex")
    private String sex;
    @Field("age")
    private String 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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}
测试类
package SpringMogo.mongo;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;

/**
 * Hello world!
 *
 */
public class App {

    private static ChaobaRepository chaobaRepository;

    static {
        chaobaRepository = (ChaobaRepository) new ClassPathXmlApplicationContext("classpath:spring.xml")
                .getBean("ChaobaRepository");
    }

    public static void main(String[] args) {
        System.out.println(chaobaRepository.count());

        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸");
        // And查询
        // List<Chaoba> result=
        // chaobaRepository.findByNameAndSexAndAge("chaoba4565","男","20");
        // Or查询
        // List<Chaoba> result= chaobaRepository.findByNameOrSex("chaoba4565","女");
        // 分页查询
        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new PageRequest(1,
        // 5));
        // 排序查询
        // List<Chaoba> result= chaobaRepository.findByName("暮雪超霸",new
        // Sort(Order.asc("title")));

        // Top查询
        List<Chaoba> result = chaobaRepository.findTop2ByName("暮雪超霸");

        for (Chaoba chaoba : result) {
            System.out.println(chaoba.getName());
        }
    }
}
一万年太久,只争朝夕!
原文地址:https://www.cnblogs.com/chaoba/p/10060433.html