mybatis-flex入门体验(一)

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>

代码生成

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

scss 复制代码
 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>
typescript 复制代码
 @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,我们看一下生成的代码:

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

查询

下边是根据ID进行查询:

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

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

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

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

相关推荐
许野平16 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
LunarCod2 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。3 小时前
Spring Boot 配置文件
java·spring boot·后端
杜杜的man3 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*3 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu3 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s3 小时前
Golang--协程和管道
开发语言·后端·golang
为什么这亚子3 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
想进大厂的小王4 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构