Mybatis は非常に広く使用されている永続化レイヤー フレームワークですが、その後、mybatis の拡張フレームワークが登場しました。 mybatis の強化されたフレームワークでは、開発の簡素化と効率化を目的として、mybatis をベースに多くの機能が追加されています。 mybatis-plus は非常に人気のある追加フレームワークで、mybatis-plus では独自の機能だけでなく、mybatis のネイティブ機能も使用できます。最近、新しいオープンソースの mybatis 拡張フレームワーク mybatis-flex が発見され、その体験プロセスの記録を以下に共有します。
1. MyBatis-Flex の概要
Mybatis-Flex は、非常に軽量で、非常に高いパフォーマンスと柔軟性を備えたエレガントな Mybatis 拡張フレームワークです。 Mybaits-Flex を使用して任意のデータベースに簡単に接続できます。また、Mybaits-Flex に組み込まれている QueryWrapper のハイライトにより、SQL を書く作業が大幅に軽減され、エラーの可能性が減ります。
(公式 Web サイトのアドレス: https://mybatis-flex.com/)
全体として、MyBatis-Flex は開発効率と開発エクスペリエンスを大幅に向上させ、自分のことに集中できる時間を増やすことができます。
2. Mybatis-Flexの機能
- 軽量: MyBatis を除いて、サードパーティの依存関係やインターセプターはなく、原則として SqlProvider による軽量実装です。同時に、実行プロセス中に、SQL 解析 (Parse) は簡単に実行されません。これにより、次のような利点がもたらされます: 1. 非常に高いパフォーマンス; 2. コードの追跡とデバッグが容易; 3. より高度な制御。
- 柔軟性: Mybatis-Flex は、エンティティの追加、削除、変更、ページング クエリをサポートしながら、エンティティ クラスを使用せずにデータベースの追加、削除、変更、ページング クエリを実行できる Db + Row 柔軟なツールを提供します。同時に、Mybatis-Flex の組み込み QueryWrapper は柔軟性があり、複数テーブル クエリ、リンク クエリ、サブクエリなどの一般的な SQL シナリオの実装を簡単に支援できます。
- 強力: あらゆるリレーショナル データベースをサポートし、方言を通じて継続的に拡張できます。また、複数 (複合) 主キー、論理削除、楽観的ロック構成、データの感度解除、データ監査、データ入力、その他の機能もサポートします。
3. Mybatis-Flex と類似のフレームワークとの比較
1) 機能比較:
(公式 Web サイトより)
2) パフォーマンスの比較:
ここにテスト結果を直接投稿します:
単一データに対する MyBatis-Flex のクエリ速度は、MyBatis-Plus の約 5 ~ 10 倍以上です。
MyBatis-Flex の 10 データに対するクエリ速度は、MyBatis-Plus の約 5 ~ 10 倍です。
Mybatis-Flex のページング クエリ速度は、Mybatis-Plus の約 5 ~ 10 倍です。
Mybatis-Flex のデータ更新速度は、Mybatis-Plus の約 5 ~ 10 倍以上です。
4. Mybatis-Flex がサポートするデータベースの種類
MyBatis-Flex でサポートされているデータベース タイプを以下の表に示します。また、カスタム方言を通じてさらに多くのデータベース サポートを追加し続けることもできます。
5. クイックスタート
5.1. データベーステーブルの作成
CREATE TABLE IF NOT EXISTS `tb_account`
(
`id` INTEGER PRIMARY KEY auto_increment,
`user_name` VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME
);
INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
(2, '李四', 19, '2021-03-21');
5.2. Spring Boot プロジェクトを作成し、Maven 依存関係を追加する
springboot のバージョンは 2.7.x で、pom.xml の依存関係は次のとおりです。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</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>
</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>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>
*.properties
</exclude>
</excludes>
</resource>
<resource>
<directory>target/generated-sources</directory>
</resource>
</resources>
</build>
注: ターゲット/生成ソースの構成。そうしないと、APT が自動的に生成したクラスの参照に影響します。
5.3. 設定
application.yml でデータ ソースを構成します。
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 123456
スタートアップ クラス
に @MapperScan アノテーションを追加して、Mapper フォルダをスキャンします。
@SpringBootApplication
@MapperScan("com.*.*.mapper")
public class SpringbootMybatisFlexApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisFlexApplication.class, args);
}
}
5.4. エンティティクラスとマッパーインターフェイスの作成
@Data
@Table("tb_account")
public class Account {
@Id(keyType = KeyType.Auto)
private Long id;
private String userName;
private Integer age;
private Date birthday;
}
- @Table("tb_account") を使用して、エンティティ クラスとテーブル名の間のマッピング関係を設定します。
- @Id(keyType = KeyType.Auto) を使用して主キーを自動インクリメントとして識別します
public interface AccountMapper extends BaseMapper<Account> {
}
この部分は、非常に強力な MyBatis-Flex コード ジェネレーターを使用して生成することもできます。詳細については、https://mybatis-flex.com/zh/others/codegen.html を入力してください。
5.5. テスト
テストクラスは次のとおりです。
import static com.*.*.model.table.AccountTableDef.ACCOUNT;
@SpringBootTest
class SpringbootMybatisFlexApplicationTests {
@Autowired
private AccountMapper accountMapper;
@Test
void contextLoads() {
QueryWrapper queryWrapper = QueryWrapper.create()
.select()
//.where("age = 18");
.where(ACCOUNT.AGE.eq(18));
Account account = accountMapper.selectOneByQuery(queryWrapper);
System.out.println(account);
}
}
注: static import import static com...model.table.AccountTableDef.ACCOUNT;
コンソール出力は次のとおりです:
上記の例では、ACCOUNT は MyBatis-Flex によって APT を通じて自動的に生成されます。手動でコーディングせずに静的にインポートするだけで済みます。
6. まとめ
全体として、このフレームワークは Mybatis の拡張バージョンであり、mybatis plus、jooq、および fluent mybatis のほぼすべての利点を統合しています。詳しく調べることができます。公式 Web サイト: https://mybatis-flex.com / 。
特に QueryWrapper を使用する場合、問題が発生した場合は、公式の例を参照することもできます: https://gitee.com/mybatis-flex/mybatis-flex-samples/tree/master< /span>