springboot 集成mongDB 简单的crud操作
MongoDB 是一个基于分布式文件存储的数据库
MongoDB 是一个介于关系数据库和非关系数据库之间的产品
数据存储结构为json结构,key-value键值对形式
版本
springboot 1.5.17
JDK 1.8
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 配置yml文件
spring:
data:
mongodb:
port: 27017
database: fpdk
host: 127.0.0.1
3.列表项
User
@Document
public class User {
@Id
private Long id;
private String name;
private String grade;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
UserDao
public interface UserDao extends MongoRepository<User,Long>{
void deleteById(Long id);
}
此处采用Spring Data 用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。
此处没有采用Dao 和Dao实现类进行Dao层代码定义,而是采用集成MongoRepository 接口进行方法调用,此接口中实现了很多的查询方法,已经为我们实现类包括各种查询和添加更新删除的方法,还有封装好的分页代码。
MongoRepository接口
public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
MongoRepository 集成 PagingAndSortingRepository , QueryByExampleExecutor
MongoRepository中的方法
PagingAndSortingRepository 接口继承 CrudRepository 接口,其中的方法
当然你也可以自定义方法
在UserDao中自定义方法;
void deleteById(Long id);
自定义方法需要按照一定的规则约束 findBy+属性名(首字母大写)
service
public interface UserService {
List<User> findUserAll();
User findUserById(Long id);
void saveUser(User demoEntity);
void removeUser(Long id);
void updateUser(User user);
}
serviceimpl
@Service
public class Userimpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findUserAll() {
return userDao.findAll();
}
@Override
public User findUserById(Long id) {
return userDao.findOne(id);
}
@Override
public void saveUser(User demoEntity) {
userDao.save(demoEntity);
}
@Override
public void removeUser(Long id) {
userDao.deleteById(id);
}
@Override
public void updateUser(User user) {
userDao.save(user);
}
}
测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test {
@Autowired
private UserService userService;
@org.junit.Test
public void test(){
User user = new User();
user.setId(1L);
user.setAge(1);
user.setGrade("111");
user.setName("zs");
userService.saveUser(user);
user.setId(2L);
user.setAge(2);
user.setGrade("22");
user.setName("ls");
userService.saveUser(user);
}
}
另外说明,当添加的对象主键在mongDB中存在时候,mongDB会当做更新去对待,所以上面更新代码是 save();
mongDB注解详解
spring-data-mongodb中的实体映射是通过MongoMappingConverter这个类实现的。它可以通过注释把java类转换为mongodb的文档。
它有以下几种注释:
@Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。
@Document - 把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。@Document(collection="mongodb") mongodb对应表
@DBRef - 声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存,如下面例子的Person和Account。
@Indexed - 声明该字段需要索引,建索引可以大大的提高查询效率。
@CompoundIndex - 复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
@GeoSpatialIndexed - 声明该字段为地理信息的索引。
@Transient - 映射忽略的字段,该字段不会保存到mongodb。
@PersistenceConstructor - 声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据