赞
踩
mongodb作为nosql数据库的一种,在javaee开发中也越来越受到重视,这里介绍springboot+jpa+mongodb开发过程。
pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <version>2.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.22</version> </dependency> </dependencies>
application.yml
spring:
data:
mongodb:
uri: mongodb://localhost:27017/webserver
User.java
package com.xxx.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.ToString; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "xx_user") @Data @AllArgsConstructor @ToString public class User { @Id private Long id; private String username; private String password; private int age; }
UserRepository.java
package com.xxx.dao;
import com.xxx.entity.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends MongoRepository<User,Long>{
}
UserService.java
package com.xxx.service; import com.xxx.dao.UserRepository; import com.xxx.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public User findOne(Long id){ return userRepository.findById(id).get(); } public User save(User user){ return userRepository.save(user); } public List<User> queryAll(){ return userRepository.findAll(); } }
UserServiceTest.java
package com.xxx.service; import com.xxx.entity.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; import static org.junit.Assert.*; @SpringBootTest @RunWith(SpringRunner.class) public class UserServiceTest { @Autowired private UserService userService; @Test public void findOne() throws Exception { User user = userService.findOne(3L); System.out.println(user); assertEquals("null",user.getPassword()); } @Test public void save() throws Exception { User user = new User(3L,"convertor","null",0); assertEquals("convertor",userService.save(user).getUsername()); } @Test public void queryAll() throws Exception { List<User> list = userService.queryAll(); assertEquals(3,list.size()); } }
单元测试用的是SpringBootTest,这里条件设置的合理,测试结果基本就都是绿的。
添加bean配置
package com.xxx.config; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.convert.CustomConversions; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.convert.DbRefResolver; import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; @Configuration public class MongoMappingConfig { @Bean public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory){ DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver,context); try{ converter.setCustomConversions(beanFactory.getBean(CustomConversions.class)); }catch (Exception e){ e.printStackTrace(); } //don't save column _class to mongo collection converter.setTypeMapper(new DefaultMongoTypeMapper(null)); return converter; } }
再次单元测试,发现数据库中的结果如下:
> db.xx_user.find()
{ "_id" : NumberLong(1), "username" : "windows", "password" : "win7", "age" : 7, "_class" : "com
.xxx.entity.User" }
{ "_id" : NumberLong(2), "username" : "mongodb", "password" : "mongo", "age" : 3, "_class" : "co
m.xxx.entity.User" }
{ "_id" : NumberLong(3), "username" : "convertor", "password" : "null", "age" : 0 }
>
前面两条数据是没有配置mongodb的TypeMapper生成的,带有_class属性字段,_id为3的数据是配置了TypeMapper之后生成的,去掉了_class属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。