Spring Boot (八)MyBatis + Docker + MongoDB 4.x (2)

在application.properties添加如下配置:

spring.data.mongodb.uri=mongodb://username:pwd@172.16.10.79:27019/testdb Setp3:创建实体类 import java.io.Serializable; public class User implements Serializable { private Long id; private String name; private int age; private String pwd; //...略set、get } Setp4:创建Dao类 import com.hello.springboot.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; import java.util.List; @Component public class UserDao { @Autowired private MongoTemplate mongoTemplate; /** * 添加用户 * @param user User Object */ public void insert(User user) { mongoTemplate.save(user); } /** * 查询所有用户 * @return */ public List<User> findAll() { return mongoTemplate.findAll(User.class); } /** * 根据id 查询 * @param id * @return */ public User findById(Long id) { Query query = new Query(Criteria.where("id").is(id)); User user = mongoTemplate.findOne(query, User.class); return user; } /** * 更新 * @param user */ public void updateUser(User user) { Query query = new Query(Criteria.where("id").is(user.getId())); Update update = new Update().set("name", user.getName()).set("pwd", user.getPwd()); mongoTemplate.updateFirst(query, update, User.class); } /** * 删除对象 * @param id */ public void deleteUserById(Long id) { Query query = new Query(Criteria.where("id").is(id)); mongoTemplate.remove(query, User.class); } } Setp4:创建Controller import com.hello.springboot.dao.IndexBuilderDao; import com.hello.springboot.dao.UserDao; import com.hello.springboot.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; @RestController @RequestMapping("http://www.likecs.com/") public class UserController { @Autowired private UserDao userDao; @RequestMapping("http://www.likecs.com/") public ModelAndView index() { User user = new User(); user.setId(new Long(1)); user.setAge(18); user.setName("Adam"); user.setPwd("123456"); userDao.insert(user); ModelAndView modelAndView = new ModelAndView("/index"); modelAndView.addObject("count", userDao.findAll().size()); return modelAndView; } } Setp5:创建页面代码 <html> <head> <title>王磊的博客</title> </head> <body> Hello ${count} </body> </html>

到此为止已经完成了MongoDB的集成,启动项目,输入“:8080/”去数据库查看插入的数据吧。

正常插入数据库如下图:

Spring Boot (八)MyBatis + Docker + MongoDB 4.x

三、MongoDB主键自增

细心的用户可能会发现,虽然MongoDB已经集成完了,但插入数据库的时候user的id是手动set的值,接下来我们来看怎么实现MongoDB中的id自增。

3.1 实现思路

MongoDB 实现id自增和Spring Boot JPA类似,是在数据库创建一张表,来记录表的“自增id”,只需要保证每次都增加的id和返回的id的原子性,就能保证id实现“自增”的功能。

3.2 实现方案

有了思路之后,接下来我们来看具体的实现方案。

3.2.1 创建实体类 import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "IndexBuilder") public class IndexBuilder { @Id private String id; private Long seq; //..省略get、set方法 }

其中collection = "IndexBuilder"是指数据库的集合名称,对应关系型数据库的表名。

3.2.2 创建Dao类 import com.hello.springboot.entity.IndexBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; import static org.springframework.data.mongodb.core.FindAndModifyOptions.options; import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Query.query; @Component public class IndexBuilderDao { @Autowired private MongoOperations mongo; /** * 查询下一个id * @param collectionName 集合名 * @return */ public Long getNextSequence(String collectionName) { IndexBuilder counter = mongo.findAndModify( query(where("_id").is(collectionName)), new Update().inc("seq", 1), options().returnNew(true).upsert(true), IndexBuilder.class); return counter.getSeq(); } } 3.2.3 使用“自增”的id User user = new User(); user.setId(indexBuilderDao.getNextSequence("user")); //...其他设置

核心代码:indexBuilderDao.getNextSequence("user") 使用“自增”的id,实现id自增。

到此为止,已经完成了MongoDB的自增功能,如果使用正常,数据库应该是这样的:

Spring Boot (八)MyBatis + Docker + MongoDB 4.x

数据库的IndexBuilder就是用来记录每个集合的“自增id”的。

MongoDB集成的源码:https://github.com/vipstone/springboot-example/tree/master/springboot-mybatis-mongodb

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfygp.html