<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.6version>
parent>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
顾名思义,代码生成器就是用来直接生成代码的一个程序。首先导入相关依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.3.1.tmpversion>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.31version>
dependency>
生成的代码需要使用lombok简化实体类开发导入相关依赖
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
创建utils包,拷贝代码生成器,需要修改的两个地方:数据库连接的数据库名、项目目录名。运行main方法,报错java.lang.ClassNotFoundException:com.mysql.jdbc.Driver,没有驱动,需要导入数据库连接依赖
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.32version>
dependency>
生成成功之后,mapper层的接口上加@mapper注解或者在主程序入口出添加,简单说一下service的方法都从哪里来,也就是Ctrl进源码看他继承方法内部又实现的接口里定义了后面需要使用到的所有方法。
导入mybatis-plus的场景启动器
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.5.1version>
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的依赖
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.17version>
dependency>
resources目录下创建templates文件夹,将前端页面导入。由于SpringBoot默认的打包方式是jar包,但是JSP不支持在jar包(一种压缩包)中编译,所以SpringBoot默认不支持JSP,于是我们需要引入第三方的模板引擎技术——Thymeleaf实现页面的渲染。
导入thymeleaf引擎的场景启动器
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
controller层的代码编写
service的crud方法接口的官方文档:https://baomidou.com/
@Autowired
private SingerService service;
@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;
}
查询所有的方法
查询所有
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;
}