美文网首页Java编程社区Java架构师专题
SpringBoot系列(2)整合MongoDB实现增删改查(完

SpringBoot系列(2)整合MongoDB实现增删改查(完

作者: 愚公要移山 | 来源:发表于2019-07-26 14:30 被阅读38次

    自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整的案例。

    一、环境配置

    对于环境配置我是用了一张表来展示,版本之间差异不大,你可以基于其他版本进行测试。

    名称 版本
    Idea 2018专业版(已破解)
    Maven 4.0.0
    SpringBoot 2.1.3
    MongoDB 4.0.4
    Robo3T(可视化工具) 1.2
    jdk 1.8

    二、代码整合

    我们在这里举的例子是对用户类user的增删改查操作。现在我们先看一下现在的项目结构:

    1-项目结构.png

    下面我们就来看一下具体实现步骤。
    第一步:在pom中添加依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--MongoDB相关依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
                <scope>true</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.38</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
            </dependency>
            <!--测试依赖,可去掉-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    </dependencies>
    

    第二步:在pom中启动热部署

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--如果没有该项配置,devtools不会起作用,应用不会restart -->
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
    </build>
    

    第三步:在application.properties文件中添加全局配置信息

    ##项目配置
    server.port=8888
    server.servlet.context-path=/mongotest
    ##mongodb相关配置
    spring.data.mongodb.database=test
    spring.data.mongodb.host=127.0.0.1
    spring.data.mongodb.port=27017
    

    第四步:新建bean包并创建User类

    public class User {
        private int id;
        private String name;
        private String password;
        //getter和setter方法
    }
    

    第五步:新建dao包并创建UserRepository接口

    public interface UserRepository extends MongoRepository<User,Integer> {
        //查询操作,自己定义实现
        User getByName(String name);
        User getByNameLike(String name);
    }
    

    注意:getByName中的name要和User中的name名字一样,比如这里就不能写成getByUserName,因为匹配的是userName和User中的字段name不同,运行的时候就会出错。

    第六步:新建service包并创建UserService接口

    public interface UserService {
        //增删改查接口
        public void saveUser(User user);
        public void removeUserByUserName(String name);
        public void updateUser(User user);
        public User getByUserName(String name);
        public User getByUserNameLike(String name);
    }
    

    第七步:在service包创建UserServiceImpl类

    @Service//这个标志不要忘记了
    public class UserServiceImpl implements UserService {
        //由于我们添加了依赖,可以使用注解直接注入
        @Resource
        private MongoTemplate mongoTemplate;
        @Resource
        private UserRepository userRepository;
        //保存用户
        @Override
        public void saveUser(User user) {
            userRepository.save(user);
        }
        //通过用户名字删除
        @Override
        public void removeUserByUserName(String name) {
            Query query=new Query(new Criteria("name").is(name));
            mongoTemplate.remove(query,User.class);
        }
        //通过用户id来更新名字
        @Override
        public void updateUser(User user) {
            Query q=new Query(new Criteria("id").is(user.getId()));
            Update update=new Update().set("name", user.getName());
            mongoTemplate.updateMulti(q, update, User.class);
        }
        //通过用户名查询
        @Override
        public User getByUserName(String name) {
            return userRepository.getByName(name);
        }
        //通过相似用户名查询
        @Override
        public User getByUserNameLike(String name) {
            return userRepository.getByNameLike(name);
        }
    }
    

    在这里你可能有一些疑问,一会使用mongoTemplate,一会又使用userRepository,在每一种情况下到底用哪个,在这里我们就给出一个对比,

    (1)使用MongoRepository

    使用Repository已经提供了基本的增删改查功能。

    对于查询操作:你不用写相关的查询组合语句,它会内部为我们实现这样的一个类。 你只需要按照相关规则就好。

    对于增加操作:要有主键才可以,并且不能是date日期类型的。

    但是他的缺点是不够灵活,这时候就可以使用MongoTemplate了。

    (2)使用MongoTemplate

    Spring Data给我们提供了MongoTemplate类,是非常强大的,里面提供了大量的操作数据库的方法,而且是线程安全的。可是它的很多方法都涉及到了Class,和CollectionName。针对不同的实体类,我们需要重复写不同的方法。

    第八步:创建controller包并创建Usercontroller类

    @RestController
    public class UserController {
        //注入service
        @Resource
        private UserService userService;
        
        //多增加几个用户
        @RequestMapping("/save")
        @ResponseBody
        public String saveUser() {
            for(int i=0;i<3;i++){
                User user=new User();
                user.setId(i);
                user.setName("fdd"+i);
                user.setPassword("12345"+i);
                userService.saveUser(user);
            }
            return "插入用户成功";
        }
        //删除fdd0
        @RequestMapping("/remove")
        @ResponseBody
        public String removeUserByUserName() {
            userService.removeUserByUserName("fdd0");
            return "删除用户成功";
        }
        //把1号名字改一下
        @RequestMapping("/update")
        @ResponseBody
        public String updateUser() {
            User user=new User();
            user.setId(1);
            user.setName("java的架构师技术栈");
            user.setPassword("123456");
            userService.updateUser(user);
            return "更新用户信息成功";
        }
        //通过名字查询
        @RequestMapping("/getUserByName")
        @ResponseBody
        public User getUserByName() {
            User user=userService.getByUserName("fdd2");
            return user;
        }
        //通过相似名字查询
        @RequestMapping("/getUserByNameLike")
        @ResponseBody
        public User getUserByNameLike() {
            User user=userService.getByUserNameLike("fdd");
            return user;
        }
    }
    

    到目前为止我们代码就实现完了。
    最后一步,那就是测试:


    2-浏览器结果.png

    我们可以在浏览器输入不同的路径测试。当然roto3T也有我们的插入的结果,其他的自己测试一下就好:


    3-数据库结果.png

    OK,这就是整合的整个过程,在这里其实也只是给出一个基础案例,希望对你有帮助。

    欢迎关注微信公众号:java的架构师技术栈,回复关键字可获取各种视频教程和新手到架构师的学习路线。


    微信公众号.png

    相关文章

      网友评论

        本文标题:SpringBoot系列(2)整合MongoDB实现增删改查(完

        本文链接:https://www.haomeiwen.com/subject/oxarrctx.html