当前位置: 首页 > article >正文

【Mybatis】如何简单使用mybatis-plus,以及MybatisGenerator自动生成或者实现SQL语句

前言

🌟🌟本期讲解关于mybatis中SQL自动生成的相关知识介绍~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~

目录

📚️1.Mybatis-plus快速入门

🚀1.1简介

🚀1.2构建数据库

🚀1.3引入mybatis-plus

1.3.1引入依赖

1.3.2构造mapper

1.3.3实体类

🚀1.4操作数据库

1.4.1主键方式

1.4.2条件构造

📚️2.MybatisGenerator实现

🚀2.1引入插件

🚀2.2生成代码xml

📚️3.总结

———小编一直以为已经写过这篇文章了,但是结果在使用的时候,回看小编写的博客,哎呀!!没有写,于是就想将这里的两种自动生成的方法讲解给大家听一听,希望对大家有帮助 

📚️1.Mybatis-plus快速入门

🚀1.1简介

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

总结就是:

功能非常强大,适用多种场景的SQL语句需求,以及支持多种数据库的操作;

具体的文章大家可以去看看官网:

简介 | MyBatis-Plus

🚀1.2构建数据库

小编这里使用的就是navicat进行数据库的创建的具体格式如下所示:

ok注意了这里的id一定要设置成主键的形式,这里后面在映射时起到关键作用

🚀1.3引入mybatis-plus

1.3.1引入依赖

这里的Spring boot 2引入如下依赖:

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

Spring boot 3引入如下的依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.10.1</version>
</dependency>
1.3.2构造mapper

代码如下所示:

@Mapper
public interface EmployerMapper extends BaseMapper<Employer> {
}

解释:这里我们定义的mapper层的类去继承我们BaseMapper<Employer>,BaseMapper<T>用于快速实现单表的基本 CRUD(创建、读取、更新、删除)操作,这里的泛型主要我们需要操作的实体类;

1.3.3实体类

这里的实体类,最主要的区别就是添加了映射的表名:

@Data
@TableName("`employer`")
public class Employer {
    private Integer id;
    private String empname;
    private String sex;
    private Date birthday;
    private String phone;
    private String email;
    private String xueli;
    private String department;
    private String job;
    private Date jobtime;
    private String status;

}

告诉我们这里对应的是那个表,那么此时我们就可以在service层进行增删改查的操作了;

🚀1.4操作数据库

1.4.1主键方式

小编这里为了方便,只实现删除以及查询的操作;

根据id进行删除代码如下:

 @Override
    public AppResult delete(Integer id) {
        try {
            int num = employerMapper.deleteById(id);

            if(num > 0){
                return AppResult.success("删除数据成功",null);
            }else {
                return AppResult.fail("删除数据失败",ResultCode.FAIL.getCode());
            }
        }catch (Exception e){
            return AppResult.fail("数据异常",ResultCode.FAIL.getCode());
        }

    }

这里主要就算是方法deleteById的操作,可以看到直接使用这里的方法既可以实现数据根据id进行删除,但是这里的删除是根据主键进行删除的我们这里id = #{ }内的参数默认是主键列;

但是如果我们没有设置id,主键甚至没有这个id列。那么如何指定id进行删除操作呢?

如下数据库:

这里小编就忘记设置这里的id了;

这里就可以在实体类中进行规定:

@Data
@TableName("archive")
public class Archive {
    //文档编号
    @TableId(value = "archive_number", type = IdType.INPUT)
    private String archiveNumber;
    // 员工编号
    private String employeeNumber;
    // 档案名称
    private String archiveName;
    // 内容摘要
    private String contentSummary;
    // 备注
    private String remark;
}

这里就是映射对应的数据库列,然后设置其为主键;

进行修改操作:

 @Override
    public AppResult update(Archive archive) {
        int row = archiveMapper.updateById(archive);
        if(row != 1){
            return AppResult.fail("更新数据失败",null);
        }else{
            return AppResult.success("更新数据成功", null);
        }
    }

 那么这里小编直接设置控制层,的参数为对象,直接在postman中进行测试操作:

这里修改的代码SQL语句大概就是:

update archive set archive_name = '赵六的文档' where archive_number = 1004; 

可以发现不仅解决的id主键的问题,并且小编发现对于所有的增删改查几乎都是满足动态SQL的情况编写;

1.4.2条件构造

那么对于查询来说我们可以根据id那么是否还可以根据其他方式进行呢?

