0%

Mybatis-Plus整合SpringBoot

前言

  MyBatis-Plus(简称 MP)是一个Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。刚好最近学到springboot,来实现一个简单的整合。

快速实现

  1. 官方介绍:https://mp.baomidou.com/guide

    gitee源码地址:https://gitee.com/baomidou/mybatis-plus

  2. 快速实现

    • 导入依赖

      • <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        
    • 编写配置类,默认已经配置好了不少

      • 注:使用mybatis-plus之后,原先配置的mybatis会失效,需要重新在mybatis-plus配置
    • 编写实体类

      • ```Java
        //该注解可以表明该字段不在数据库,否则mybatis-plus使用报错
        @TableField(exist = false)
        private String userName;
        @TableField(exist = false)
        private String password;//@TableName(“user_tbl”),默认根据类名获取数据库中的表名,当名字不一致,可以使用该注解指定数据库表
        //@TableName(“user_tbl”)注解加在类前面
        1
        2
        3
        4
        5
        6
        7
        8
        9

        - 编写mapper类

        - ```java
        public interface UserMapper extends BaseMapper<User> {

        }

        //BaseMapper里面包括了基本的CRUD方法,我们不用额外再写
    • 测试输出

      @Autowired
      private UserMapper userMapper;
      @Test
      public void testSelect() {
          System.out.println(("----- selectAll method test ------"));
          List<User> userList = userMapper.selectList(null);
          Assert.assertEquals(5, userList.size());
          userList.forEach(System.out::println);
      }
      
    • 具体可参照官方文档

CRUD功能的实现

  • 在上一部分的基础上进行

  • 暂时只实现了删除

  • service层 Userservice 继承IService

    • ```java
      public interface UserService extends IService {
      }
      1
      2
      3
      4
      5
      6
      7

      - 实现service接口

      - ```Java
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      }
  • 控制层实现数据的展示和数据删除

    • RedirectAttributes重定向之后可以携带参数

    • ```Java

      @GetMapping("/user/delete/{id}")
      public String deleteUser(@PathVariable("id") Integer id,
                               @RequestParam("pn") Integer pn,
                               RedirectAttributes rn){
      
          userService.removeById(id);
          rn.addAttribute(pn);
          return "redirect:/dynamic_table";
      }
      
      @GetMapping("/dynamic_table")
      public String dynamic_table(@RequestParam(value = "pn",defaultValue = "1") Integer pn, Model model){
          
          List<User> list = userService.list();
      

      // model.addAttribute(“list”,list);

          //分页查询数据
          Page<User> page = new Page<>(pn,2);
      
          //分页查询结果
          Page<User> userPage = userService.page(page, null);
          model.addAttribute("page",userPage);
          return "data_tables/dynamic_table";
      }
      
      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
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64

      - html页面(利用thymeleaf模板引擎)

      - 传入page,page.records表示总分页数据

      - 遍历加状态写法:th:each="user,status:${page.records}",user表示每个遍历出来的用户,status表示状态

      - 页面转发并携带参数写法:th:href="@{/dynamic_table(pn=${num})}" th:href="@{/user/delete/{id}(id=${user.id},pn=${page.current})}

      - 条件判断:th:if th:switch

      - 生成数字序列:#numbers.sequence(1,page.pages),从一到末页

      - ```html
      <thead>
      <th>#</th>
      <th>编号</th>
      <th>用户名</th>
      <th>年龄</th>
      <th>邮箱</th>
      <th>操作</th>

      </thead>
      <tbody>
      <tr class="gradeX" th:each="user,status:${page.records}">
      <td th:text="${status.count}">Trident</td>
      <td th:text="${user.id}">Internet</td>
      <td th:text="${user.name}">Internet
      Explorer 4.0</td>
      <td th:text="${user.age}">Win 95+</td>
      <td th:text="${user.email}">Win 95+</td>
      <td>
      <a th:href="@{/user/delete/{id}(id=${user.id},pn=${page.current})}" class="btn btn-danger btn-sm" type="button">删除</a>
      </td>
      </tr>
      </tbody>
      </table>
      <!--分页条-->
      <div class="row-fluid">
      <div class="span6">
      <div class="dataTables_info" id="dynamic-table_info">
      当前第[[${page.current}]]页 总计 [[${page.pages}]]页 共[[${page.total}]]条记录
      </div>
      </div>
      <div class="span6">
      <div class="dataTables_paginate paging_bootstrap pagination">
      <ul>
      <!--判断是否有上一页-->
      <li th:switch="${page.hasPrevious()}">
      <a th:href="@{/dynamic_table(pn=${page.getCurrent()-1})}" th:case="true">← 前一页</a>
      <a th:href="@{/dynamic_table(pn=${page.getCurrent()})}" th:case="false">← 前一页</a>
      </li>
      <li th:class="${num == page.current?'active':''}" th:each="num:${#numbers.sequence(1,page.pages)}" >
      <a th:href="@{/dynamic_table(pn=${num})}">[[${num}]]</a>
      </li>
      <!--判断是否还有下一页-->
      <li th:switch="${page.hasNext()}">
      <a th:href="@{/dynamic_table(pn=${page.getCurrent()+1})}" th:case="true">下一页 → </a>
      <a th:href="@{/dynamic_table(pn=${page.getCurrent()})}" th:case="false">下一页 → </a>
      </li>
      </ul>
      </div>
      </div>
      </div>
-------------本文结束感谢您的阅读-------------
您的支持将成为我创作的动力!