MyBatisPlus简单入门

news2025/3/17 16:17:01

1、简单介绍MyBatisPlus

MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层,极度舒适省心。
局限:只支持简单的CRUD操作,不支持多表操作(join、union、子查询),不支持GroupBy和各种函数。

2 初步使用

2.1 引入依赖

新建SpringBoot工程。引入依赖

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

2.2 增加符合MyBatisPlus规范的Mapper和Service

@Repository
public interface EmployeePlusMapper extends BaseMapper<Employee>
{
}
@Service
public class EmployeePlusServiceImpl extends ServiceImpl<EmployeePlusMapper, Employee>
{

}

2.3 指定Bean的主键属性为自增

public class Employee
{
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
}

2.4 修改Controller

@RestController
public class EmployeePlusController
{
    
    @Autowired 
    private EmployeePlusServiceImpl employeeService;

    @RequestMapping(value = "/emp")
    public Object handle1(String op,Integer id,String lastname,String gender,String email){

        //封装数据模型
        Employee employee = new Employee(id, lastname, gender, email);
        switch (op){
            case "select": if (id == null){
                return "必须传入员工id!";
            }else {
                Employee e = employeeService.getById(id);
                return e == null ? "查无此人!" : e;
            }

            case "insert" : employeeService.save(employee);
                    return "操作完成!";

            case "update": if (id == null){
                return "必须传入员工id!";
            }else {
                 employeeService.updateById(employee);
                return  "操作完成!";
            }

            case "delete": if (id == null){
                return "必须传入员工id!";
            }else {
                employeeService.removeById(id);
                return  "操作完成!";
            }

            default: return "请正确操作";
        }
    }

    @RequestMapping(value = "/getAllEmp")
    public Object handle2(){
        List<Employee> all = employeeService.list();
        return all;
    }
}

3、按条件查询

现在希望对id>3的男性员工执行查询和更新删除操作如下:

@SpringBootTest
public class MyTest
{
    @Autowired
    EmployeeService employeeService;
    @Test
    public void testQuery(){
        //指定查询条件: id>2的男性员工
        QueryWrapper<Employee> wrapper = new QueryWrapper<Employee>().eq("gender", "male").gt("id", 2);
        //根据条件查询
        List<Employee> list = employeeService.list(wrapper);

   //指定更新条件
        UpdateWrapper<Employee> updateWrapper = new UpdateWrapper<Employee>().eq("gender", "male").gt("id", 4).set("gender", "female");
        //根据条件更新性别为女性
        employeeService.update(updateWrapper);
        //根据条件删除
        employeeService.remove(wrapper);

    }
}

4、MyBatisPlus模板生成器

虽然MyBatisPlus已经节省了sql编写的大部分工作,但是当面对几十上百个的处理的时候,仍然有大量的类模块要写,其中最大的工作量就是实体类的编写,如果手工还容易出错。
所以MyBatis-Plus还推出了代码生成工具https://github.com/baomidou/generator。

4.1 添加依赖

在pom.xml文件中添加代码生成工具

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.1</version>
</dependency>
 <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

4.2 编写生成器

编写生成器代码

public class MyGenerator
{
    public static void main(String[] args) {

        //指定为哪些表生成
        String[] tables={ "activity_info","activity_sku"  };

        FastAutoGenerator.create("jdbc:mysql://hadoop102:3306/gmall","root","000000")
                         .globalConfig(builder -> {
                             builder.author("atguigu")               //作者
                                    .outputDir("D:\\repo\\221109\\mybatisplusdemo\\src\\main\\java")    //输出路径(写到java目录)
                                    .commentDate("yyyy-MM-dd")
                                    .dateType(DateType.ONLY_DATE);  //选择实体类中的日期类型  ,Date or LocalDatetime
                         })
                         .packageConfig(builder -> {                 //各个package 名称
                             builder.parent("com.atguigu.mybatisplus")
                                    //.moduleName("governance")
                                    .entity("bean")
                                    .service("service")
                                    .serviceImpl("service.impl")
                                    .controller("controller")
                                    .mapper("mapper");

                         })
                         .strategyConfig(builder -> {
                             builder.addInclude(tables)
                                    .serviceBuilder()
                                    .enableFileOverride()  //生成代码覆盖已有文件 谨慎开启
                                    .formatServiceFileName("%sService")  //类后缀
                                    .formatServiceImplFileName("%sServiceImpl")  //类后缀
                                    .entityBuilder()
                                    .enableFileOverride()
                                    .enableLombok()  //允许使用lombok
                                    .controllerBuilder()
                                    .enableFileOverride()
                                    .formatFileName("%sController")  //类后缀
                                    .enableRestStyle()   //生成@RestController 否则是@Controller
                                    .mapperBuilder()
                                    .enableFileOverride()
                                    //生成通用的resultMap 的xml映射
                                    .enableBaseResultMap()  //生成xml映射
                                    .superClass(BaseMapper.class)  //标配
                                    .formatMapperFileName("%sMapper")  //类后缀
                                    .mapperAnnotation(Mapper.class) ; //生成代码Mapper上自带@Mapper

                         })

                         .templateConfig(
                             builder -> {
                                 // 实体类使用我们自定义模板
                                 builder.entity("templates/myentity.java");
                             })
                         .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                         .execute();
    }
    
}

