网站首页 > 技术文章 正文
文章目录
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: 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
??上面使用到了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;
}
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取
版权声明:本文为CSDN博主「扎哇太枣糕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_59138417/article/details/124073311
猜你喜欢
- 2024-09-18 Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移
- 2024-09-18 如何用Python抓抖音上的小姐姐(如何用python抓抖音上的小姐姐呢)
- 2024-09-18 建立深度学习服务器最简单的方法!快来get新技能吧
- 2024-09-18 Go 每日一库之 jobrunner(github每日一题)
- 2024-09-18 一个非常不错的项目,没有启动步骤文档「伪开源」
- 2024-09-18 渐进式Web应用(PWA)入门教程(上)(渐进式web app)
- 2024-09-18 教程|手把手教你在本地构建Nervos AppChain全家桶
- 2024-09-18 ssh 代理详细解释(ssh全局代理)
- 2024-09-18 前端容易理解错的跨域原理(跨域是前端解决还是后端解决的)
- 2024-09-18 代理,生活中随处可见,Go中如何进行 HTTPS 代理呢?
- 1513℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 558℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 505℃MySQL service启动脚本浅析(r12笔记第59天)
- 484℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 482℃启用MySQL查询缓存(mysql8.0查询缓存)
- 462℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 442℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 439℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)