プライベートな連絡先の最初の情報
送料メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《MyBatis理論40の質問》以下の2記事が収録されています。
新しいタグを追加します。keyProperty=“ID”
それでおしまい。
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) 問い合わせによる 構文 フィールド名の別名がエンティティ クラスの属性名と一致するように、ステートメント内でフィールド名の別名を定義します。
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2)パス <resultMap>
フィールド名とエンティティ クラスの属性名を 1 対 1 に対応付ける。
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) インタフェース実装クラスの継承 SqlSessionDaoSupport
: このメソッドを使用するには、次のように記述する必要があります mapper
インターフェース、mapper
インターフェース実装クラス、mapper.xml
書類。
sqlMapConfig.xml
中程度の構成mapper.xml
の位置。<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
インターフェース。SqlSessionDaoSupport
。mapper
メソッド内で使用可能this.getSqlSession()
データの追加、削除、変更、確認を行います。spring
構成。<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) 用途 org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
中程度の構成mapper.xml
場合の位置mapper.xml
そしてmapper
インターフェイスは同じ名前を持ち、同じディレクトリにあるため、ここでの設定は必要ありません。mapper
インターフェース。<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
真ん中namespace
のためにmapper
インターフェースのアドレス。mapper
インターフェース内のメソッド名とmapper.xml
で定義されていますstatement
のid
一貫性を保つこと。Spring
で定義されています。<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) 用途 mapper
スキャナー。
mapper.xml
文書作成。mapper.xml
真ん中namespace
のためにmapper
インターフェースのアドレス。mapper
インターフェース内のメソッド名とmapper.xml
で定義されていますstatement
のid
一貫性があること。mapper.xml
そしてmapper
インターフェイスの名前が一貫している場合は、次のようにする必要はありません。sqlMapConfig.xml
で設定します。mapper
インターフェース。知らせmapper.xml
ファイル名とmapper
インターフェイス名は一貫しており、同じディレクトリに配置する必要があります。mapper
スキャナー。<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
コンテナから取得mapper
実装オブジェクト。インターフェースバインディングとは、MyBatis上で任意にインターフェースを定義し、そのインターフェース内のメソッドをSQLで結合することです。 声明バインディングでは、インターフェイスのメソッドを直接呼び出すことができるので、オリジナルと比較して SqlSession
提供されているメソッドにより、より柔軟な選択と設定が可能になります。
インターフェイス バインディングを実装するには 2 つの方法があります。
@Select
、@Update
バインドする SQL ステートメントを含むアノテーションを待ちます。xml
この場合、バインドするために内部に SQL を記述する必要があります。xml
マッピングファイル内でnamespace
インターフェイスの完全なパス名である必要があります。SQL ステートメントが比較的単純な場合は、アノテーション バインディングを使用します。 SQL ステートメントが比較的複雑な場合は、アノテーション バインディングを使用します。xml
バインディング、一般用途xml
さらに多くのバインディングがあります。mapper.xml
で定義された各 SQL のid
同じ。mapper.xml
で定義された各 SQL のparameterType
同じタイプの。mapper.xml
で定義された各 SQL のresultType
同じタイプの。Mapper.xml
ファイルの中にnamespace
それが Mapper インターフェースのクラスパスです。proxy
オブジェクト、プロキシ オブジェクトproxy
インターフェースメソッドはインターセプトされ、代わりに実行されますMappedStatement
SQLを表し、SQLの実行結果を返します。namespace
、それで id
設定されていない場合は繰り返すことができます。namespace
、それで id
結局のところ、繰り返すことはできません。namespace
必須ではありません。ベストプラクティスのみです。namespace + id
のようなものです マップ < 文字列、マップされたステートメント > マップ<String, MappedStatement>ま1つのp<聖rでグ,ま1つの1ページed聖1つのteメートルeんt> 使用するキー (存在しない場合)namespace
、残りのみ id
、それで、id
重複するとデータが互いに上書きされる可能性があります。わかったnamespace
、自然 id
繰り返してもいいのですが、namespace
違う、namespace + id
当然違います。MyBatis は、すべての XML 構成情報をオールインワンの重量オブジェクトにカプセル化します。 Configuration
内部。 XML マッピング ファイルでは、<parameterMap>
タグは次のように解析されます。ParameterMap
オブジェクトの場合、その子要素はそれぞれ次のように解析されます。ParameterMapping
物体。<resultMap>
タグは次のように解析されます。ResultMap
オブジェクトの場合、その子要素はそれぞれ次のように解析されます。ResultMapping
物体。毎<select>
、<insert>
、<update>
、<delete>
タグは次のように解析されますMappedStatement
オブジェクトの場合、タグ内の SQL は次のように解析されます。BoundSql
物体。
<resultMap>
タグは、列名とオブジェクト属性名のマッピング関係を 1 つずつ定義します。T_NAME AS NAME
、オブジェクトの属性名は通常、 name
、小文字ですが、列名は大文字と小文字を区別しません。MyBatis は列名の大文字と小文字を無視して、対応するオブジェクト属性名をインテリジェントに検索します。 T_NAME AS NaMe
, MyBatis は引き続き正常に動作します。MyBatis は、列名と属性名のマッピング関係を取得した後、リフレクションを使用してオブジェクトを作成し、マッピング関係が見つからないプロパティについては、リフレクションを使用してオブジェクトのプロパティに値を 1 つずつ割り当てて返します。 、割り当てを完了できません。
他にもたくさんのタグがありますが、 <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
、動的 SQL を加えたもの
9
9
9 タグ:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
待って。で<sql>
SQL フラグメント タグの場合は、次のように渡します。<include>
タグは SQL フラグメントを導入します。<selectKey>
自動インクリメントをサポートしない主キーのポリシー ラベルを生成します。
MyBatis は XML マッピング ファイルを順番に解析しますが、参照される B タグはどこにでも定義でき、MyBatis はそれを正しく識別できます。
原則として、MyBatis は A タグを解析し、A タグが B タグを参照していることを検出しますが、B タグは解析されておらず、まだ存在していません。この時点では、MyBatis は A タグを未解決としてマークし、続行します。 B タグを含む残りのタグを解析するため、すべてのタグが解析された後、MyBatis は、A タグを解析するときに、B タグがすでに存在しており、A タグを正常に解析できます。
できる、できるだけではない 1対多、1対1,まあ十分です 多対多、多対一 。これは次のようにして実現されます。
MyBatis は列挙型クラスをマップできるだけでなく、任意のオブジェクトをテーブルの列にマップできます。マッピング方法はカスタマイズされたものですTypeHandler
、成し遂げる TypeHandler
のsetParameter()
そしてgetResult()
インターフェースメソッド。
TypeHandler
これには 2 つの機能があります。1 つは、javaType
にjdbcType
変換、2回目が完了しましたjdbcType
にjavaType
変換は次のように反映されますsetParameter()
そしてgetResult()
2 つのメソッドは、それぞれ SQL 疑問符プレースホルダー パラメーターの設定と列クエリ結果の取得を表します。
MyBatis 動的 SQL を使用すると、Xml マッピング ファイル内のタグの形式で動的 SQL を記述し、MyBatis が提供する SQL の論理判断と動的スプライシングの機能を完了できます。
9
9
9 動的 SQL タグ:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
その実行原理は次のとおりです。 OGNL
SQL パラメータ オブジェクトから式の値を計算し、式の値に従って SQL を動的に結合して、動的 SQL の機能を完成します。
MyBatis が使用する RowBounds
オブジェクトはページ分割されています。ResultSet
結果セットによって実行されるメモリ ページングは物理ページングではありません。SQL で物理ページングを含むパラメーターを直接記述して物理ページング機能を完了することも、ページング プラグインを使用して物理ページングを完了することもできます。
ページング プラグインの基本原理は、MyBatis が提供するプラグイン インターフェイスを使用してカスタム プラグインを実装し、プラグインのインターセプト メソッドで実行される SQL をインターセプトし、それに応じて SQL を書き換えることです。に dialect
方言、対応する物理ページング ステートメントと物理ページング パラメーターを追加します。
例:
select * from student
SQL をインターセプトした後、次のように書き換えます。
select t.* from (select * from student) t limit 0, 10
MyBatis は以下に対してのみ書き込むことができます ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
これ
4
4
4 MyBatis はインターフェイス プラグインの一種で、これが実行されるたびに、JDK の動的プロキシを使用して、インターフェイス メソッドのインターセプト機能を実装するためにインターセプトする必要があるインターフェイスのプロキシ オブジェクトを生成します。
4
4
4 インターフェイス オブジェクトのメソッドを使用すると、インターセプト メソッドに入ります。具体的には、InvocationHandler
のinvoke()
もちろん、メソッドはインターセプトするように指定したメソッドのみをインターセプトします。
MyBatisの実装 Interceptor
インターフェースとオーバーライドintercept()
次に、プラグインのアノテーションを記述し、どのインターフェースのどのメソッドをインターセプトするかを指定します。構成ファイルに記述したプラグインを忘れずに構成してください。
PerpetualCache
HashMap ローカル キャッシュ、そのストレージ スコープはセッション、セッションの場合flush
またはclose
その後、セッション内のすべてのキャッシュがクリアされ、1 次キャッシュがデフォルトでオンになります。PerpetualCache
、HashMap ストレージの違いは、ストレージのスコープが Mapper
(Namespace
)、ストレージ ソースは次のようにカスタマイズできます。 Ehcache
。2 次キャッシュはデフォルトでは有効になっていません。2 次キャッシュを有効にするには、2 次キャッシュ属性クラスを実装する必要があります。Serializable
シリアル化インターフェイス (オブジェクトの状態を保存するために使用可能)、マッピング ファイルで構成可能<cache/>
。C
/ U
/ D
操作後、デフォルトではこのスコープ内のすべてのファイルがselect
キャッシュは次のようになりますclear
。