springboot-mongodb 单数据源

1、pom包配置

pom包里面添加spring-boot-starter-data-mongodb包引用

<dependencies>
    <dependency> 
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency> 
</dependencies>
2、在application.properties中添加配置
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test
多个IP集群可以采用以下配置:
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

2、创建数据实体

注意@Id @Field 

@Id

主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。原因可参考上一篇mongo和mysql的性能对比。 
在实际业务中不建议自己设置主键,应交给mongo自己生成,自己可以设置一个业务id,如int型字段,用自己设置的业务id来维护相关联的表。

@Document

标注在实体类上,类似于hibernate的entity注解,标明由mongo来维护该表。

@Field

代表一个字段,可以不加,不加的话默认以参数名为列名。

给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName
    @Field("fName")
    private String firstName; 

在java bean实体中id的变量很特殊。变量id保存到mg中,自动转换成_id.

mg有自动序列_id,新增的时候自动生成。当然也可以在java bean中定义id设置值,mg中_id就使用你设置的值,当然不建议

@Id:保存时候,改值不传,MG自动生成_id的序列,唯一性。查询的时候,自动将_id的值传给cid

@Field:业务数据中的id,无法换成其他名字的情况。为了防止MG 转成_id,设置@Field,保存到MG中就是设置的值

public class UserEntity implements Serializable {
      
	@Id
        private String cid; 
        private String userName;
        private String passWord;
	private FamilyEntity  familyEntity ;


      //getter、setter省略
}
public class FamilyEntity implements Serializable {
      
	@Field("id")
        private String id
        private String name;
      //getter、setter省略
}

3、创建实体dao的增删改查操作
controller 层实现了UserEntity对象的增删改查

@RestController
@RequestMapper("mongo")
public class UserDaoImpl implements UserDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 创建对象
     * @param user
     */
    @RequestMapper("save")
    public void saveUser(@RequestBody UserEntity user) {
        mongoTemplate.save(user);
    }

    /**
     * 根据用户名查询对象
     * @param userName
     * @return
     */
    @RequestMapper("query")
    public UserEntity findUserByUserName(String userName) {
        Query query=new Query(Criteria.where("userName").is(userName));
        UserEntity user =  mongoTemplate.findOne(query , UserEntity.class);
        return user;
    }

    /**
     * 更新对象
     * @param user
     */
    @RequestMapper("update")
    public void updateUser(@RequestBody UserEntity user) {
        Query query=new Query(Criteria.where("id").is(user.getId()));
        Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
        //更新查询返回结果集的第一条
        mongoTemplate.updateFirst(query,update,UserEntity.class);
        //更新查询返回结果集的所有
        // mongoTemplate.updateMulti(query,update,UserEntity.class);
    }

    /**
     * 删除对象
     * @param id
     */
     @RequestMapper("dele")
    public void deleteUserById(Long id) {
        Query query=new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query,UserEntity.class);
    }
}


猜你喜欢

转载自blog.csdn.net/zhuchunyan_aijia/article/details/80267275