在学习这个的时候。关于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()); } } }