この記事は、MyBatisの説明に基づいており、学び、一緒に進行へようこそ。
記事のディレクトリ
.MyBatisについて
MyBatisのは、このコードをGoogleにApacheのソフトウェア基盤によってオープンソースプロジェクトiBatisの、2010インディアン移行プロジェクトであるApacheのは、とMyBatisのに社名を変更しました。GitHubのに2013年11月で移行。
iBATISは、それがJavaベースの永続化フレームワークである、単語「インターネット」と「逆茂木」の組み合わせから来ています。iBATISの永続化フレームワークは、SQLマップとデータアクセスオブジェクト(SDAO)を含み
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatisのは、ほぼすべてのJDBCコードとマニュアル設定パラメータを回避し、結果セットを取得します。MyBatisのは、データベースレコードに(プレーン古いJavaは普通のJavaオブジェクト、オブジェクト)を設定するには、単純なXMLまたはアノテーションを使用し、ネイティブの情報、インタフェースとJavaのPOJOをマッピングすることができます。
II。フレームワークが特徴
- ①習得が容易:自体は小さくてシンプルです。長い2つのJARファイル+のconfigureいくつかのSQLマッピングファイルをインストールするのが最も簡単には習得が容易であるようとして、使いやすい、ドキュメントやソースコードを、あなたは完全にその設計と実装を把握比較することができ、第三者に依存しないでください。
- ②フレキシブル:MyBatisのは、既存のアプリケーションまたはデータベースの設計に影響を与えません。SQL一元管理と最適化を促進するために、XMLで記述されました。SQLは基本的に、我々はより多くの、おそらく、すべての機能によって達成することができるデータアクセスフレームワークを使用していない実現することができます。
- ③SQLプログラムコードを連結解放:データアクセスロジックとビジネスロジックによってDALを提供容易、簡単ユニットテストを維持するために、より明確にシステム設計から分離します。SQLと保守性を向上させ、コード、。
- ④マッピングラベル提供、フィールドサポートORMのオブジェクトリレーショナルマッピングデータベースを
- ⑤ラベルは、オブジェクト・リレーショナル・マッピングを提供し、オブジェクト・リレーショナル形式のメンテナンスのためのサポートを
- ⑥XMLタグを提供し、動的SQLの開発をサポート
III。全体的なプロセス
- ①
加载配置并初始化
- トリガ条件:ロード・コンフィギュレーション・ファイル
- プロセス:SQL構成情報がメモリに記憶されている(着信パラメータマッピング構成を含む、SQL文を実行し、マッピング構成の結果)を一度MappedStatementオブジェクトにロードされます。
- ②
接收调用请求
- トリガ条件:MyBatisのは、提供されるAPIを呼び出します
- 受信パラメータ:SQL IDと入ってくるパラメータオブジェクト
- 処理:処理要求の下位層に処理要求を送信します。
- ③
处理操作请求
- トリガ条件:APIリクエストは、界面層を介して送信されます
- 受信パラメータ:SQL IDと入ってくるパラメータオブジェクト
- プロセス:
- (A)に対応する目標MappedStatement SQLのIDを検索してください。
- 最終パスを取得し、実行するSQLを実行するMappedStatementオブジェクトパラメータを解析渡されたパラメータオブジェクトから(B)。
- ©データベース接続、SQL文の最終実行にと応じて実行し、結果を得るために、データベースに渡されたパラメータを取得します。
- (D)変換処理で得られたマッピング構成MappedStatementオブジェクトの実行結果の結果に基づいて、最終的な処理結果を与えます。
- 接続リソースを解放する(E)。
- ④
返回处理结果将最终的处理结果返回
IV。機能アーキテクチャ
- MyBatisの機能アーキテクチャは3層に分かれています。
- APIインタフェース層:APIは、これらのローカルデータベースAPIを操作する開発者が、外用へのインターフェースを提供します。それらのデータの処理を達成するために、データ処理層を呼び出す呼要求を受信するインターフェース層。
- データ処理層:特定のSQL検索、SQLの構文解析、SQLの実行およびマッピングプロセスなどの結果の実装を担当。その主な目的は、データベースの呼び出しの要求に応じて操作を完了することです。
- ベース支持層:接続管理、トランザクション管理、負荷とのconfigureキャッシングなど、支援の最も基本的な機能に関与し、これらは最も基本的な構成要素として、それらを引き出すだろう一般的なものです。上位層データ処理のための最も基本的なサポート。
V.アーキテクチャ
- MyBatisのプロファイル、グローバル・プロファイル、およびMyBatisのMyBatisのマッピングファイルを含む、前記データソースのグローバルプロファイルの設定情報、及び他のトランザクション、SQLの実行に関連するマッピングファイル構成情報。
- ①mybatisは、プロファイル情報(グローバルコンフィギュレーション・ファイルとマップファイル)を読み出すことにより、SqlSessionFactoryは、すなわち、セッションファクトリを構築しました。
- ②SqlSessionFactoryによって、あなたはそのセッションSQLSESSIONを作成することができます。MyBatisのデータベースはSQLSESSIONによって運営されています。
- ③SqlSession自体が直接データベース、アクチュエータキュータ下地インターフェースによって操作されているデータベースを操作することができません。アクチュエータは、バッファ(デフォルト)であり、2つのキュータインタフェースの実装クラスは、それが共通のアクチュエータです。
- SQLキュータ④Executor情報はMappedStatement基礎となるオブジェクトにカプセル化されて処理されます。オブジェクトを含む:情報をマッピングするSQL文は、入力パラメータ、および結果セットのマッピング情報を出力します。前記Java型のマッピングの入力パラメータと出力結果が単純型、HashMapのコレクションオブジェクト、POJOオブジェクト・タイプを含みます。
六.MyBatisデータとインタラクティブな方法
- MyBatisのとデータベースの相互作用は、主に2つの方法があります。
- ①従来のMyBatisのは、提供されるAPIを使用して、
- 達成するためにSQLSESSIONオブジェクトのメソッドでMyBatisのを呼び出して、データベースと対話ところで、操作のいくつかの類似したDBUtilsがあります!
上述使用MyBatis的方法,是创建一个和数据库打交道的SqlSession对象,然后根据Statement Id和参数来操作数据库
これは確かに非常にシンプルで実用的な方法ですが、它不符合面向对象语言的概念和面向接口编程的编程习惯。
インターフェイス指向プログラミングオブジェクト指向のトレンドので、MyBatisの順序はこの傾向に、使用MyBatisのサポートインタフェース(インタフェース)における第二の増加が呼ばれる適応します。
- ②マッパーインタフェースを使用。
- 更新| | |削除、挿入、すなわち<選択ノード項目を対応するマッパーインタフェースの抽象コア構成ファイル内の各ノードをMyBatisの、この方法は、インターフェースおよびノード<挿入|更新| |削除選択>で宣言しました>マッパーノードIDは、インターフェースメソッドの名前であり、パラメータ値のParameterTypeマッパー対応する方法の種類を示し、マッパーこのresultMap戻り型に対応する値または結果セットの要素を返すインターフェイスタイプによって表されます。
- 概要:MyBatisのは、この方法を呼び出すために、単にインターフェイス指向プログラミングのニーズを満たすためにマッパーインターフェイスを参照します。(実際には、インターフェイス指向プログラミングは、ユーザーが構成したSQL文へのインタフェース上での注意事項を使用することができた理由は、そう、そこにあるあなたが出てXML設定ファイルのことができ、その「0構成」)
七.MyBatisプロフィール
- 1.コアプロファイル
- クラスパスには、コア・コンフィギュレーション・ファイルであるSqlMapConfig.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子标签的内容,后加载properties文件
如果名称相同,后边覆盖前边内容
-->
<properties resource="jdbc.properties">
<property name="jdbc.password" value="12345"/>
</properties>
<!-- 全局参数配置:二级缓存,延迟加载
<settings></settings>
-->
<!-- 定义别名 -->
<typeAliases>
<!-- 给单个的类起别名
<typeAlias type="com.qf.domain.User" alias="user"/>
-->
<!-- 给指定包下的类起别名
别名的定义规则:类名首字母小写
-->
<package name="com.qf.domain"/>
</typeAliases>
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 使用资源的路径 -->
<mapper resource="User.xml"/>
<!-- <mapper resource="com/qf/mapper/UserMapper.xml"/> -->
<!-- 使用资源的绝对路径<mapper url=""/> -->
<!--
Mapper接口的全类名
要求:Mapper接口的名称与映射文件名称一致
1.8.2 映射文件
在指定的目录下创建映射文件,配置要执行的statement,即增删改查等语句。
必须在同一个目录下
<mapper class="com.qf.mapper.UserMapper"/>
-->
<!-- 加载某个包下的映射文件 (推荐)
要求:Mapper接口的名称与映射文件名称一致
必须在同一个目录下
-->
<package name="com.qf.mapper"/>
</mappers>
</configuration>
- 2.マッピングファイル
- 指定されたディレクトリ・マップ・ファイルで作成し、設定文は、CRUDおよびその他のステートメントであること、実行します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:配置名称空间,对配置的statement进行分类管理
此时名称可以任意
当使用Mapper代理时,namespace具有特殊的含义与功能
-->
<mapper namespace="test">
<!--
根据id查询用户,User findById(int id)
select:配置查询语句
id:可以通过id找到执行的statement,statement唯一标识
parameterType:输入参数类型
resultType:输出结果类型
#{}:相当于占位符
#{id}:其中的id可以表示输入参数的名称,如果是简单类型名称可以任意
-->
<select id="findById" parameterType="int" resultType="com.qf.domain.User" >
select * from user where id=#{id}
</select>
<!--
根据用户名称来模糊查询用户信息列表;
${}:表示拼接sql语句
${value}:表示输入参数的名称,如果参数是简单类型,参数名称必须是value
-->
<select id="findByUsername" parameterType="java.lang.String"
resultType="com.qf.domain.User">
select * from user where username like '%${value}%'
</select>
<!-- 添加用户
#{username}:名称与类中的属性名一致
-->
<insert id="addUser" parameterType="com.qf.domain.User">
<!--
selectKey:查询主键
keyProperty:主键对应的属性名称
resultType:结果类型,主键的类型
order:在插入记录的之前或之后查询主键的值
select last_insert_id()
mysql提供 的函数,与insert语句搭配使用,查询主键
-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
select last_insert_id()
</selectKey>
insert into user(username,sex,birthday,address)
values(#{username},#{sex},#{birthday},#{address})
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.qf.domain.User">
update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#
{address}
where id= #{id}
</update>
</mapper>
The best investment is in yourself.
2020.03.21 记录辰兮的第34篇博客