SpringBoot:整合mybatis-plus

准备数据库

创建表

CREATE TABLE USER
 ( id BIGINT(20) NOT NULL COMMENT ' 主键ID' , 
 NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名' , 
 age INT(11) NULL DEFAULT NULL COMMENT '年龄',
  email VARCHAR (50) NULL DEFAULT NULL COMMENT ' 邮箱' , 
  PRIMARY KEY (id) ); 

插入数据

INSERT INTO USER (id, NAME, age,
email) VALUES
(1,'Jack' , 20,' test2 @baomidou. com') ,
(3,'Tom' ,28,'test 3@baomidou. com' ),
(4,'Sandy',21,'test4abaomidou.com`user``user`'),
(5,'Billie',24, 'test5@baomidou. com') ;

开始整合

  1. 导入依赖

    <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    
  2. 创建对应的实体类

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @AllArgsConstructor
    @Data
    @NoArgsConstructor
    //没有把他标注成组件springboot是咋找到并且封装的
    public class User {
        //以下为数据库字段
        int id;
        String NAME;
        int age;
        String Email;
    }
    
    
  3. 编写Mapper接口并继承BaseMapper接口,把要操作的实体类作为泛型传入,用@TableName()绑定表名。

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Data
@NoArgsConstructor
@TableName("user")
//没有把他标注成组件springboot是咋找到并且封装的
public class User {
    @TableField(exist = false)
    String name;
    @TableField(exist = false)
    String password;

    //以下为数据库字段
    int id;
    String NAME1;
    int age;
    String Email;
}

在 IntelliJ IDEA 中可以通过快捷键和左侧的链接单击后查看当前类的方法结构。 Windows 的快捷键是 Ctrl + F12

然后咱们看一下BaseMapper有哪些方法
在这里插入图片描述
一些基本的crud的方法他都帮我们写好了。
但是这里要注意实体类的所有字段都必须在表中有,如果没有需要在缺失字段上方标注 @TableField(exist = false),否则会报错。
在这里插入图片描述

规范化开发service:
在这里插入图片描述
@Service标注在实现类上,在Controller中注入的是接口。
然后我们开始无脑开发service层
service接口

import com.baomidou.mybatisplus.service.IService;
import com.example.boot2admin.pojo.User;

public interface UserService  extends IService<User> {
}

impl

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
}

就这么简单?是的就这么简单。

ctrl+alt+L idea前端代码格式化

实战

ok我们来结合一下前端把他展示到网页上,这里会用到分页。
到这里为止我们发现mapper、service、serviceImpl已经只剩一个空壳子了。真正需要处理的是controller,controller去生成Page对象(mybatis-plus内部封装的一个用来记录分页信息的一个对象)然后存到model这样前端可以从page中取各种信息。
tatal:总记录条数
current:当前页
pages:总页数
record:相当于之前封装的list

    @RequestMapping("/dynamic_table.html")
    public String dynamic_table(@RequestParam(value="pn" ,defaultValue = "1") Integer pn, Model model){//pn是当前页,是由url携带的参数,默认值是1.因为刚刚跳转时不携带参数,如果不设置默认值会报错。
//        List<User> users = userService.selectList(null);
        //查询并封装成list,wrapper是条件构造器,null表示没有条件
        
        Page<User> page = userService.selectPage(new Page<>(pn, 2), null);//2是pageSize,null是无条件
        //把分页信息封装成page
        
//        model.addAttribute("users",users);
        model.addAttribute("page",page);

        return "tables/dynamic_table";
    }

前端代码:

                        <div class="panel-body">
                            <div class="adv-table">
                                <table class="display table table-bordered" id="hidden-table-info">
                                    <thead>
                                    <tr>
                                        <th>ID</th>
                                        <th>NAME</th>
                                        <th class="hidden-phone">AGE</th>
                                        <th class="hidden-phone">EMAIL</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <tr class="gradeX" th:each="user:${page.records}">
                                        <td th:text="${user.getId()}"></td>
                                        <td th:text="${user.getNAME1()}"></td>
                                        <td class="hidden-phone" th:text="${user.getAge()}"></td>
                                        <td class="center hidden-phone" th:text="${user.getEmail()}"></td>
                                    </tr>

                                    </tbody>
                                </table>
                                <div class="row">
                                    <div class="col-lg-6">
                                        <div class="dataTables_info" id="editable-sample_info">
                                            总计 [[${page.pages}]]  页 当前 [[${page.current}]] 页
                                        </div>
                                    </div>

在这里插入图片描述

这里分页功能并没有完全出来
是因为mybatis-plus官方提供一个分页插件,可以直接从官网上找到放进项目,不需要做改动。

package com.example.boot2admin.config;


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

@Configuration
@MapperScan("com.example.boot2admin.mapper")
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }


}

然后我们可以顺便实现一下删除功能
删除功能:我们首先要获得当前用户的id,删除完之后需要跳转回当前页面,所以需要记录下页码。
根据thymeleaf的传入参数的语法:url(parm=${取出值})传入这两个参数

 <a  th:href="@{/user/delete(id=${user.getId()},pn=${page.current})}" >删除</a>

创建一个UserController


import com.example.boot2admin.pojo.User;
import com.example.boot2admin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class UserController {
    @Autowired
    UserService userService;
    @RequestMapping("/user/delete")
    public String delete(@RequestParam("id")Integer id,
                         @RequestParam(value = "pn",defaultValue = "1")Integer pn,
                         RedirectAttributes re
                         ){
        userService.removeById(id);
        re.addAttribute("pn",pn);
        //重定向之后参数会消失,这一句是用来携带pn参数的,确保他能回到删除操作发生的那一页
        return "redirect:/dynamic_table.html";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值