数据持久化技术——MP

文章目录

  • 1 环境搭建
    • 1.1 创建一个maven的project
    • 1.2 pom.xml文件导入web开发依赖
    • 1.3 创建SpringBoot项目的主程序入口
  • 2 代码生成器
  • 3 配置数据库
  • 4 导入前端页面
  • 5 开始前端控制器的编码
    • 5.1 wrapper构造器

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

1 环境搭建

1.1 创建一个maven的project

在这里插入图片描述

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

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

@SpringBootApplication
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}

2 代码生成器

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

<!--Mybatis-Plus生成器依赖-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version>
</dependency><!--freemarker 模板引擎(没有用原生的模板引擎)-->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>

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

<!--lombok简化实体类开发,如果之前没有下载过依赖的同名插件的话需要下载安装,然后重启一下idea-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

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

<!--数据库连接驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version>
</dependency>

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

3 配置数据库

导入mybatis-plus的场景启动器

<!--mybatis-plus的场景启动器 内置了jdbc的启动器无需重复引用-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>

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

server:# 修改后端项目运行时的端口号信息port: 8888spring:# 配置数据源信息datasource:url: jdbc:mysql://localhost:3306/musicusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource

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

<!--整合druid的数据源-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version>
</dependency>

4 导入前端页面

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

<!--thymeleaf引擎的场景启动器-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

5 开始前端控制器的编码

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

@RequestMapping("/queryAll")
public List<Singer> queryAll() {// 先演示普通的查询,再逆序查询return null;
}@RequestMapping("/queryByName")
public List<Singer> 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;
}

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

首先是注入SingerService对象

@Autowired
private SingerService service;

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

查询所有的记录

@RequestMapping("/queryAll")
public List<Singer> queryAll() {List<Singer> singers = service.list();return singers;
}

  逆序查询的话就需要在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<Singer> queryAll() {LambdaQueryWrapper<Singer> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.orderByDesc(Singer::getId);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;
}

按照id查询

按照id查询
http://localhost:8888/singer/queryByName?name=王
@RequestMapping("/queryByName")
public List<Singer> queryByName(String name) {LambdaQueryWrapper<Singer> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(Singer::getName,name);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;
}

编写添加记录的方法

@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;}

修改方法

修改
http://localhost:8888/singer/update?id=64&introduction=歌声甜美
@RequestMapping("/update")
public String update(int id, String introduction, HttpServletRequest request) {LambdaUpdateWrapper<Singer> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();lambdaUpdateWrapper.eq(Singer::getId,id).set(Singer::getIntroduction,introduction);boolean update = service.update(lambdaUpdateWrapper);String result = update == true ? "修改成功" : "修改失败";return result;
}

删除方法

删除
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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7无法连接打印机拒绝访问_如何解决局域网无法访问SQL Server 2008 无法连接到(local)...

初次安装使用SQL server 2008时&#xff0c;可能会遇到无法连接到(local)的情况。那么&#xff0c;如何解决此问题&#xff1f;工具/原料: SQL server 2008方法/步骤1. 打开SQL server 配置管理器-->SQL server 网络配置-->实例名的协议(我的实例名为SQLEXPRESS)。2. 将S…

windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!

90% 对于电脑的不满&#xff0c;都逃不出这几个方面&#xff1a;电脑状态无法随时监测、运行卡顿、开机时间长、莫名黑屏、电池关键时刻不扛使(笔记本电池怎么保养&#xff1f;能不能一直插电源充电&#xff1f;可以戳这里→)&#xff0c;很多小伙伴就选择安装第三方软件来解决…

三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统

导读&#xff1a;商汤研究院和浙江大学CAD&CG国家重点实验室合作研发了一个手机端实时单目三维重建系统Mobile3DRecon。与现有的基于RGBD的在线三维重建或离线生成表面网格的系统不同&#xff0c;该系统结合前端位姿跟踪结果&#xff0c;允许用户使用单目摄像头在线重建场景…

【分类汇总】idea快捷键、idea配置、常用插件

写在前面 千万别看目录很长就感觉本篇博客很絮叨繁琐&#xff0c;里面多是配置的讲解贴了很多的图片方便大家了解&#xff0c;配置成功一次之后就可以一直使用了。 快捷键的使用建议大家先看&#xff0c;后续敲代码的时候刻意的使用快捷键&#xff0c;相信经过两三天的使用就可…

win10设置默认输入法_个性化设置技巧

个性化设置技巧子墨居士前言本次内容主要是win10系统自带的功能&#xff0c;不是用第三方软件优化桌面的情况下&#xff0c;让自己的电脑桌面能更美观、更舒服。系统自身的个性化设置主要是下图中的几个。鼠标右击->个性化设置。 第三方软件的效果会更好&#xff0c;毕竟是专…

什么叫组网_家庭wifi,如何组网最合适

wifi信号通过电磁波在空中传播的&#xff0c;属于微波通信的一种&#xff0c;因为微波本身及发射功率的限制&#xff0c;导致wifi的穿透能力比较差&#xff0c;北方比较厚的承重强&#xff0c;铁门、家具等对都会对wifi信号有较强的削弱作用。穿过的障碍物越多&#xff0c;这种…

