設定ファイルを書いて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 実装

推薦する

Vue スキャフォールディング プロジェクトを作成するための詳細な手順

vue スキャフォールディング -> vue.cli大規模で完全に機能する Vue プロジェク...

MySQL の JSON 挿入の問題

MySQL 5.7.8 以降では、JSON テキストでデータを効率的に取得できるネイティブ JSON...

Mysqlアカウント管理の原理と実装方法の詳細な説明

この記事では、例を使用して、MySQL アカウント管理の原則と実装方法を説明します。ご参考までに、詳...

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...

LinuxにNginxをインストールする正しい手順

序文私のように、Java バックエンドに勤勉な人であれば、多数のプロジェクト機能を実装することに加え...

MySQLワームレプリケーションの基本知識

ワームは、その名前が示すように、自ら複製し、その数は倍増、つまり指数関数的に増加します。 MySQL...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの概念、原則、および一般的な使用法につ...

Excel ファイルを MySQL データベースにインポートする方法

この記事では、ExcelファイルをMySQLデータベースにインポートする方法を参考までに紹介します。...

MySQL インデックス失敗の原理

目次1. インデックス失敗の理由2. インデックスの秩序が崩れる状況を見てみましょう。 - インデッ...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

node.js で EventEmitter をカスタマイズする方法

目次序文1. 何ですか2. Node.jsでEventEmitterを使用する方法3. 実施プロセス...

CentOS 6.5 に MySQL 5.6 をインストールするチュートリアル

1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...