说明一下(有些东西是官网上的,有些是自己写demo的东西,有些乱,但是仔细看是可以发现端倪的)
简介
mybatis-flex 是什么
官网介绍 MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。
自己总结 (mybatis增强工具 类似mybatis-plus 但可能比mybatisplus好一点 但是我感觉市场占有率不高 MyBatis-Flex - MyBatis-Flex 官方网站)
特征
官网叙述
1、轻量:除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。 这带来了几个好处:1、极高的性能;2、极易对代码进行跟踪和调试; 3、把控性更高。
2、灵活:支持 Entity 的增删改查、以及分页查询的同时,MyBatis-Flex 提供了 Db + Row^灵活 工具,可以无需实体类对数据库进行增删改查以及分页查询。 与此同时,MyBatis-Flex 内置的 QueryWrapper^灵活 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。
3、强大:支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。
自己介绍
和mybatis-plus 一样,没什么说的,依赖上不同而已,具体上就是mybais+mybatisplus可以实现的,它可以实现,他们俩实现不了的,他也可以实现
快速开始
自我感觉这个框架可以代替mybaisplus 所有在学习完myabtis之后可以直接上手这个
要求有一定的基础,至少学过Java基础,Javaweb springboot 这些
springboot的版本是个谜,一般用个稳定的就可以,自己写demo可以用一下版本比较高的,生产环境下还是稳定版本比较好
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.5.5</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
<!-- pgsql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- for test only -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
application.yml配置
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 12345678
配置类(主程序)
@MapperScan("com.mybatis_fiex.mapper")
@MapperScans
(
{
@MapperScan("com.mybatis_fiex.mapper")
,
@MapperScan("com.mybatis_fiex.mapperTwo")
}
)
package com.mybatis_fiex;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.annotation.MapperScans;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.mybatis_fiex.mapper")
public class MybatisFiexApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisFiexApplication.class, args);
System.err.println("开机启动");
}
}
这里简单提一句 @MapperScan 和 @MapperScans 他们两个简单来说作用一样的 不过一个配置多个,一个是单个,我也是突然发现,就总结一下
编写实体类和 Mapper 接口
这里在简单说一下,这些是mybatis-flex提供的注解具体功能去百度把
@Data
@Table("tb_account")
public class Account {
@Id(keyType = KeyType.Auto)
private Long id;
private String userName;
private Integer age;
private Date birthday;
}
Mapper 接口继承 BaseMapper 接口:
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
}
测试使用
先配置一下日志
package com.mybatis_fiex.config;
import com.mybatisflex.core.audit.AuditManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
/**
* @author k_koukou
* @Package com.mybatis_fiex.config
* @Name 斌
* @DataTime 2023/8/3
* @ClassName MyBatisFlexConfiguration
**/
@Configuration
@Slf4j
public class MyBatisFlexConfiguration {
public MyBatisFlexConfiguration() {
//开启审计功能
AuditManager.setAuditEnable(true);
//设置 SQL 审计收集器
AuditManager.setMessageCollector(auditMessage ->
log.info("{},{}ms", auditMessage.getFullSql()
, auditMessage.getElapsedTime())
);
}
}
输出
Account(id=1, userName=张三, age=18, birthday=Sat Jan 11 00:00:00 CST 2020)
这里在说一句,第一次运行的时候会生成targer目录,该目录的classes目录下的实体类下面会有一个table文件夹,该文件是最大的亮点。可以代替mybatisplus很多容易出现错误的地方,如果自己不知道怎么去引入,先使用mvn去package一下,然后打开目录,右键复制路径,然后就可以引用使用,他的生成的文件如果感觉太长自己写起来比较麻烦,就可以使用privata static finall <> [写一个短一点的] = new <> ;这样就可以了。
基础功能
增删改
新增数据
BaseMapper提供了inset以及insertBatch方法,用于新增数据