設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法

マイバティス3.x

ここでは MyBatis について簡単に紹介し、具体的な使用方法はコード内に掲載します。

MyBatisの過去と現在

MyBatis の前身は iBatis です。iBatis はもともと Clinton Begin によって開発され、後に Apache Foundation に寄贈されて iBatis オープン ソース プロジェクトが設立されました。 2010 年 5 月に、プロジェクトは Apache Foundation から Google Code に移行され、MyBatis に名前が変更されました。

しかし、そのパッケージ構造は依然としてイバティスです。

マイバティス

出典: mybatis

MyBatis の紹介

MyBatis はデータ永続層 (ORM) フレームワークです。エンティティ クラスと SQL ステートメントの間にマッピング関係が確立されます。これは半自動 ORM 実装です。

MyBatis の利点:
1. SQL 構文に基づいており、シンプルで習得しやすい。
2. 基礎となる組み立てプロセスを理解できる。
3. SQL ステートメントは構成ファイルにカプセル化されるため、統一された管理と保守が容易になり、プログラムの結合度が低下します。
4. プログラムのデバッグが簡単。

すべての SQL ステートメントは XML で定義されます (推奨)。アノテーションを通じてインターフェースに実装することもできます。これらのマッピング ファイルはマッパーと呼ばれます。

従来のJDBCとの比較

コード量を61%削減

最もシンプルな永続化フレームワーク

アーキテクチャレベルのパフォーマンス強化

SQLコードはプログラムコードから完全に分離されており、再利用できる

プロジェクトにおける分業の強化

携帯性の向上

canMyBatisデモ

パッケージとクラスの配布図:


Mybatis にはパッケージが 1 つとデータベース サポート パッケージが 1 つだけあります。

mybatis-config.xml設定ファイル (もちろん、ファイル名は任意にできますが、仕様に準拠するようにしてください。設定ファイルはマニュアルに記載されています)

<?xml バージョン="1.0" エンコーディング="UTF-8" ?> 
<!DOCTYPE 設定 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
「http://mybatis.org/dtd/mybatis-3-config.dtd」を参照してください。 
<構成> 
  <タイプエイリアス> 
    <!-- 設定タイプのエイリアス --> 
    <typeAlias ​​alias="ユーザー" type="cn.hncu.domain.User" /> 
  </typeAliases> 
  <環境デフォルト="開発"> 
    <環境 id="開発"> 
      <トランザクションマネージャタイプ="JDBC" /> 
      <データソースタイプ="プール済み"> 
        <プロパティ名="driver" 値="com.mysql.jdbc.Driver" /> 
        <プロパティ名="url" 値="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8" /> 
        <プロパティ名="ユーザー名" 値="hncu" /> 
        <プロパティ名="パスワード" 値="1234" /> 
        <プロパティ名="poolMaximumActiveConnections" 値="5"/> 
      </データソース> 
    </環境> 
  </環境> 
  <マッパー> 
    <マッパーリソース="cn/hncu/domain/User.xml"></マッパー> 
    <マッパーリソース="cn/hncu/domain/User2.xml"></マッパー> 
  </マッパー> 
</構成>

SqlSessionUtils.java

パッケージ cn.hncu.utils; 
 
java.io.IOException をインポートします。 
java.io.InputStream をインポートします。 
java.sql.Connection をインポートします。 
 
org.apache.ibatis.io.Resources をインポートします。 
org.apache.ibatis.session.SqlSession をインポートします。 
org.apache.ibatis.session.SqlSessionFactory をインポートします。 
org.apache.ibatis.session.SqlSessionFactoryBuilder をインポートします。 
 