代码如下所示 :

 @Override
    public AppResult select(EmployerDto dto) {

        //条件构造器
        QueryWrapper<Employer> wrapper = new QueryWrapper<>();
        //定义布尔值,判断是否输入了员工姓名
        boolean condition = null!=dto.getEmpName()&&!dto.getEmpName().equals("");
        wrapper.likeRight(condition,"empName",dto.getEmpName());

        boolean condition1 = null!=dto.getSex()&&!dto.getSex().equals("");
        wrapper.eq(condition1,"sex",dto.getSex());

        List<Employer> list = employerMapper.selectList(wrapper);
        if(list.size() > 0){
            return AppResult.success("查询到数据",list);
        }else {
            return AppResult.fail("没有数据查询",null);
        }
    }

1. 首先设置一个条件构造器

2.我们在判断condition转态的时候,这里如果为空或者没有长度,那么为false后就直接表示这个条件没有;

3.likeRight代表就是模糊查询中的右模糊查询,“empName”就是映射数据库字段,dto.getEmpName就是我们传递的参数

大致就是:

SELECT * FROM employer WHERE empName LIKE '张三%';

 4.下面的eq就是 = 符号,大致的SQL语句就是:

SELECT * FROM employer WHERE sex = '男'

📚️2.MybatisGenerator实现

🚀2.1引入插件

如下所示:

           <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <!--generator配置⽂件所在位置-->
                    <configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.33</version>
                    </dependency>
                </dependencies>
            </plugin>

这里的mysql中的8.0.33来说,小编使用的mysql是5.的版本,好像也是可以使用的~~

🚀2.2生成代码xml

这里生成代码的位置是根据上述插件中的

 <configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>

进行路径的配置的,很明显就是在resourcs下的mybatis包下生成的xml文件 

如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 禁用自动生成的注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!-- 连接配置 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/forum_db?characterEncoding=utf8&amp;useSSL=false"
                        userId="root"
                        password="642364">
        </jdbcConnection>

        <javaTypeResolver>
            <!-- 小数统一转为BigDecimal -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 实体类生成位置 -->
        <javaModelGenerator targetPackage="com.example.forum.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- mapper.xml生成位置 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- DAO类生成位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.forum.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 配置生成表与实例, 只需要修改表名tableName, 与对应类名domainObjectName 即可-->
        <table tableName="t_article" domainObjectName="Article" enableSelectByExample="false"
               enableDeleteByExample="false" enableDeleteByPrimaryKey="false" enableCountByExample="false"
               enableUpdateByExample="false">
            <!-- 类的属性用数据库中的真实字段名做为属性名, 不指定这个属性会自动转换 _ 为驼峰命名规则-->
            <property name="useActualColumnNames" value="true"/>
        </table>
 </context>
</generatorConfiguration>

然后注意了,这里面的表名即<table>标签中的第一个对应数据库字段,第二个对应java字段;

以及实体类,DAO类还有对于mapper包下生成xml的文件位置要进行配置好

最后就是数据库的连接,对应的密码以及root,不要弄错了

最后点击如下所示:

那么就可以直接在对应的包类下生成文件了,这里的生成代码还是动态SQL哦~~~~

📚️3.总结

本期主要讲解了关于mybatis-plus的简单使用,以及MybatisGenerator对于SQL,实体类,DAO层的代码自动实现,希望对大家有帮助~~~

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

       😊😊  期待你的关注~~~


http://www.kler.cn/a/565681.html

相关文章:

  • 嵌入式迷雾:现状谜团待解,未来行情走向何方?
  • 微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
  • 优博讯25届春招内推
  • 武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会
  • MQTT应用环路验证
  • Godot4.3 显示像素风格图片模糊如何设置?
  • Debian安装C语言环境
  • 自主可控:国产CAE一体化平台如何筑基新能源车未来
  • leetcode 75.颜色分类(详解)数组分块c++
  • 【Spring】AOP
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_t
  • [深度学习] 大模型学习2-提示词工程指北
  • 【落羽的落羽 C++】C++入门基础·其之一
  • 芯麦GC1277:电脑散热风扇驱动芯片的优质之选 并可替代传统的0CH477/灿瑞芯片。
  • API,URL,Token,XML,JSON是干嘛的
  • 某镇江 app 练手
  • linux之crosstool-NG(1)生成toolchain
  • TCP/IP 5层协议簇:数据链路层(交换机工作原理)
  • 如何获取mac os 安装盘
  • AI 自动化编程:从效率革命到未来教育的革新