これはMyBatisシリーズの最初のものです。MyBatisの説明には約13の記事が使用されます。このシリーズが好きな人は、最新の記事が公開されているアカウント[Javaつくば]に注目してください。あまりナンセンスではないので、始めましょう!
MyBatisのない時代
MyBatisと言えば、MyBatisが存在しなかった時から始めなければなりません。当時、私たちのデータベース開発のほとんどはjdbcを使用して行われていました。しかし、JDBC操作データベースは非常に大きく使用できます。非常に退屈で退屈で、問題やエラーが発生しがちです。具体的な状況は次のとおりです。
JDBC時代
データベースに接続するプロセス:
- ドライバをロードします
- 接続を取得します
- スプライシングSQL
- SQLを実行します
- 結果を得る
- 結果を分析する
- データベースを閉じる
上記の操作はすべて、jdbcを使用してデータベースに接続するときに実行する必要のあるプロセスです。手順が非常に面倒であることがわかります。重要なのは、これらの手順の多くがプログラマーが本当に気にかけていることではないということです。プログラマーが本当に気にかけているのは、SQLの接続、SQLの実行、結果の解析です。
ただし、JDBCフレームワークに基づいて、他の操作を記述および操作する必要があるため、コードの記述が非常に面倒で冗長になり、プログラマーにとって特に使いやすいものではありません。
JDBCの欠点
前述のように、JDBCにはいくつかの致命的な欠点があります。一般的に、次の側面があります。
- 重複するコードが多すぎる
- 各操作に時間がかかりすぎる
- 面倒なデバッグとメンテナンス
- 動的SQLの標準はなく、維持するのは困難です
JDBCにはいくつかの致命的な欠点があるため、HibernateやMyBatisなど、他のフレームワークを使用してデータベースとの対話を完了します。
Hibernate
Hibernateを紹介する前に、まずORMとは何かを理解しましょう。
ヘビ
ORM:オブジェクトリレーショナルマッピング。簡単に言えば、データベース内のテーブルとJava内のオブジェクトの間にマッピング関係を確立することです。これにより、オブジェクトを操作してデータベースを間接的に操作できます。
ORMに最適なフレームワークは休止状態です。これにより、Javaオブジェクトを介してデータベースを間接的に操作できます。開発者は使い始めるのが簡単で、基盤となるjdbcとdbの間の相互作用プロセスは隠されています。プログラマー向けのさまざまなデータベースと互換性がありますが、プログラマーには影響されません。データベースをオブジェクトのように操作する必要があります
SQLを知らなくてもデータベースを操作できるのでとても便利で、特に職場に不慣れで仕事の経験が少ない若いパートナーにとってはとてもフレンドリーだと言えます。
利点
要約すると、利点は次のとおりです。
- jdbc操作プロセス全体を簡素化する
- オブジェクトを操作する必要があり、SQLを気にする必要はありません。hibernateは必要なSQLを自動的に生成するのに役立ちます
- コードの移植性が向上します。dbからhibernateまでの操作は、操作オブジェクトを介して実行されます。dbのタイプを切り替える必要がある場合、hibernateは自動的に適応し、開発者のビジネスコードに対してビジネスコードを調整する必要はありません。
- 開発効率は比較的高い
不利益
ことわざにあるように、何かを持っていると負けてしまいます。私たちはこれらの便利さを手に入れましたが、それに対応するいくつかの欠点と欠点があります。
- SQLの最適化はより難しく、さまざまな操作が最終的にdbに送信され、SQLはHibernateによって自動的に生成されます。開発者が、最終的に実行する必要のあるSQLに介入することは比較的困難です。
- Hibernateの使用を開始するのは比較的簡単ですが、習得するのは困難です
- 複雑な動的SQLの場合、アセンブリのコードに多くの判断を記述する必要があり、動的SQLのサポートは比較的不足しています。
したがって、Hibernateは、単純なシステム、開発サイクルが厳しいシステム、およびSQL用に高度に最適化されていないプロジェクトにのみ適しています。
MyBatis
MybatisはSQLを開発者の管理下に置くので、開発者はより自由で制限があまりありません。さまざまな企業のあらゆる種類の奇妙なビジネスやロジックを実現できます。SQLの最適化に関しては、次のこともできます。 badには、プログラマーの能力を最大限に発揮する独自の方法があります。Mybatisは、dbの操作プロセス、動的SQLのスプライシング、結果、オブジェクトのマッピングなど、反復作業を極端に最適化するのに役立ちます。あまり注意を払う必要はありません。注意。SQLの準備にもっと力を入れましょう。これは多くの国内メーカーにも支持されているので、来年に主要な工場に参入する場合は、それを習得する必要があります。
要するに、MyBatis:
- 優れた永続層フレームワークです
- ほとんどすべてのJDBCコードと、パラメーターを設定して結果セットを取得するプロセスが回避されます。
- 単純なXMLまたは注釈を使用して、ネイティブ情報を構成およびマップし、インターフェースおよびJavaエンティティークラスをデータベース内のレコードにマップします。
mybatis開発プロジェクトの具体的な手順
上記はとても良いです、結局のところ、ラバは散歩のために引き抜かれる馬です、それで次に私たちは一緒にMybatisプロジェクトのための棚を作ります、そしてそれは次の記事で埋められます。そしてプレゼンテーションをする
mybatismaven構成をSpringプロジェクトに導入します
最初のステップはmybatisを紹介することです
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
上記のmyba.ve.versionバージョンの場合、mavenリポジトリで最新バージョンを見つけるか、会社が必要とするバージョンを見つけることができます。
mybatis構成ファイルを作成する
Mybatisを紹介するとき、次のステップはMybatisの設定ファイルを書くことです。構成ファイルはxml形式であり、通常はリソースディレクトリに配置されます。
次のように:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/user.xml"/>
</mappers>
</configuration>
このファイルは主に、データソースやトランザクションの構成など、mybatisのグローバル構成用です。たとえば、上記のdatasource要素はデータソースの構成に使用され、データベースの一部の構成情報をデータで指定する必要があります。ソース;ここで設定します。データベースの継続的な情報については、独自のデータベースに応じてこのコードを変更できます。
あなたが今コードをよく知らなくても問題ではありません、そして次の記事はそれを段階的に説明して分析します。
マッパーxmlファイルを作成します
このファイルは、テーブルに対するすべての操作を表します。完了後、以下に示すように、上記のmybatisの構成ファイルによって導入されます。
<mappers>
<mapper resource="mapper/user.xml"/>
</mappers>
mappers要素には複数のmapperファイルが存在する可能性があります。開発するプロジェクトで操作する必要のあるテーブルが多数ある可能性があります。その後、mapper xmlファイルが多数存在します。これらはすべてmappers要素にインポートする必要があります。その後、mybatisはそれらを使用します。一般的に、テーブルはマッパーファイルに対応します。
マッパーインターフェースの作成
上記では、mybatisの構成ファイルとテーブル操作ファイルを作成しました。後で、上記の手順でmapper.xmlとのマッピング関係を確立するためにMapperインターフェイスを使用する必要があります。
後で、マッパーインターフェイスのメソッドを呼び出すときに、マッパーxml内のさまざまなデータのSQL操作を間接的に呼び出します。
マッパーインターフェイスとxmlファイルの関連付け
上記のマッパーインターフェイスとxmlファイルを作成しましたが、この2つはどのように関連していますか?
これには、以下に示すように、uesr.xmlでの構成が必要です。
<mapper namespace="zhonghu.mybatis.chat01.UserMapper"
上記の名前空間の値は、UserMapperインターフェースの完全な参照に対応していることに注意してください。この名前空間を介して、UserMapperインターフェースはuser.xmlとのマッピング関係を確立できます。
user.xmlには多くのdb操作があります。これらの操作は、UserMapperインターフェイスのメソッドとのマッピング関係を確立します。UserMapperのメソッドが呼び出されると、user.xmlの対応する操作が間接的に呼び出されます。
たとえば、user.xmlには次の構成があります。
<!-- 批量插入 -->
<insert id="insertBatch" parameterType="map">
<![CDATA[ INSERT INTO `user` (`id`, `name`, `age`, `salary`) VALUES ]]>
<foreach collection="list" separator="," item="item">
(#{item.id}, #{item.name}, #{item.age}, #{item.salary})
</foreach>
</insert>
また、UserMapperには、上記の挿入バッチ挿入に対応するinsertBatchメソッドが次のようにあります。
/**
* 批量插入用户信息
*
* @param userModelList
*/
void insertBatch(List<UserModel> userModelList);
したがって、UserMapperでinsertBatchメソッドを呼び出すときは、user.xmlで操作id = "insertBatch"を間接的に呼び出します。
これで、mybatisを使用してdbを操作できます。
インターフェイスとマッパーxmlは一緒にマッピングされ、間接的に呼び出されます。これは、Java動的プロキシを介して実装されます。
mybatisを介してMapperインターフェースを取得し、dbで操作を実行します
上で述べたように、マッパーインターフェイスを介してdbで操作を実行できます。マッパーを取得するための主なコードは次のとおりです。
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mybatisのコアコンポーネントは上記のコードで使用されています。具体的に見てみましょう。
Mybatisコアオブジェクトの紹介
SqlSessionFactoryBuilder
これは、SqlSessionFactoryオブジェクトを構築するために使用されるビルダーです。SqlSessionFactoryBuilderは、mybatisの構成ファイルを読み取ってから、SqlSessionFactoryオブジェクトを構築できます。
SqlSessionFactoryBuilderは、mybatis構成ファイル、マッパーxmlファイル、マッパーxmlファイル、およびマッパーインターフェイス間のマッピング関係を解析し、それらをjavaオブジェクトに配置します。javaオブジェクトはメモリに存在し、メモリへのアクセスは非常に高速です。その後、使用するたびにxmlを再度解析する必要はありません。SqlSessionFactoryBuilderが構成を解析した後、生成されるオブジェクトはSqlSessionFactoryです。これは重量のあるオブジェクトです。作成には時間がかかるため、通常はdb。SqlSessionFactoryオブジェクトは、システム操作中は常に存在し、SqlSessionFactoryBuilderは、それがなくなると解放できます。
SqlSessionFactory
これがファクトリ、つまりSqlSessionの作成に使用されるファクトリであることが名前でわかります。
前述のように、SqlSessionFactoryは重量のあるオブジェクトです。通常、dbはSqlSessionFactoryオブジェクトに対応し、システム操作中に常に存在します。
SqlSessionFactoryはインターフェースであり、このインターフェースにはDefaultSqlSessionFactoryとSqlSessionManagerの2つの実装があり、通常はSqlSessionFactoryBuilderを介してSqlSessionFactoryオブジェクトを作成します。
SqlSessionFactoryBuilderを使用してSqlSessionFactoryオブジェクトを作成するには、主に2つの方法があります。1つはmybatis構成ファイルを読み取る方法、もう1つはハードコードする方法です。
SqlSession
データベースを操作するには、jdbcを介して接続接続を取得し、この接続を使用してデータベースを操作する必要があります。mybatisのSqlSessionは、mybatisのSqlセッションオブジェクトと呼ばれるjdbcの接続接続オブジェクトに似ています。 db操作を使用します。SqlSessionオブジェクトであるため、このオブジェクトは通常、メソッドレベルにあります。メソッドが終了すると、オブジェクトは破棄されます。このオブジェクトは、sqlSessionFactory.openSessionメソッドを呼び出すことで取得できます。
SqlSessionオブジェクトを介してマッパーxmlでさまざまなdb操作を直接呼び出すことができます。特定の操作のIDを指定する必要があり、IDの形式はnamespace。操作のIDです。
マッパーインターフェース
SqlSessionを介してマッパーxmlのdb操作を直接呼び出すことができますが、より簡単で推奨される方法は、マッパーインターフェイスを使用することです。マッパーインターフェイスのメソッドとマッパーxmlファイルのさまざまなdb操作は、マッピング関係を確立します。マッパーインターフェイス。フルネーム+メソッド名はマッパーxmlの名前空間+特定の操作IDに関連付けられており、マッパーインターフェイスのメソッドを直接呼び出してデータベースを間接的に操作できます。使用すると便利です。マッパーインターフェイスSqlSessionを介して取得し、渡す必要があります。マッパーインターフェイスに対応するClassオブジェクトを入力し、次のようなこのインターフェイスのインスタンスを返します。
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
やっと
- 読んでやりがいを感じたら、気をつけたいと思います。ちなみに、いいねを言ってください。これが私のアップデートの最大のモチベーションになります。ご支援ありがとうございます。
- Javaとコンピュータの基本的な知識に焦点を当てた私の公開アカウント[JavaFox]に注目してください。私を信じていない場合は、私を叩いてください。
- ワンクリックのトリプル接続を探します:いいね、転送、視聴。
- 読んだ後に異なる意見や提案がある場合は、コメントして私たちと共有してください。皆様のご支援、ご愛顧を賜りますようお願い申し上げます。
-私は竹湖です。あなたと同じくらいプログラミングが大好きです。
最新ニュースについては、パブリックアカウント「JavaFox」をフォローすることを歓迎します