com.mysql.jdbc.interceptors.SessionAssociationInterceptor をインポートします。 
 
 
パブリッククラスSqlSessionUtils { 
  プライベート静的 SqlSessionFactory sessionFactory=null;//DataSource--pool 
  静的{ 
    試す { 
      InputStream in=Resources.getResourceAsStream("mybatis-config.xml");//構成ファイルを読み込みます sessionFactory=new SqlSessionFactoryBuilder().build(in); 
      /* 
       * ここでは、ファイルをロードするために Resources クラスを使用する必要がない方法を示します (ClassLoader を使用して最下位レベルの構成ファイルをロードします) 
        セッションファクトリー = 新しい SqlSessionFactoryBuilder().build(SqlSessionUtils.class.getClassLoader().getResourceAsStream("mybatis-config.xml")); 
       */ 
    } キャッチ (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   
  パブリック静的SqlSessionFactory getSessionFactory(){ 
    sessionFactory を返します。 
  } 
  パブリック静的SqlSession getSqlSession(){ 
    sessionFactory.openSession() を返します。 
  } 
  パブリック静的voidメイン(String[] args) { 
    //Mybatisはプール内の接続数を制御します for(int i=0;i<10;i++){ 
      SqlSession s = getSqlSession(); 
      System.out.println(s); 
      接続 con=s.getConnection(); 
      System.out.println("con: "+con); 
    } 
  } 
}

ユーザー.java

パッケージ cn.hncu.domain; 
 
パブリッククラスUser{ 
  プライベート文字列ID; 
  プライベート文字列名; 
  プライベート文字列 pwd; 
  パブリック文字列 getId() { 
    ID を返します。 
  } 
  パブリック void setId(文字列 id) { 
    id は、 
  } 
  パブリック文字列getName() { 
    名前を返します。 
  } 
  パブリック void setName(文字列名) { 
    this.name = 名前; 
  } 
  パブリック文字列 getPwd() { 
    パスワードを返します。 
  } 
  パブリック void setPwd(文字列 pwd) { 
    パスワードを忘れた場合 
  } 
  @オーバーライド 
  パブリック文字列toString() { 
    "ユーザー[id=" + id + "、name=" + name + "、pwd=" + pwd + "]"を返します。 
  } 
   
}

ユーザー マッピング ファイル User.xml (最も単純な構成ファイル)

パッケージ cn.hncu.domain; 
 
java.util.List をインポートします。 
 
パブリックインターフェースUserMapper{ 
  パブリックリスト<User> all(); 
  パブリック リスト<User> user2(String string); 
  パブリック リスト<User> user3(User user); 
}

UserMapper.java (インターフェース、公式の推奨ではインターフェース方式を使用することをお勧めします----より安全です)

パッケージ cn.hncu.domain; 
 
java.util.List をインポートします。 
 
パブリックインターフェースUserMapper{ 
  パブリックリスト<User> all(); 
  パブリック リスト<User> user2(String string); 
  パブリック リスト<User> user3(User user); 
}


デモ1.java

パッケージ cn.hncu.demo; 
 
java.util.HashMap をインポートします。 
java.util.List をインポートします。 
java.util.Map をインポートします。 
 
org.apache.ibatis.session.SqlSession をインポートします。 
org.junit.Test をインポートします。 
 
cn.hncu.domain.User をインポートします。 
cn.hncu.domain.UserMapper をインポートします。 
cn.hncu.utils.SqlSessionUtils をインポートします。 
 
パブリッククラスDemo1 { 
  @テスト 
  パブリックボイドtest1(){ 
    //まずSqlSessionを取得する 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
    List<User> list=s.selectList("users.all");//返された結果はリストにカプセル化され、パラメータは id を使用して、マッピング ファイル内のどのセクションを使用するか、<select> または <insert> およびその他の SQL 操作を指定します// List<User> list=s.selectList("all");//名前空間を省略します----名前 (id) が競合する場合は、識別のために名前空間を使用する必要があります//System.out.println(list); 
    for(ユーザー u:list){ 
      System.out.println(u); 
    } 
  } 
  <span style="color:#ff0000;">//インターフェース方式を使用してデータベースを操作します(この方法は推奨されており、より安全です) 
  /*手順* 1. インターフェース UserMapper を記述します。インターフェース内の抽象メソッド名は、<select> の属性 id 値と同じである必要があります。つまり、抽象メソッドは操作を表します。* 2. User2.xml 内の名前空間をインターフェースの完全なクラス名に変更します。* 3. テスト コード (dao レイヤーの java) で、"s.getMapper()" を使用してプロキシ クラス オブジェクトを取得し、そのオブジェクトを使用してメソッドを呼び出します。つまり、特定の操作を実行します。*/</span> 
   
  @Test//インターフェース指向のアプローチでは、次の呼び出しは次のようになります: User2.xml 
  パブリックボイドtest2(){ 
    //まずSqlSessionを取得する 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
    UserMapper m=s.getMapper(UserMapper.class);//プロキシオブジェクトを取得します。List<User>list=m.all(); 
    System.out.println(リスト); 
  } 
  ///////////////test3() は、条件クエリ内の単一条件クエリを示し、User2.xml を呼び出します/////////////////// 
   
  @Test//従来のメソッド public void test3_1(){ 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
// リスト<User> users=s.selectList("cn.hncu.domain.UserMapper.all"); 
    List<User> users=s.selectList("user2","2"); //返された結果はListにカプセル化され、内部要素のファイルタイプはマッピングファイルによって構成されます。System.out.println(users); 
  } 
  @Test//インターフェース指向のアプローチ public void test3_2(){ 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
    UserMapper u=s.getMapper(UserMapper.class); 
    リスト<ユーザー> users=u.user2("3"); 
    System.out.println(ユーザー); 
  } 
   
  ///////////////////複数条件クエリ(条件クエリにはオブジェクトカプセル化条件を使用するのが最適です)/////////////// 
  @テスト 
  パブリックボイドテスト4(){ 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
     
    UserMapper u=s.getMapper(UserMapper.class); 
    ユーザー user=新しいユーザー(); 
    ユーザーIDを4に設定します。 
    user.setName("エルダン"); 
    リスト<ユーザー> users=u.user3(user); 
    System.out.println(ユーザー); 
  } 
  @テスト 
  public void test5(){//マップを使用して結果を返す 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
    System.out.println(s); 
    リスト<Map<文字列、オブジェクト>> users=s.selectList("user4"); 
    for(Map<String,Object> ユーザー:users){ 
      System.out.println(ユーザー); 
    } 
  } 
  @Test//入力パラメータをマップに設定する 
  パブリックボイドテスト6(){ 
    SqlSession s = SqlSessionUtils.getSqlSession(); 
    Map<String, Object> map = new HashMap<String,Object>(); 
    map.put("id", "5"); 
    map.put("name", "シャオチー"); 
    リスト<Map<文字列、オブジェクト>> users=s.selectList("user5",map); 
    for(Map<String,Object> ユーザー:users){ 
      System.out.println(ユーザー); 
    } 
  } 
}

