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

推薦する

最初のReactページを作成する方法

目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...

MySQLデータベース監視binlogを有効にする手順

序文多くの場合、ユーザーが自分のデータに対して実行する操作に基づいて何かを行う必要があります。たとえ...

Linux でスワップ領域を確認する 5 つのコマンドの概要

序文Linux では、スワップ パーティションとスワップ ファイルの 2 種類のスワップ領域を作成で...

CocosCreator最適化DrawCallの詳細な説明

目次序文ドローコールとはDrawCall はパフォーマンスにどのような影響を与えますか?ドローコール...

MySQL マスタースレーブレプリケーション構成プロセス

メインライブラリの構成1. MySQLを設定する vim /etc/my.cn # ファイルに次の内...

antd pro に基づく SMS 認証コード ログイン機能 (プロセス分析)

目次まとめ全体的なプロセスフロントエンドページコード検証コードとログイン サービスをリクエストする ...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...

CSS3 を使用して 3D テキスト ホバー効果を実装するサンプル コード

この記事では、3D テキストのホバー変更効果を実現するための CSS3 のサンプル コードを紹介しま...

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...

Windows Server 2019 のインストール (グラフィカル チュートリアル)

Windows Server 2019 は、Microsoft が公式にリリースした最新のサーバー...

CSS 円形ホローイングの実装(クーポン背景画像)

この記事では主に、クーポンの背景画像などでよく使われる CSS 円形ホローイングについて紹介し、皆さ...

Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図

いろいろ苦労しましたが、やっと yum インストールの手順がわかりました。以前、バイナリ パッケージ...

HTML pre タグ内の自動改行

このとき、overflow:auto;(コードがコンテナの境界を超えたときにスクロールボックスを表示...

W3C チュートリアル (10): W3C XQuery アクティビティ

XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...

Linux で MySQL のルート パスワードを変更する方法

序文このサービスは数か月前からMySQLに導入されています。私の仕事は基本的にターミナルで行われるた...