java输入输出、数组初始化

&#x1f4a1;涉及的知识点速通&#x1f6eb; 关于输入输出你都知道啥?&#x1f6eb; 关于控制路程都需要注意啥?&#x1f6eb; 关于数组的问题你能答对几道&#xff1f;&#x1fa82; 数组初始化的小细节你都知道吗?&#x1fa82; 这些Arrays的常见API你都掌握了吗?&#…

linux rm 命令删除文件恢复_Linux之恢复误删除文件

前言每当我们在生产环境服务器上执行rm命令时&#xff0c;总是提心吊胆的&#xff0c;因为一不小心执行了误删&#xff0c;然后就要准备跑路了&#xff0c;毕竟人不是机器&#xff0c;更何况机器也有 bug。那么如果真的删除了不该删除的文件&#xff0c;比如数据库、日志或执行…

java三大特征 重载与重写的区别

&#x1f4a1;涉及的知识点速通&#x1f6eb; OOP的三大特征都是什么?&#x1fa82; 什么是封装?&#x1fa82; 什么是继承?&#x1fa82; 什么是多态?&#x1f6eb; 关于构造器你都知道什么?&#x1f6eb; 关于类的源文件都需要知道什么?&#x1f6eb; 重载和重写都是什…

发生身份验证错误_Python MySQL8.0 错误

Python MySQL8.0 错误&#xff1a;authentication plugin calling_sha2_password is not supported.Python3 进行到 python3 mysql(mysql-connector)&#xff0c;然后安装mysql-8.0.16&#xff0c;照着示例程序运行 python&#xff0c;遇到这个大大的问题&#xff1a;authentic…

vue 获取当前元素的父元素_react获取触发元素的属性 e.target.dataset

我的react项目中一个应用场景就是在点击一个元素的时候想要获取到这个元素的属性。代码如下&#xff1a;renderyear()>{return(<div><div data-value"年初">年初</div> </div>);}//点击标签的时候触发的函数 TagClick(e)>{console.log…

为什么要学Redis(NoSQL数据库)

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的Redis 6专栏&#xff0c;在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知识点速览&…

centos常用命令_二、Docker镜像是什么?Docker常用命令

科技奇闻 关注让你我共同进步文章来源&#xff1a;CSDN作者&#xff1a;IronmanJayDocker常用命令1.帮助命令docker version #查看版本号docker info #显示Docker系统信息&#xff0c;包括镜像和容器数docker --help #查看Docker有哪些命令…

实现定时中断_无线传感器网络实验报告(二)Timer定时应用实验

实验二&#xff1a; Timer定时应用实验2.1实验目的1. 认识并了解 CC2530 定时器&#xff1b; 2. 学习定时器的基本配置与应用&#xff1b; 3. 在 ZigBee 模块上运行定时器程序。2.2实验原理根据数据手册可知 CC2530 总共有 4 个定时器&#xff0c;但是定时器 2 被系统占用&…

详析java中的关键字和权限修饰

&#x1f4a1;涉及的知识点速通&#x1f6eb; 关于关键字你都知道什么?&#x1fa82; this和super关键字&#x1fa82; instanceof关键字&#x1fa82; static关键字&#x1fa82; final关键字&#x1f6eb; 权限修饰符的作用范围知多少?各位小伙伴们大家好&#xff0c;欢迎来…

JQ 全选后获取选中的值_Filecoin如何创建账户钱包并获取FIL测试币

昨天"猩动力节点"加入了fielcoin的测试网络&#xff0c;对用户或者矿工来说&#xff0c;如何获取代币&#xff0c;创建钱包保护好自己的资产&#xff0c;每一个用户来说都很关心。下面我们一起来学习如何创建账户钱包&#xff0c;并获取FIL 测试代币。在创建账户钱包…

Redis中 字符串的常用命令

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的Redis 6专栏&#xff0c;在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知识点速览&…

mac wmware 无网络_无线网络中常用的技术名词

1、LAN&#xff1a;即局域网&#xff1a;是路由和主机组成的内部局域网&#xff0c;一般为有线网络。2、WAN&#xff1a;即广域网&#xff1a;是外部一个更大的局域网。3、WLAN(Wireless LAN&#xff0c;即无线局域网)&#xff1a;前面我们说过LAN是局域网&#xff0c;其实大多…

python界面开发webview_python在webview和activity混合页面下怎么定位

展开全部 genymotion 模拟器&#xff1a;android 5.0.0 python 2.7 appium 1.4.16.1 1、app原生元素定位&#xff08;常用&#xff09; driver.find_element_by_id(“resourse-id”32313133353236313431303231363533e59b9ee7ad9431333363393662) driver.find_element_by_name(“…

androidstudio build tools安装_Android Studio4.0 安装及配置

本来打算十一月份写的&#xff0c;结果。。。就在我备注原来的文章的时候&#xff0c;硬盘坏了。。。所以重新配置环境。。。换硬盘&#xff0c;。。。坏的太突然以至于数据都没有备份。。。。建议大家在参考教程安装之前先大致浏览一遍&#xff0c;这样安装的时候就会大致知道…