ユーザー2.xml

<?xml バージョン="1.0" エンコーディング="UTF-8" ?> 
<!DOCTYPE マッパー PUBLIC "-//mybatis.org//DTD マッパー 3.0//EN" 
「http://mybatis.org/dtd/mybatis-3-mapper.dtd」 を参照してください。 
<!-- 現在の設定ファイルは、インターフェース指向の動作モードを表示するために使用されています--> 
<!--  
<マッパー名前空間="cn.hncu.domain.UserMapper"> 
  <select id="all" resultType="cn.hncu.domain.User"> 
    ユーザーから*を選択 
  </選択> 
</マッパー> 
--> 
<マッパー名前空間="cn.hncu.domain.UserMapper"> 
<!-- 使用される型エイリアス --> 
  <select id="all" resultType="ユーザー"> 
    ユーザーから*を選択 
  </選択> 
   
  <!-- 条件クエリの単一条件クエリ。次の SQL ステートメントのパラメータは任意に記述できます --> 
  <select id="user2" resultType="ユーザー" パラメータタイプ="文字列"> 
    ID=#{xx} のユーザーから * を選択します 
  </選択> 
  <!-- 複数の条件付きクエリ 条件付きクエリの場合、次の SQL ステートメントのパラメータは、値オブジェクトの属性名と一致している必要があります (パラメータが空かどうかを判断するには、if 条件ステートメントを使用します) --> 
  <select id="user3" resultType="ユーザー" パラメータタイプ="文字列"> 
    id=#{id} のユーザーから * を選択します 
    <if テスト="name!=null"> 
      そして名前=#{名前} 
    </if> 
  </選択> 
  <!-- クエリ結果を List<Map<>> にカプセル化します --> 
  <select id="user4" resultType="map"> 
    ユーザーから*を選択 
  </選択> 
  <!-- 入力パラメータをマップ型にカプセル化します --> 
  <select id="user5" resultType="ハッシュマップ" パラメータタイプ="ハッシュマップ"> 
    id=#{id} のユーザーから * を選択します 
    <if テスト="name!=null"> 
      そして名前=#{名前} 
    </if> 
  </選択> 