4.3 自定义模块

以上生成代码主函数中有设计自定义模块。从idea中的jar包目录中找到jar包的模板。
在这里插入图片描述
拷贝到Resource/template目录下重命名为myentity.java.ftl,并吧第29,30行的修改
修改前:

<#if entityLombokModel>
@Getter
@Setter

修改后:

……
<#if entityLombokModel>
@Data
……

之后重新运行生成器的代码,就可以根据自己的模板生成Bean。
注意:可以重复生成,是覆盖操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/942850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何借助各个大模型的优点生成原创视频(真人人声)

第1步&#xff0c;借助天工AI搜索&#xff08;天工AI搜索 — 知识从这里开始 (tiangong.cn)&#xff09;&#xff0c;直接手机短信验证就可以使用&#xff0c;该大模型已经接入互联网&#xff0c;注意下图提问方式。 而且&#xff0c;细心的筒子已经发现&#xff0c;该回答可能…

Viobot硬件组成和接口

Viobot主要由主板、传感器板和外壳组成。具体尺寸可以在用户手册上面找到。 传感器板上面是双目摄像头和IMU&#xff0c;摄像头已经打了胶固定在外壳的前脸&#xff0c;由于涉及到传感器外参标定&#xff0c;所以不可自行拆卸。 LED补光灯版本&#xff1a; TOF版本&#xff1a…

Ceph入门到精通-Lunix性能分析工具汇总

出于对Linux操作系统的兴趣&#xff0c;以及对底层知识的强烈欲望&#xff0c;因此整理了这篇文章。本文也可以作为检验基础知识的指标&#xff0c;另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识&#xff0c;网络知识和操作系统知识&#xff0c;文档中的工具…

echarts笔记-上下左右部分显示比例(解决Y轴显示不全)

主要就是option里面的grid如下&#xff1a; grid: {top: 18%,left: 20%,//原来是10%&#xff0c;修改为20%right: 2%,bottom: 24%, },比如y轴显示不全就可以这样设置&#xff1a; grid: {left: 25%,//原来是10%&#xff0c;修改为20%right: 0%, },

vue2项目中表格的增删查改

我们在项目中经常会用到对于表格的增删查改操作&#xff0c;以下使用vue2elementui来实现表格的增删查改 表格的基本属性 基础表格如下:(其中需要注意的是当el-table元素中注入data对象数组后&#xff0c;在el-table-column中用prop属性来对应对象中的键名即可填入数据&#x…

Viobot基本功能使用及介绍

设备拿到手当然是要先试一下效果的&#xff0c;这部分可以参考本专栏的第一篇 Viobot开机指南。 接下来我们就从UI开始熟悉这个产品吧&#xff01; 1.状态 设备上电会自动运行它的程序&#xff0c;开启了一个服务器&#xff0c;上位机通过连接这个服务器连接到设备&#xff0c…

new操作符干了啥(手写new操作符)

new操作符干了啥&#xff08;手写new操作符&#xff09; 在JS中&#xff0c;new操作符用于创建一个新对象并调用一个函数来初始化对象&#xff0c;下面是手写实现new操作符的方法&#xff1a; // 传入构造函数 const myNew (constructor) > {// 1、创建一个空对象 {}cons…

QGIS 如何添加天地图

