闲着无事,研究一下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