mybatis-flex入门体验(一)

简介: `shigen`,一个专注于Java、Python、Vue和Shell的博主,分享成长和认知。近期探索了`mybatis-flex`,通过官网学习了代码生成和编码体验。配置数据源和依赖后,利用示例代码生成了符合Lombok+MyBatis Plus规范的实体和Mapper。此外,展示了如何配置SQL打印,并用测试代码演示了查询、多条件查询和更新操作。`mybatis-flex`的亮点在于流畅的查询语法和连表查询功能。后续将分享更多关于连表查询的实践。一起学习,每天进步!

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
个人IP:shigen

趁着下午的空闲时间,研究了一下mybatis-flex,看着对我还是挺有吸引力的。于是打开了官网,先从代码生成开始:

代码生成

都是按照官方给的代码案例,

导入依赖

基本上都是很熟悉的依赖,必备的数据库连接JDBC、数据库连接池工具:

<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-codegen</artifactId>
    <version>1.8.2</version>
</dependency>

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>4.0.3</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.32</version>
</dependency>

代码生成

在官方给的代码案例上,稍微改了一下数据库的连接配置。

public class Codegen {
   
   

    public static void main(String[] args) {
   
   
        //配置数据源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/security?characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        //创建配置内容,两种风格都可以。
        GlobalConfig globalConfig = createGlobalConfigUseStyle1();
        //GlobalConfig globalConfig = createGlobalConfigUseStyle2();

        //通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        //生成代码
        generator.generate();
    }

    public static GlobalConfig createGlobalConfigUseStyle1() {
   
   
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.setBasePackage("com.gitee.shigen.mybatisflexdemo");

        //设置表前缀和只生成哪些表
        globalConfig.setTablePrefix("sys_");
        // globalConfig.setGenerateTable("tb_account", "tb_account_session");

        //设置生成 entity 并启用 Lombok
        globalConfig.setEntityGenerateEnable(true);
        globalConfig.setEntityWithLombok(true);
        //设置项目的JDK版本,项目的JDK为14及以上时建议设置该项,小于14则可以不设置
        // globalConfig.setJdkVersion(17);

        //设置生成 mapper
        globalConfig.setMapperGenerateEnable(true);

        //可以单独配置某个列
        // ColumnConfig columnConfig = new ColumnConfig();
        // columnConfig.setColumnName("tenant_id");
        // columnConfig.setLarge(true);
        // columnConfig.setVersion(true);
        // globalConfig.setColumnConfig("tb_account", columnConfig);

        return globalConfig;
    }

    public static GlobalConfig createGlobalConfigUseStyle2() {
   
   
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.getPackageConfig()
            .setBasePackage("com.test");

        //设置表前缀和只生成哪些表,setGenerateTable 未配置时,生成所有表
        globalConfig.getStrategyConfig()
            .setTablePrefix("tb_")
            .setGenerateTable("tb_account", "tb_account_session");

        //设置生成 entity 并启用 Lombok
        globalConfig.enableEntity()
            .setWithLombok(true)
            .setJdkVersion(17);

        //设置生成 mapper
        globalConfig.enableMapper();

        //可以单独配置某个列
        ColumnConfig columnConfig = new ColumnConfig();
        columnConfig.setColumnName("tenant_id");
        columnConfig.setLarge(true);
        columnConfig.setVersion(true);
        globalConfig.getStrategyConfig()
            .setColumnConfig("tb_account", columnConfig);

        return globalConfig;
    }
}

运行测试类,生成对应的代码:

控制台输出

再来看下生成的代码:

生成的代码结构

基本上很符合我们用lombok+mybatis plus的规范了,接下来只需要专注业务逻辑的开发即可。

编码体验

选取官方的几个案例,测试一下使用的效果。

配置sql打印

    <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>1.8.2</version>
    </dependency>
@Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
   
   

    @Override
    public void customize(FlexConfiguration configuration) {
   
   
        configuration.setLogImpl(StdOutImpl.class);
    }
}

测试代码

MyBatis-Flex 使用了 APT(Annotation Processing Tool)技术,在项目编译的时候,会自动根据 Entity 类定义的字段帮你生成 "ACCOUNT" 类以及 Entity 对应的 Mapper 类, 通过开发工具构建项目(如下图),或者执行 maven 编译命令: mvn clean package 都可以自动生成。这个原理和 lombok 一致。

执行mvn clean package之后,需要刷新一下mvn,避免必要的包无法导入。

其实效果类似于lombok,我们看一下生成的代码:

mbtais-flex生成的代码

最后编写测试类测试一下。

查询

下边是根据ID进行查询:

    @Resource
    private UserMapper userMapper;

    @GetMapping(value = "test/user/{id}")
    public User getUserById(@PathVariable("id") String id) {
   
   
        QueryWrapper queryWrapper = QueryWrapper.create().select().where(USER.ID.eq(id));
        return userMapper.selectOneByQuery(queryWrapper);
    }

查询日志

这样,一个简单的查询就可以完成。当然,官方的文档中,原生的sql查询也是可以的:

public interface UserMapper extends BaseMapper<User> {
   
   

    /**
     * 根据id查询用户信息
     *
     * @param id id
     * @return 用户信息
     */
    @Select(value = "select * from sys_user where id = #{id}")
    User getUserById(@Param("id") String id);
}
多条件查询

这里我就直接给出测试的代码了:

    @GetMapping(value = "test/user/select")
    public List<User> getUserList() {
   
   
        QueryWrapper queryWrapper = QueryWrapper.create().select().where(USER.PASSWORD.isNotNull())
            .and(USER.NICKNAME.likeRight("张%"))
            .and(USER.ENABLED.eq(true));
        return userMapper.selectListByQuery(queryWrapper);
    }
更新数据

更新数据

删除就在这里不演示了。

说实话,shigen在最开始并没有觉得这个框架的牛掰之处,无非就是抄写了mybatis-plus的优点,无非就是写查询的条件就像写sql语句一样的丝滑了。最后看了文档,才发现它的妙处:连表查询

时间关系,这次的分享就到此为止了,连表查询我将会给出详细的案例,期待和大家一起探讨。

与shigen一起,每天不一样!

目录
相关文章
|
6月前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
74 6
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
295 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
5月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
71 6
|
5月前
|
Java 关系型数据库 数据库连接
MyBatis入门(1)
MyBatis入门(1)
68 2
|
1月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
41 0
Mybatis入门(select标签)
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
6月前
|
Java 数据库连接 测试技术
MyBatis-Plus入门
MyBatis-Plus入门
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
174 0
|
5月前
|
Java 关系型数据库 数据库连接
技术好文共享:第一讲mybatis入门知识
技术好文共享:第一讲mybatis入门知识
35 6
|
5月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
50 4