JAVA MyBatisのフレームワーク(1)の深い理解

この記事は、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篇博客
公開された37元の記事 ウォンの賞賛145 ・は 30000 +を見て

おすすめ

転載: blog.csdn.net/weixin_45393094/article/details/105009080