Bootstrap

springboot整合Mybatis-plus配置

第一步:导进mybatis-plus的包

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

自动配置:

MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。

mybatis-plus:xxx 就是对mybatis-plus的定制

SqlSessionFactory 自动配置好。底层是容器中默认的数据源
mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下

容器中也自动配置好了 SqlSessionTemplate
@Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan(“com.atguigu.admin.mapper”) 批量扫描就行

优点:
只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力

第二步:配置数据库文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: abcde
    url: jdbc:mysql://localhost:3306/springbootdata
    type: com.alibaba.druid.pool.DruidDataSource
server:
  port: 8081

第三步:配置实体类和对应的mapper

person实体类:

PersonMapper:

package com.codel.mybatis_plus.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.codel.mybatis_plus.pojo.Person;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

//把方法注入容器里面  如果不想每一个都写,就在启动类里面配置
@Mapper
public interface PersonMapper extends BaseMapper<Person> {
    List<Person> getPersonAll();


}


第三步:写service和controller

PersonService

package com.codel.mybatis_plus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.codel.mybatis_plus.pojo.Person;

import java.util.List;

//继承这个接口,里面都是写好的sql语句,可以直接调用
public interface PersonService extends IService<Person> {
    List<Person> getPersonAll();
}


PersonController :

package com.codel.mybatis_plus.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.codel.mybatis_plus.pojo.Person;
import com.codel.mybatis_plus.service.impl.PersonServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.List;

@Controller
public class PersonController {
    @Autowired
    PersonServiceImpl personService;

    @GetMapping("/getperson")
    public String getPerson(Model model) {
        List<Person> personAll = personService.getPersonAll();
        model.addAttribute("persons", personAll);
        return "person/List";
    }

    //    分页
    @GetMapping("/testPage")
    public String page(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
        //构造分页参数
        Page<Person> page = new Page<>(pn, 2);
        //调用page进行分页 获得分页信息
        Page<Person> personPage = personService.page(page, null);
//        userPage.getRecords()
//        userPage.getCurrent()
//        userPage.getPages()
//        获得所有对象信息
        List<Person> records = personPage.getRecords();

        model.addAttribute("page", personPage);
        model.addAttribute("persons", records);
        return "person/List";

    }

    @GetMapping("/deleteUser/{id}")
    public String deleteUser(@PathVariable("id") int id, Model model,
                             @RequestParam(value = "pn", defaultValue = "1") int pn,
                             RedirectAttributes redirectAttributes) {

        boolean b = personService.removeById(id);
        redirectAttributes.addAttribute("pn", pn);
        return "redirect:/testPage";
    }

}

看上面的controller可以知道,要使用分页,就要使用分页插件,下面进行分页的配置
可以从官网上面找到模板的
Mybatis-plus官网网址

package com.codel.mybatis_plus.myconfig;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisConfig {


    // 最新版  分页插件   没有配置这个分页插件的是不可以进行分页的
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setMaxLimit(500L);
        paginationInnerInterceptor.setOverflow(true);

        interceptor.addInnerInterceptor(paginationInnerInterceptor);//这是分页拦截器
        return interceptor;
    }
}

第四步:写html前端页面

html页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>输出</title>
</head>
<body>
<div>
    <table border="1" >
        <tr>
            <th>id</th>
            <th>name</th>
            <th>age</th>
            <th>email</th>
            <th>操作</th>
        </tr>
        <tr th:each="person: ${persons}">
            <td th:text="${person.id}"></td>
            <td th:text="${person.name}"></td>
            <td th:text="${person.age}"></td>
            <td th:text="${person.email}"></td>
            <td>
                <!--      把两个数字传给后端去使用          -->
                <a th:href="@{/deleteUser/{id}(id=${person.id},pn=${page.current})}">删除</a>
            </td>
        </tr>

    </table>
    <div>
        当前第[[${page.current}]]页 总计 [[${page.pages}]]页 共[[${page.total}]]条记录
    </div>
    <div>
        <ul>
            <li><a href="#">← 前一页</a></li>
            <li th:class="${num == page.current?'active':''}" th:each="num:${#numbers.sequence(1,page.pages)}">
                <a th:href="@{/testPage(pn=${num})}">[[${num}]]</a>
            </li>
            <li><a href="#">下一页 → </a></li>
        </ul>
    </div>
</div>
</body>
</html>
;