プロジェクトチームのメンバーが常にMyBatisを使用してきたため、過去2日間に新しいプロジェクトが開始されました。私は個人的にJPAのミニマリストモデルを好みますが、MyBatisはプロジェクトを維持するために統一された技術選択を維持することを依然として決定しています。私はオンラインで、Spring BootとMybatisの組み合わせに関する関連情報を見つけました。さまざまな形があり、人々はそれを読むのにうんざりします。 MyBatisの公式デモとドキュメントを組み合わせて、最終的に2つの最も簡単なモードを見つけました。私はそれを要約して共有するのに一日を費やしました。
ORMフレームワークの本質は、プログラミングにおける操作データベースのエンコードを簡素化することです。現在、基本的に2つの会社が残っています。 1つは、SQL Hibernateの文を書くことができないと主張することであり、もう1つは動的SQLのMyBatisを柔軟にデバッグすることです。どちらにも独自の特性があり、エンタープライズレベルのシステム開発のニーズに応じて柔軟に使用できます。私は興味深い現象を見つけました。ほとんどの伝統的な企業は冬眠を使用することを好み、インターネット業界は通常MyBatisを使用しています。
Hibernateの特徴は、すべてのSQLがJavaコードを使用して生成され、プログラムから飛び出すことなくSQLを書く必要がないことです。プログラミングの完全性があります。モデルの上部に発展します。基本的に、対応するSQLはメソッド名に基づいて生成できます。あまり知らない場合は、Spring Data JPAの使用に関する以前の記事を読むことができます。
MyBatisは初期段階で非常に面倒で、さまざまな構成ファイル、エンティティクラス、DAOレイヤーマッピングアソシエーション、その他多くの構成が必要です。もちろん、Mybatisはこの不利な点も発見しました。初期段階では、ジェネレーターが開発され、テーブルの結果に基づいてエンティティクラス、構成ファイル、DAOレイヤーコードを自動的に生成できます。これにより、開発ボリュームの一部を減らすことができます。後の段階では、多くの最適化を使用して、注釈を使用し、DAOレイヤーや構成ファイルなどを自動的に管理することができます。上部の開発は、今日説明するモデルです。 MyBatis-Spring-Boot-StarterはSpringboot+MyBatisが構成ファイルなしで完全に注釈を付けることができ、簡単な構成であり、簡単に開始できます。
考えてみてください、春のブーツは素晴らしいです。何かをスプリングブーツに関連付ける限り、それを簡素化します。
mybatis-spring-boot-starter
公式説明:MyBatis Spring-Boot-Starterは、Spring BootでMyBatisを使用するのに役立ちます
実際、MyBatisは、Spring Bootのために非常に人気のあるため、楽しみに参加するソリューションを開発しましたが、これは実際に多くの問題を解決しており、実際に使用するのはよりスムーズです。 MyBatis-Spring-Boot-Starterには2つの主要なソリューションがあります。 1つは注釈を使用してすべての問題を解決することであり、もう1つは単純化された古い伝統です。
もちろん、任意のモードでは、まずmybatis-spring-boot-starterのPOMファイルを導入する必要があります。これで最新バージョンは1.1.1です(たまたまダブル11にあります:))
<Dependency> groupId> org.mybatis.spring.boot </groupid> <artifactid> mybatis-spring-boot-starter </artifactid> <バージョン> 1.1.1 </version> </dependency>
2つの開発モデルを紹介します
構成ファイルアノテーションバージョンはありません
注釈で行われます。
1関連するMavenファイルを追加します
<Dependencies> <Dependency> <GroupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter </artifactid> </dependency> <dependency> <deprofency> org.springframework.boot </groupid> <artifactidid </groupid> <artifactidid > spring-boot-starter-test </artifactid> <scope> test </scope> </dependency> <dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-boot-starter-web </artifactid> </dependency> <depen Dency> <groupId> org.mybatis.spring.boot </groupid> <artifactid> mybatis-spring-boot-starter </artifactid> <version> 1.1.1 </version> </dependency> <依存関係> <groupid> mysql </groupid> mysql-c onnector-java </artifactid> </dependency> <dependency> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-devtools </artifactid> <オプション
ここに完全なPOMパッケージを投稿しません。ソースコードを直接読んでください
2。Application.Properties関連する構成を追加します
mybatis.type-aliase-package = com.neo.entityspring.datasource.datasource.driverclassname = com.mysql.jdbc.driverspring.datasource.url = jdbc:mysql:// localhost:3306/test1 = rootspring.datasource.password = root
Springbootは、Spring.DataSourceの関連する構成を自動的にロードします。*、およびデータソースは、SQLSessionFactoryに自動的に注入されます。 SQLSessionFactoryは、マッパーに自動的に注入されます。ちなみに、すべてを心配する必要はありません。ただ拾って使用してください。
スタートアップクラス@MapperScanにマッパーパッケージのスキャンを追加する
@springbootapplication@mapperscan( "com.neo.mapper")public class application {public static void main(string [] args){springapplication.run(application.class、args);}}}または、MapperクラスにAnnotation @Mapperを追加するだけです。上記のものを使用することをお勧めします。そうしないと、各マッパーに注釈を追加することは非常に厄介です。
3.マッパーを開発します
3番目のステップは最も重要な部分であり、SQLの生産はここにあります
public interface usermapper {@serect( "select * from users")@results({@result(property = "usersex"、column = "user_sex"、javatype = usersexenum.class)、@result(result = "nickname"、column = "nick_name")}))list <userentity> get( #{id} ")@results({@result(property =" usersex "、column =" user_sex "、javatype = usersexenum.class)、@result(property =" nickname "、column =" nick_name ")})userentity getone(long id);@insert(" insert intint( "username、usex、usex) #{password}、#{usersex}) ")void insert(userentity users);@update(" Update users set username =#{username}、nick_name =#{nickname} where where where where where where where where where where boid update(userentityユーザー);生産に近づくために、データベースでuser_sexとnick_nameの2つの属性を特に強調し、エンティティクラス属性名は一貫していません。さらに、user_sexは列挙を使用します
@Selectはクエリクラスの注釈であり、すべてのクエリはこれを使用しています
@Resultの変更結果セットが返され、関連するエンティティクラスの属性とデータベースフィールドは1つずつ対応します。エンティティクラスの属性とデータベース属性名が一貫している場合、この属性は変更する必要はありません。
@insertデータベースを挿入して使用します。エンティティクラスを直接通過すると、対応する値への属性が自動的に解析されます
@Updateは変更を担当し、オブジェクトに直接渡すこともできます
@deleteは削除する責任があります
詳細については、こちらを参照してください:http://www.mybatis.org/mybatis-3/zh/java-api.html
#シンボルと$シンボルを使用することの違いは次のとおりです。
//この例は、作成されたステートメントを作成します。select * from teacher where where where where where where where where where where select( "select * from teacher where where where where where where where where where where where where where where where where where where where where where where where) SelectTeachForGivenName(@param( "name")string name);
4。使用
上記の3つのステップは、基本的に関連するレイヤー開発を完了します。それを使用するときは、通常のクラスとして使用するだけで、注入できます。
@runwith(springrunner.class)@springboottestpublic class usermappertest {@autowiredprivate usermapper usermapper; @testpublic void testinsert()スロー{usermapper.insert(new userentity( "aa"、 "a123456"、usexenum.man.man.man.man.man.man. userentity( "bb"、 "b123456"、usersexenum.woman)) {list <userentity> users = usermapper.getall(); system.out.println(users.tostring());}@testpublic void testupdate()throws exception {userentity user = usermapper.getone(3l); system.out.println(user.tostring()); user.setnickname( "neo"); usermapper.update(user); assert.asserttrue(( "neo" .equals(usermapper.getone(3L).getnickname());}}}ソースコードには完全な追加、削除、変更、検索がありますので、ここに投稿しません
ミニマリストXMLバージョン
Minimalist XMLバージョンは、ファイルをマッピングする古い伝統を維持しています。最適化は、主に実装する必要のない実装レイヤーに反映されています。システムは、メソッド名に従ってマッピングファイルに対応するSQLを自動的に見つけます。
1。構成
POMファイルは以前のバージョンと同じですが、次の構成がapplication.propertiesに追加されることを除きます
mybatis.config-locations = classpath:mybatis/mybatis-config.xmlmybatis.mapper-locations = classpath:mybatis/mapper/*。xml
MyBatis Basic構成ファイルとエンティティクラスマッピングファイルのアドレスを指定します
mybatis-config.xml構成
<configuration> <typealiase> <typealias alias = "integer" type = "java.lang.integer" /> <typealias alias = "long" type = "java.lang.long" /> <typealias alias = "hashmap" type "type =" java.util.hashmap " /> <typealiaas" type = "java.util.linkedhashmap" /> <typealias alias = "arraylist" type = "java.util.arraylist" /> <typealias alias = "linkedlist" type = "java.util.linkedlist" />> < /typealiass> < /conferturation>
ここでは、基本的なMyBatis構成を追加することもできます
2.ユーザーのマッピングファイルを追加します
<Mapper namespace = "com.neo.mapper.usermapper"> <resultmap id = "baseeresultmap" type = "com.neo.entity.userentity"> <id column = "id" property = "id" jdbctype = "bigint" /> <result column = "username" property = "jdbctype" /<columname " /> <プロパティ= "パスワード" jdbctype = "varchar" /> <result column = "user_sex" property = "usersex" javatype = "com.neo.usersexenum" /> <result column = "nick_name" property = "nickname" jdbctype = "varchar" />パスワード、user_sex、nick_name </sql> <select id = "getall" resultmap = "baseeresultmap"> select <include base_column_list "/> fromユーザー</select> <select id =" getone "parametertype =" java.lang.long.long "resultmap =" baseresultmap "> seled < />ユーザーからID =#{ID} </select> <ID = "insert" parameterType = "com.neo.entity.userentity">ユーザー(username、password、user_sex)値(#{username}、#{password}、#{usersex})に挿入>ユーザーの更新<if "set =" username!= null "> username =#{username}、</if> <if> <if> <" password!= null ">#{password}、</if> nick_name = {nickname}ここで、id =#{id} </update> <delete" parametemtectepe "delete" parametemtertype "ここで、id =#{id} </delete> </mapper>実際、Mapper SQLを以前のバージョンからXMLに移動しているだけでした。
3. DAOレイヤーコードを書きます
public interface usermapper {list <userentity> getall(); userentity getone(long id); void insert(userentity user); void update(userentity user); void delete(long id);}前のステップと比較して、残りのインターフェイスメソッドのみがあります。
4。使用
それを使用することと以前のバージョンを使用することに違いはありません。コードをご覧ください
選択方法
2つのモードには独自の特性があります。注釈付きバージョンは、シンプルで高速なモードに適しています。実際、最近の人気のあるマイクロサービスモデルのように、マイクロサービスは独自のデータベースに対応します。マルチテーブル接続クエリの需要は大幅に削減され、このモードにますます適しています。
古い伝統的なモデルは、大規模なプロジェクトにより適しています。 SQLを動的に柔軟に生成できます。これは、SQLを調整するのに便利であり、SQLを執筆するという感覚を非常に喜びと洗練されたものにします。
サンプルコード-github:https://github.com/ityouknow/spring-boot-examples
例コード - コードクラウド:https://gitee.com/ityouknow/spring-boot-examples