相信很多小伙伴在 QGIS 里面添加天地图的时候一定感觉很困惑,按照官网的操作申请 Key 之后,添加相对应的服务地址之后看不到地图或者地图不正常显示,今天我们就来解决这个问题 以下所有操作基于 QGIS 3.22 版本 申请 Key 1. 添加天地图的第一步需要申请 Key,首先要注册天…

US-DAS1、US-P2A单路及双路插头式比例放大器

US-P1、US-P2A、US-P2F插头式安装比例放大器控制不带电反馈的双路比例电磁铁的比例阀&#xff0c;如直动式或先导式比例方向阀的驱动控制。 工作电源24VDC标准&#xff1b; 兼容指令10V、4-20mA、0~10V、0~5V(电位器控制&#xff09;&#xff1b; 输出电流0~2A&#xff1b; …

web网站性能测试怎么做?常用指标有哪些

Web性能测试 一、网站web性能测试是什么意思&#xff1f;比如我们在打开一个网站的时候&#xff0c;网站打开时间很慢&#xff0c;或者总是打开失败&#xff0c;这都与网站性能有关系。那么网站性能测试就是通过各种自动化测试工具对系统的指标进行测试&#xff0c;通过模拟正…

记录--怎么实现一个3d翻书效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本篇主要讨论以下两种翻书动画的实现&#xff1a; 第一种是整页翻转的效果&#xff1a; 这种整页翻转的效果主要是做rotateY的动画&#xff0c;并结合一些CSS的3d属性实现。 第二种折线翻转的效果&…

什么是软件测评,第三方软件测试收费和流程是怎样的?

一、软件测评的意义 软件测评是一种对软件功能、性能等一系列的测试&#xff0c;并出具相关的软件测试报告给用户&#xff0c;帮助软件企业完成退税、验收等需求。软件测评可以确定产品的质量是否安全稳定、是否对客户有帮助&#xff0c;或者软件产品的其他组合是否可以提供更…

电脑共享文件夹-实现手机和其他电脑的文件同步更新

一、首先是电脑和手机需要处于同一个路由器下 二、创建一个文件夹&#xff0c;随便命名 三、点击属性-共享-Everyone-添加&#xff08;设置读取/写入&#xff09;-最后点击共享 四、这里要注意&#xff0c;如果电脑之前没设置过共享文件夹会有一个弹窗&#xff0c;点第一个就好…

爬虫逆向实战(二十四)--某鸟记录中心

一、数据接口分析 主页地址&#xff1a;某鸟记录中心 1、抓包 通过抓包可以发现数据接口是front/record/search/page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现&#xff0c;请求参数是加密的 请求头是否加密&#xff1f; 通过查…

《Python魔法大冒险》002 编程是什么?

魔法师:在这个充满魔法和奇迹的数字时代,你是否好奇过计算机是如何运作的?当你用手机玩游戏、在电脑上浏览网页、看动画电影,你是否想过这背后的秘密是什么?别担心,今天我们将揭开这神秘的面纱,一起来探索编程的神奇世界! 编程,简单地说,就是一种让计算机执行任务的…

Nginx详解 二:配置文件部分

文章目录 1. Nginx 配置文件1.1 主配置文件1.2 子配置文件1.3 全局配置1.3.1 修改启动的进程数1.3.2 cpu和work进程绑定&#xff08;nginx调优&#xff09;1.3.3 修改PID路径1.3.4 nginx进程的优先级&#xff08;work进程的优先级&#xff09;1.3.5 调试work进程打开的文件的个…

3D点云处理:基于2D边缘提取的方法提取3D点云边缘(占位待补充)

文章目录 0. 实现效果 微信&#xff1a;dhlddx B站演示视频 0. 实现效果

【程序猿书籍大放送:第二期】《强化学习:原理与Python实战》

&#x1f339;欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 爱书不爱输的程序猿&#xff1a;送书第二期 一、搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答1.RLHF是什么&#xff1f;2.RLHF适用于哪些任务&#xff1f;3…

Redis进阶 - Lua语法

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis进阶 - Lua语法 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-lua-language.html 初识 Lua Lua 是一种轻量小巧的脚本语言&#xff0c;用标准的 C 语言编写并以源代码形式开放&#…

ClickHouse进阶(四):ClickHouse TTL

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…