MyBatis-Plus Wrapperクラスについて

この記事を書いたチーム:frontier

MyBatis-Plusとは?

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

JavaのフレームワークであるmyBatisの拡張版で、開発に使用するJava オブジェクトとデータベースレコードとのやり取りをより簡単にするためのフレームワークです。Javaプロジェクトにクエリパラメータ、条件分岐や繰り返し処理などを加えたsql文の記載が可能になります。Wrapperクラスを使用することで、xmlファイルにSQL文を記載することなく、データを取得でき、コードの短縮になるので便利です。

例としてUserテーブルが以下のように定義されているとして、xmlでのuserの取得の書き方と、Wrapperクラスを利用した書き方とで比較していきます。

ファイル構成は以下の通りです
src/main/java
    |_ com.example
               |_controller
                    |_UserController.java
               |_dao
                    |_UserMapper.java
               |_entity
                    |_User.java
               |_service
                    |_UserService.java
                      impl
                        |_ UserServiceImpl.java

src/main/resource
       |_mapper
            |_UserMapper.xml
       |_application.yml 

application.ymlには、以下の設定を追加してください。

 

UserMapper.xmlでの取得

 UserMapper.xmlでの取得には、com.exapmle下の5つのファイル(controller dao serive entity)と当然ですがsrc/main/resource下のUserMapper.xmlの記載が必要になります。Userテーブルから年齢が20歳以上のレコードを取得するような処理を書いてみましょう。SQL文では以下のようになります。

UserMapper.xmlはこのようになります。

mapperタグの属性のnamespaceにはUserMapperのパッケージ名とクラス名を、selectタグの属性のidには後述するserviceに定義するメゾット名を記載します。selectタグ内にさきほどのSQL文があり、取得結果がresultTypeとしてUserEntityが返されます。そのほかのファイルも以下のように記載します。

UserMapper.java

User.java

UserService.java

UserServiceImpl.java

UserController.java

“users/above20”のパスにgetリクエストが送信された時のUsersの出力結果

 

Wrapperクラスでの取得

User.javaUserController.javaUserService.javaは同じですが、UserMapper.javaUserServiceImpl.javaの記載方法が異なります。

UserMapper.java

先ほどのUserMapper.javaとくらべて、xmlに定義したUserテーブルから年齢が20歳以上のレコードを取得するメゾットがなくなりました。かわりのもの(Wrapperクラスを利用したもの)をUserServiceImpl.javaに記載します。

UserServiceImpl.java

記載方法が大きく異なりますが、取得結果は同じになります。

QueryWrapperWrapperクラスで最も一般的ものの一つです。型に取得したいEntityを指定し、インスタンス化します。

queryWrapper.gege>=の比較演算子を意味し、“age >= 20に当てはまるレコードを取得する”という意味になります。その他比較演算子やソート句なども用意されています。

Wrapperクラスを使用するメリットは、src/main/resource下のUserMapper.xmlを記載する必要がない点にあります。
今回のように、Userテーブルからシンプルな条件でのデータ取得する際は、Wrapperクラスを使用することをコードの量を減らすことができます。

 

参考
条件构造器 | MyBatis-Plus


【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス