1、pom包配置
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test
多个IP集群可以采用以下配置:
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
3、创建实体dao的增删改查操作
controller 层实现了UserEntity对象的增删改查
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); } }