前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis-flex入门体验(一)

mybatis-flex入门体验(一)

原创
作者头像
shigen
发布2024-03-22 00:07:48
1800
发布2024-03-22 00:07:48
举报

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

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

代码生成

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

导入依赖

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

代码语言:xml
复制
<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>
代码生成

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

代码语言:java
复制
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打印
代码语言:xml
复制
    <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>1.8.2</version>
    </dependency>
代码语言:java
复制
@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生成的代码
mbtais-flex生成的代码

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

查询

下边是根据ID进行查询:

代码语言:java
复制
    @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查询也是可以的:

代码语言:java
复制
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);
}
多条件查询

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

代码语言:java
复制
    @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一起,每天不一样!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码生成
    • 导入依赖
      • 代码生成
      • 编码体验
        • 配置sql打印
          • 测试代码
            • 查询
            • 多条件查询
            • 更新数据
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com