</マッパー>

今回初めて mybatis を見ました。使い方は簡単にわかりました。次回は具体的な複雑な使い方 (データベースの CRUD と使用中の詳細) を投稿します。

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以下もご興味があるかもしれません:
  • Spring+SpringMVC+MyBatis徹底研究と構築(その3)MyBatisグローバル設定ファイルの分析
  • MyBatisバッチ挿入データMapper設定ファイルの書き方の詳細説明
  • mybatis プロジェクト設定ファイルの例の詳細な説明
  • MyBatis 設定ファイルの書き方と使い方
  • XSD を使用して Mybatis SqlMapper 構成ファイルを検証する方法 (2)
  • XSD を使用して Mybatis SqlMapper 構成ファイルを検証する方法 (1)
  • Mybatis ジェネレーターに最適な設定ファイルの詳細な説明 (フルバージョン)
  • mybatis 設定ファイルの紹介_Powernode Java Academy

<<:  Linux でプロセスを効果的に管理するための 8 つのコマンド

>>:  虫眼鏡コンポーネントのネイティブ js 実装

推薦する

Linuxの運用・保守の基礎知識から上級者向け知識までをまとめました

運用保守エンジニアは、初期段階では非常に大変な仕事です。この期間中、コンピューターの修理、ネットワー...

MySQLの文字セット設定を5分で理解しましょう

目次1. コンテンツの概要2. 文字セットと文字順序の概念と関係3. MySQL でサポートされてい...

Better-scrollはメニューとコンテンツをリンクする効果を実現します

1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...

Linux で PHP curl 拡張機能をインストールする方法の詳細な説明

この記事では、Linux で PHP curl 拡張機能をインストールする方法について説明します。ご...

Windows 上の Docker にさまざまなソフトウェアをインストールする詳細なプロセス

1. MySQLをインストールする # docker で mysql をダウンロード docker ...

Vue はアップロードされた画像に透かしを追加する機能を実装します

この記事では、Vueでアップロードされた画像に透かしを追加する具体的な実装コードを参考までに共有しま...

CSS で水平方向と垂直方向に中央揃えする 10 の方法を教えます (要約)

面接には必需品、仕事でも必ず使います。うーん、誰でも分かるでしょう。これ以上何も言わずに、要約とレン...

ネイティブJSで様々なモーションの複合モーションを実現

この記事では、ネイティブ JS で実装された複合モーションを紹介します。複合モーションとは、異なる属...

Vue はモバイル端末にマルチグリッド入力ボックスを実装

最近、同社は、下図に示すように、h5 ページ操作を完了するという要件を提示しました。 ネットで入手で...

Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

MySQLの空の値とnull値の違いを知っていますか?

序文最近、友人がSQLを書くときにnull値を判定する方法が間違っていて、プログラム内のデータにエラ...

動的および静的分離を実現する nginx のサンプルコード

1. nginxの動的と静的の分離の簡単な設定web1は静的サーバー、web2は動的サーバー、nod...