• 数据持久化技术——MP


    文章目录

    mybatis-plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

    1 环境搭建

    1.1 创建一个maven的project

    在这里插入图片描述

    1.2 pom.xml文件导入web开发依赖

    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.6
    
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.3 创建SpringBoot项目的主程序入口

    @SpringBootApplication
    public class MainApplication {
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2 代码生成器

    顾名思义,代码生成器就是用来直接生成代码的一个程序。首先导入相关依赖

    
    
        com.baomidou
        mybatis-plus-generator
        3.3.1.tmp
    
    
    
    
        org.freemarker
        freemarker
        2.3.31
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    生成的代码需要使用lombok简化实体类开发导入相关依赖

    
    
        org.projectlombok
        lombok
        true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建utils包,拷贝代码生成器,需要修改的两个地方:数据库连接的数据库名、项目目录名。运行main方法,报错java.lang.ClassNotFoundException:com.mysql.jdbc.Driver,没有驱动,需要导入数据库连接依赖

    
    
        mysql
        mysql-connector-java
        5.1.32
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    生成成功之后,mapper层的接口上加@mapper注解或者在主程序入口出添加,简单说一下service的方法都从哪里来,也就是Ctrl进源码看他继承方法内部又实现的接口里定义了后面需要使用到的所有方法。

    3 配置数据库

    导入mybatis-plus的场景启动器

    
    
        com.baomidou
        mybatis-plus-boot-starter
        3.5.1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    resources目录下创建配置文件application.yml,配置数据库的相关信息

    server:
      # 修改后端项目运行时的端口号信息
      port: 8888
    
    spring:
      # 配置数据源信息
      datasource:
        url: jdbc:mysql://localhost:3306/music
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    上面使用到了pool(池子),数据库连接池也就是数据源,所谓的数据库连接池从字面意思上翻译就是将数据库连接放到一个池子里。相比之前的好处就是只需要创建一次连接,后面的都直接用不用一次次创建。数据源使用到了Druid的,需要导入Druid的依赖

    
    
        com.alibaba
        druid-spring-boot-starter
        1.1.17
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4 导入前端页面

    resources目录下创建templates文件夹,将前端页面导入。由于SpringBoot默认的打包方式是jar包,但是JSP不支持在jar包(一种压缩包)中编译,所以SpringBoot默认不支持JSP,于是我们需要引入第三方的模板引擎技术——Thymeleaf实现页面的渲染。
    导入thymeleaf引擎的场景启动器

    
    
        org.springframework.boot
        spring-boot-starter-thymeleaf
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5 开始前端控制器的编码

    复制controller层的框架整体,和前端进行交互的页面

    @RequestMapping("/queryAll")
    public List queryAll() {
    	// 先演示普通的查询,再逆序查询
    	
        return null;
    }
    
    @RequestMapping("/queryByName")
    public List queryByName(String name) {
    	// 使用lambdaQueryWrapper 的like方法模糊查询
    	
    	// list方法查询到所有的符合条件值并返回
        return null;
    }
    
    @PostMapping("/save")
    public String save(HttpServletRequest request) {
    	Singer singer = new Singer();
        singer.setName(request.getParameter("name"))
                .setSex(Integer.parseInt(request.getParameter("sex")))
                .setPic(request.getParameter("pic"))
                .setBirth(new Date())
                .setLocation(request.getParameter("location"))
                .setIntroduction(request.getParameter("introduction"));
    	
    	// 调用save方法,并判断返回值的正误,返回前端对应的字符串
    	
        return null;
    }
    
    @RequestMapping("/update")
    public String update(int id, String introduction) {
        // 使用eq和set去设置条件构造器
           
        // 调用update传入条件构造器,并判断返回值的正误,返回前端对应的字符串
        
        return null;
    }
    
    @RequestMapping("/delete")
    public String delete(Integer id) {
    	// 调用removeById方法直接删
    	
        return null;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    SQL语句是数据持久化技术的核心,jdbc使用String字符串拼接SQL语句;mybatis使用xml映射文件在标签里编写SQL语句;但是,MP无需使用SQL语句(一些复杂的业务可以使用SQL语句来完成),直接调用方法即可在框架的底层实现SQL语句的拼接和执行。
    在这里来查看一下mp的官方开发文档,大概讲一下几个方法的大概用处,然后摁住Ctrl查看源码,知道为什么可以使用这些方法完成相应的功能。

    首先是注入SingerService对象

    @Autowired
    private SingerService service;
    
    • 1
    • 2

    这里的用法是spring框架的控制反转,即将设计好的类对象注册进spring的IOC容器中将对象的控制权交给容器,当需要使用的时候就使用@Autowired注解让容器创建一个对象出来使用。完成的作用相当于使用new的方式调用类的构造器创建一个对象

    查询所有的记录

    @RequestMapping("/queryAll")
    public List queryAll() {
    
        List singers = service.list();
    
        return singers;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    逆序查询的话就需要在SQL语句拼接order by id desc,这个拼接条件的功能就需要使用wrapper构造器来完成了

    5.1 wrapper构造器

    在这里插入图片描述总而言之,wrapper构造器的作用就是用来拼装where,order by等条件语句的作用,如果你的增删改查无需条件的话,可以不用wrapper,但凡需要使用SQL语句需要拼接条件的话就需要使用wrapper。更加具体的wrapper案例分析参考博客wrapper构造器的简要案例分析

    逆序查询所有记录的方法

    逆序查询所有
    http://localhost:8888/singer/queryAll
    
    
    @RequestMapping("/queryAll")
    public List queryAll() {
    
        LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.orderByDesc(Singer::getId);
        List singers = service.list(lambdaQueryWrapper);
    
        return singers;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    按照id查询

    按照id查询
    http://localhost:8888/singer/queryByName?name=王
    
    
    @RequestMapping("/queryByName")
    public List queryByName(String name) {
    
        LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(Singer::getName,name);
    
        List singers = service.list(lambdaQueryWrapper);
    
        return singers;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编写添加记录的方法

    @PostMapping("/save")
    public String save(HttpServletRequest request) {
    
        Singer singer = new Singer();
        singer.setName(request.getParameter("name"))
                .setSex(Integer.parseInt(request.getParameter("sex")))
                .setPic(request.getParameter("pic"))
                .setBirth(new Date())
                .setLocation(request.getParameter("location"))
                .setIntroduction(request.getParameter("introduction"));
    
    
        boolean save = service.save(singer);
        String result = save == true ? "添加成功" : "添加失败";
        return result;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    修改方法

    修改
    http://localhost:8888/singer/update?id=64&introduction=歌声甜美
    
    
    @RequestMapping("/update")
    public String update(int id, String introduction, HttpServletRequest request) {
    
        LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.eq(Singer::getId,id)
                .set(Singer::getIntroduction,introduction);
    
        boolean update = service.update(lambdaUpdateWrapper);
    
        String result = update == true ? "修改成功" : "修改失败";
        return result;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    删除方法

    删除
    http://localhost:8888/singer/delete?id=64
    
    
    @RequestMapping("/delete")
    public String delete(Integer id) {
    
        boolean remove = service.removeById(id);
        String result = remove == true ? "删除成功" : "删除失败";
        return result;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    学习Java的第二十三天。。。(集合)
    SpringBoot Gateway源码讲解
    HTML5语义化标签 header 的详解
    [附源码]Python计算机毕业设计SSM竞赛报名管理系统(程序+LW)
    决策树(上):数据挖掘十大算法之一
    计算机网络-网络层总结
    针对k8s集群已经加入集群的服务器进行驱逐
    机器人SLAM与自主导航
    AI 绘画 | Stable Diffusion WebUI的基本设置和插件扩展
    php session 的封装 (收藏)
  • 原文地址:https://blog.csdn.net/m0_67401920/article/details/126081364