一緒にMyBatisの入門編を学びましょう

37724 ワード

概要
本文は1つの簡単な小さい例で、Javaプロジェクトの開発の中でMyBatisの基本的な使い方を簡単に述べて、入門級の文章に属して、ただ勉強して分かち合うために使用して、足りないところがあれば、また指摘してください.
MyBatisとは?
MyBatisは、SQLのカスタマイズ、ストレージ・プロシージャ、高度なマッピングをサポートする優れた永続層フレームワークです.MyBatisは、ほとんどのJDBCコードと手動でパラメータを設定し、結果セットを取得することを回避します.MyBatisは、単純なXMLまたは注釈を使用して、オリジナルタイプ、インタフェース、およびJavaのPOJO(Plain Old Java Objects、通常の古いJavaオブジェクト)をデータベース内のレコードとして構成およびマッピングできます.
MyBatis環境の構築
環境構築手順:
1.Javaプロジェクトを新規作成し、必要なJarパッケージを導入します.
MyBatisに必要なJarバッグは、次のように2つあります.
1 //MyBatis 
2 mybatis-3.5.3.jar
3 //MySql        
4 mysql-connector-java-5.1.6.jar

2.MyBatisプロファイルの追加
srcディレクトリの下に、MyBatisのプロファイル「mybatis-config.xml」を追加し、主にデータベース接続に関する環境情報とMapper情報を構成します.具体的な内容は以下の通りです.
  • environmentsノードはデータベース環境を構成し、複数の構成があり、defaultはデフォルトでどの環境に接続されているかを示します.
  • mappersは、導入されたマッピングファイルを構成し、相対パス方式を採用する.
  •  1 xml version="1.0" encoding="UTF-8" ?>
     2 DOCTYPE configuration
     3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     
     7     <properties resource="db.properties">properties>
     8     
     9     <environments default="development">
    10         <environment id="development">
    11             <transactionManager type="JDBC" />
    12             
    17             <dataSource type="POOLED">
    18                 <property name="driver" value="${jdbc.driver}" />
    19                 <property name="url" value="${jdbc.url}" />
    20                 <property name="username" value="${jdbc.username}" />
    21                 <property name="password" value="${jdbc.password}" />
    22             dataSource>
    23         environment>
    24     environments>
    25     <mappers>
    26         <mapper resource="com/hex/mybatis/ProductMapper.xml" />
    27     mappers>
    28 configuration>

    3.モデルクラスを追加
    この例では、次の3つのプロパティを含むProductクラスを追加します.
     1 package com.hex.mybatis;
     2 
     3 /**
     4  *      
     5  * @author Administrator
     6  *
     7  */
     8 public class Product {
     9     
    10     private String pid; //  ID
    11     private String pname; //  name
    12     private float price; //    
    13     
    14     public Product() {
    15         
    16     }
    17     
    18     public Product(String pid, String pname, float price) {
    19         this.pid = pid;
    20         this.pname = pname;
    21         this.price = price;
    22     }
    23     
    24     public String getPid() {
    25         return pid;
    26     }
    27     public void setPid(String pid) {
    28         this.pid = pid;
    29     }
    30     public String getPname() {
    31         return pname;
    32     }
    33     public void setPname(String pname) {
    34         this.pname = pname;
    35     }
    36     public float getPrice() {
    37         return price;
    38     }
    39     public void setPrice(float price) {
    40         this.price = price;
    41     }
    42     
    43     @Override
    44     public String toString() {
    45         // TODO Auto-generated method stub
    46         return "PID="+this.pid+",PNAME="+this.pname+",PRICE="+this.price;
    47     }
    48 }

    4.新たにマッパーファイルを追加
    データベースを操作するためのProductMapper.xmlファイルを追加し、データテーブルProductsのCRUD操作を含む.次のようになります.
  • mapperノードのnamespaceプロパティは、このマッピングファイルの一意のIDを表します.
  • ラベルのidプロパティは、ファイル内の一意の値を表し、対応する文を検索します.
  • parameterTypeはパラメータのデータ型を表す.
  • resultTypeは、返されるデータ型を表し、クラスオブジェクトの場合はフルネームである必要があります.
  • sql文のプレースホルダは、#{属性名}形式で、むやみに書いてはいけません.
  • 注意:namespace+idは、プロジェクト全体で一意でなければなりません.
  •  1 xml version="1.0" encoding="UTF-8" ?>
     2 DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 
     6 <mapper namespace="com.hex.mybatis.ProductMapper">
     7     
    12     <select id="queryProductById" resultType="com.hex.mybatis.Product"
    13         parameterType="String">
    14         select * from Products where pid = #{id}
    15     select>
    16     
    17     
    18     <select id="queryProductAll" resultType="com.hex.mybatis.Product">
    19         select * from Products where 1=1 
    20     select>
    21     
    22     
    25     <insert id="addProduct" parameterType="com.hex.mybatis.Product" >
    26         insert into Products(pid,pname,price)values(#{pid},#{pname},#{price})
    27     insert>
    28     
    29     
    30     <update id="updateProductById"  parameterType="com.hex.mybatis.Product">
    31         update products set pname=#{pname},price=#{price} where pid=#{pid} 
    32     update>
    33     
    34     
    35     <delete id="deleteProductById" parameterType="String">
    36         delete from products where pid=#{pid}
    37     delete>
    38 mapper>

    4.使用方法
    具体的なコードは次のとおりです.
  • は、まず入力ストリームとしてプロファイルをロードする.
  • データストリームからSqlSessionFactoryオブジェクトを作成する
  • SqlSession
  • を開く
  • 関連動作
  • を実行する.
  • セッションオブジェクト
  • を閉じる
     1     //             
     2     String resource = "mybatis-config.xml";
     3     InputStream inputStream = Resources.getResourceAsStream(resource);
     4     //  SqlSessionFactory  ,build       environment id,,    ,    default.
     5     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
     6     //      
     7     SqlSession session = sqlSessionFactory.openSession();
     8     //-------------------      ---------------------
     9     //    ,  queryProductById      ,          , :namespace+id
    10     Product product = session.selectOne("queryProductById", "A-002");
    11     System.out.println(product.toString());
    12     //---------------------End-------------------------
    13     //      
    14     session.close();

    CRUD操作対象
    データテーブルの添削については、以下のようにします.
     1     //-------------------      ---------------------
     2     Product product =new Product("A-006","     ",3.5f);
     3     int count = session.insert("addProduct",product);
     4     session.commit();
     5     System.out.println("     "+count+"    !!!");
     6     //---------------------End-------------------------
     7     //-------------------      ---------------------
     8     Product product =new Product("A-004","    ",3.2f);
     9     int count = session.update("updateProductById", product);
    10     session.commit();
    11     System.out.println("    "+count+"    !!!");
    12     //---------------------End-------------------------
    13     //-------------------      ---------------------
    14     int count = session.delete("deleteProductById", "A-002");
    15     session.commit();
    16     System.out.println("    "+count+"    !!!");
    17     //---------------------End-------------------------
    18     //-------------------     ---------------------
    19     List lstProduct =  session.selectList("queryProductAll");
    20     for(Product p : lstProduct){
    21         System.out.println(p);
    22     }
    23     //---------------------End-------------------------    

    ダイナミックエージェント
    以上の基本的な書き方に加えて、MyBatisはダイナミックエージェントのモードを提供し、具体的な手順は以下の通りです.
    1.インタフェースProductMapperを追加
    インタフェースの約束は次のとおりです.
  • パッケージ名+インタフェース名は、ProudctMapper.xmlのnamespaceと一致しています.
  • 関数名は、Mapperファイル内のラベルのIDと一致します.
  • 関数パラメータタイプは、Mapperファイルで構成されているparameterTypeと一致します.
  • 関数の戻りタイプは、Mapperファイルで構成されているresultTypeと一致し、resultTypeがない場合はvoidを返します.
  •  1 package com.hex.mybatis;
     2 
     3 import java.util.List;
     4 
     5 /**
     6  *      ProductMapper.xml namespace  
     7  * 
     8  * @author Administrator
     9  *
    10  */
    11 public interface ProductMapper {
    12     /**
    13      *   ID  :     1.      Mapper  ID   2.      parameterType      3.
    14      *     resultType  
    15      * 
    16      * @param pid
    17      * @return
    18      */
    19     Product queryProductById(String pid);
    20 
    21     /**
    22      *     
    23      * 
    24      * @return
    25      */
    26     List queryProductAll();
    27 
    28     /**
    29      *   
    30      * 
    31      * @param product
    32      */
    33     void addProduct(Product product);
    34 
    35     /**
    36      *   
    37      * 
    38      * @param product
    39      */
    40     void updateProductById(Product product);
    41 
    42     /**
    43      *   
    44      * 
    45      * @param pid
    46      */
    47     void deleteProductById(String pid);
    48 
    49 }

    2.動的エージェント呼び出し方式
    次のようになります.
  • は、まず入力ストリームとしてプロファイルをロードする.
  • データストリームからSqlSessionFactoryオブジェクトを作成する
  • SqlSession
  • を開く
  • ProudctMapperインタフェースオブジェクトを取得します.
  • は、インタフェースメソッドを呼び出して動作を実行する.
  • セッションオブジェクト
  • を閉じる
     1     //             
     2     String resource = "mybatis-config.xml";
     3     InputStream inputStream = Resources.getResourceAsStream(resource);
     4     //  SqlSessionFactory  ,build       environment id,,    ,    default.
     5     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
     6     //      
     7     SqlSession session = sqlSessionFactory.openSession();
     8     //-------------------    ---------------------
     9     ProductMapper productMapper = session.getMapper(ProductMapper.class);
    10     //    
    11     Product product=productMapper.queryProductById("A-001");
    12     System.out.println(product);
    13     //      
    14     session.close();

    3.その他のCRUD操作
    動的エージェントの添削により、以下のように変更されます.
     1     //    
     2     List lstProduct= productMapper.queryProductAll();
     3     for(Product p : lstProduct){
     4         System.out.println(p);
     5     }
     6     //  
     7     Product product =new Product("A-007","    ",3.2f);
     8     productMapper.addProduct(product);
     9     session.commit();
    10     System.out.println("    !!!");
    11     //  
    12     Product product =new Product("A-004","   ",3.5f);
    13     productMapper.updateProductById(product);
    14     session.commit();
    15     System.out.println("    !!!");
    16     //  
    17     productMapper.deleteProductById("A-005");
    18     session.commit();
    19     System.out.println("    ");
    20     //---------------------End-------------------------

    MyBatisマニュアルについて ,毎日一歩勉強して、大きな一歩を越えることを堅持します.
    コメント
    定波紋・3月7日  
    作者:蘇軾(宋)
    3月7日,砂湖道で雨に遭った.雨具が先に行って、同行者はみな狼狽して、余独は気づかない.すでに晴れたので,これを作った.
    林を通り抜けて葉を打つ音を聞いてはいけない.竹杖の芒靴は馬に軽く勝って、誰が恐れますか?一蓑の煙雨は平生に任せる.
    切り立った春風が酒を吹いて目が覚め、少し寒くて、山の斜面が照らし合っている.振り返ってみると、昔はスマートで、帰っても、風雨も晴れもしなかった.