0
点赞
收藏
分享

微信扫一扫

数据持久化技术——MP

诗尚凝寒 2022-04-13 阅读 53

文章目录


  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层的代码编写
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;

}
举报

相关推荐

0 条评论