iBatis簡単紹介
23460 ワード
1. Ibatisはオープンソースのソフトウェア組織Apacheが打ち出した軽量級のオブジェクト関係マップ(ORM)フレームワークであり、HbernateやToplinkなどjavaプログラミングのオブジェクトの耐久化において、開発者に人気があります。
オブジェクト関係マップ(ORM):単純原理はオブジェクト指向で関係型データベースを操作することで、現在最もよく使われているデータを格納するツールは関係型データベースであり、その操作方式はSQL文でデータベースを操作するテーブルであるが、Javaオブジェクト向けのプログラミング言語では、すべての操作対象は対象である。したがって、オブジェクト関係マップとは、データベーステーブルとjavaプログラミング言語のオブジェクトを対応させ、テーブルの列をjavaオブジェクトのフィールドに対応させることであり、プログラマはプログラム開発中に元のSQL文を使って直接データベースを操作するのではなく、ORMから提供されたクエリ文を通じて通常のjavaオブジェクトを操作します。ORMは、通常のjavaオブジェクトに関するクエリ文をSQL文に翻訳してデータベースを操作し、異なるデータベースSQL文の違いを遮断し、プログラム開発作業を簡略化し、プログラムの移植性を向上させました。
2. Ibatis開発の準備:
(1)Ibaits関連のjarパッケージを工事のクラスパスに追加します。
(2).Ibatisプロジェクトの主な構成ファイルは:
a.Ibatisの総配置ファイルSql MapConfig.xml。
b.Ibatisの実体マッピングファイル。
3.Ibatis総配置ファイルsql-map-config.xml:
Ibatisの総構成ファイルは主にデータベース接続関連情報を構成し、Ibatisエンティティマッピングファイルとする。その書き方の例は以下の通りです。
Ibatisの実体マッピングファイルはIbatisフレームの核心であり、Javaの永続化エンティティオブジェクトと関係型データベースをマッピングする役割を果たしており、その内容は主にjavaエンティティの各種添削操作に対応するデータベースステートメントを含む。その書き方の例は以下の通りです。
(1).IbatisのSQL Mapの核心概念はMapped Sttementです。Mapped Sttementは任意のSQL文を使用し、parameterMap/parameterClass(入力パラメータ)とreult Map/result Class(出力結果)を持つことができます。
(2)要素は汎用的な声明であり、SQL文のいずれかの種類に使用できますが、通常は特定のタイプを使用します。
7. Ibatisの添削操作の簡単な例:
(1)エンティティ類は、JavaBeanの仕様に従い、パラメータなしの構造方法を提供しなければならない。フィールドはgetとset方法を提供しなければならない。
(2)Ibatisに対応するエンティティマップファイルのタグ要素は、以下のように追加されます。
a.Ibatis追加:
b.Ibatis削除:
c. Ibatis あいまい検索
name like'%c'のようです。Ibatisには2つの書き方があります。
書き方1:javaメソッドでパラメータを渡すときは「%フィールド名%」と書きます。
書き方2:Ibatisのsql文では、例えば:where name='%フィールド名$%と書くことができます。
d. Ibatis更新:
8. javaオブジェクトにIbatisのstatementを使用して操作します。
(1).Ibatisの総配置ファイルからSql MapClientオブジェクトを取得し、具体的な方法は「5. Ibatisの総配置ファイルを読み込み、Sql MapClientを得る」。
(2)Sql MapClientオブジェクトを使用するqueryForObject()、queryForList()、insert()、delete()、udate()方法。これらの方法はいずれも、エンティティマッピングファイルで定義された動作statementIdを伝達するパラメータが必要であり、これらの定義された動作がパラメータを入力する必要がある場合、入力パラメータオブジェクトを伝達する必要がある。簡単な使い方は以下の通りです。
メインキーの自動生成は、サブ要素を使用してサポートされます。異なるデータベースのマスターキーの自動生成機構については、Oracleは自己増加シーケンス欲によって生成され、MS-SQL ServerはIdentityによって生成される。ここではOracleデータベースを例にとって、メインキーの自動生成方法を簡単に説明します。
(1)まずOracleデータベースに自己増加シーケンスを作成する:
10. Ibatisの埋め込みパラメータ:
埋め込みパラメータとは、Ibatisを使用する場合、パラメータの伝達値が指定されていない場合、Ibatisはデフォルトの値で置換されます。
構文は、:铉パラメータ値:データベースのデータタイプ:埋め込みパラメータ
簡単な例は以下の通りです。
11. Ibatisオブジェクト間の関係:
Ibatisの入力パラメータと出力パラメータは一つしかないので、入力パラメータが一つのエンティティオブジェクトの場合は、parameterClassを使用して、入力オブジェクトが一つのエンティティオブジェクトの中にいる場合は、result Classを使用します。
しかし、多くの場合、入力パラメータと出力パラメータはいくつかのエンティティオブジェクトに含まれています。一つのパラメータだけを伝えるために、これらの入力と出力パラメータの組み合わせのために、専用にクラスを作成することはできません。したがって、複数のエンティティオブジェクトのフィールドを組み合わせて、parameterMapとreultMapを使用する必要があります。
resultMapを例にとって、使用方法は以下の通りである。
格納プロセスは、データベースが特定の機能を完了するためのSql文をコンパイルし、呼び出しごとにコンパイルする必要がないため、実行速度と効率はSql文を直接使うよりも大きな利点があります。Ibatisではラベル要素によって直接データベースの格納プロセスを呼び出すことができます。そのプロセスは以下の通りです。
(1)保存プロセスを定義するために必要な入出力パラメータ、例えば、
13. IbatisとSpringを統合:
現在Java Web開発では、SSHの3つのオープンソースフレームの組み合わせが非常に流行っています。Hibergに慣れていない人や、Hibergaの性能を疑っている人にとっては、ibergフレームの代わりにIbatisを使うこともできます。すなわちSSI(Spring,Struts,Ibatis)。SpringとStrutsの集積はここでは多くなく、SpringとIbatisの統合を具体的に説明します。
(1)IbatisプロジェクトにSpringサポートを導入し、Spring関連のjarパケットをクラスパスに追加し、/srcディレクトリの下でspringプロファイルを作成し、web.xmlファイルの中でspringプロファイルを指定し、springのWebContextを追加してモニターを起動する。
(2)データベースへの接続情報をspringで管理し、springプロファイルにデータベース接続情報を追加する:
ここでSpringとIbatisはシームレスに集積され、Sql MapClientオブジェクトを作成してデータソースを注入し、直接にspringを通してSql MapClientオブジェクトを獲得すればそのまま使用できます。
14. Ibatisの長所と短所のまとめ:
利点:標準Sql文を使って、JDBCより簡単で便利で、コード量を減らして、アーキテクチャと性能が向上します。HybernateなどのORMツールよりSql文に近いので、性能がコントロールできます。sql文とプログラムコードを分離して、プロジェクトの分業を簡略化して、並列開発の可能性を大いに高めます。
短所:標準的なsql文も書く必要があります。Hibernateがベースのデータベースの違いを完全に遮断したのと違って、プログラムの移植性はHibernateとJPAより悪いです。入力パラメータと出力パラメータは一つしかありません。プログラム作成の柔軟性はあまり高くないです。
転載先:https://www.cnblogs.com/tyhJava/p/5842594.html
オブジェクト関係マップ(ORM):単純原理はオブジェクト指向で関係型データベースを操作することで、現在最もよく使われているデータを格納するツールは関係型データベースであり、その操作方式はSQL文でデータベースを操作するテーブルであるが、Javaオブジェクト向けのプログラミング言語では、すべての操作対象は対象である。したがって、オブジェクト関係マップとは、データベーステーブルとjavaプログラミング言語のオブジェクトを対応させ、テーブルの列をjavaオブジェクトのフィールドに対応させることであり、プログラマはプログラム開発中に元のSQL文を使って直接データベースを操作するのではなく、ORMから提供されたクエリ文を通じて通常のjavaオブジェクトを操作します。ORMは、通常のjavaオブジェクトに関するクエリ文をSQL文に翻訳してデータベースを操作し、異なるデータベースSQL文の違いを遮断し、プログラム開発作業を簡略化し、プログラムの移植性を向上させました。
2. Ibatis開発の準備:
(1)Ibaits関連のjarパッケージを工事のクラスパスに追加します。
(2).Ibatisプロジェクトの主な構成ファイルは:
a.Ibatisの総配置ファイルSql MapConfig.xml。
b.Ibatisの実体マッピングファイル。
3.Ibatis総配置ファイルsql-map-config.xml:
Ibatisの総構成ファイルは主にデータベース接続関連情報を構成し、Ibatisエンティティマッピングファイルとする。その書き方の例は以下の通りです。
xml version=”1.0” encoding=”UTF-8” ?>
<! DOCTYPE sqlMapConfig public “-//ibatis.apache.org//DTD SQL Map Config 2.0//EN” “http://ibatis.apache.org//dtd//sql-map-config-2.dtd”> <sqlMapConfig> <transactionManager type=”JDBC” commitRequired=”false”> <dataSource type=”SIMPLE”> <property name= “JDBC.Driver” value=” jdbc ”/> <property name=”JDBC.ConnectionURL” value=” url”/> <property name=”JDBC.Username” value=” ”/> <property name=”JDBC.Password” value=” ”/> …… dataSource> transactionManager> <sqlMap resource=”Ibatis ”/> …… sqlMapConfig>
4. Ibatisエンティティマッピングファイルuser.xmlの書き方例:Ibatisの実体マッピングファイルはIbatisフレームの核心であり、Javaの永続化エンティティオブジェクトと関係型データベースをマッピングする役割を果たしており、その内容は主にjavaエンティティの各種添削操作に対応するデータベースステートメントを含む。その書き方の例は以下の通りです。
xml version=”1.0” encoding=”UTF-8” ?>
<! DOCTYPE sqlMap public “-//ibatis.apache.org//DTD SQL Map 2.0//EN” “http://ibatis.apache.org//dtd//sql-map-2.dtd”> <sqlMap namespace=”Ibatis ”> <typeAlias alias=” ” type=” ”/> <resultMap id=” id” class=” ”> <result property=”java ” column=” ”/> …… resultMap> …… sqlMap>
5. Ibatisの総配置ファイルを読み込み、Sql MapClientを得る:private static SqlMapClient sqlMapClient = null;
static{
try{
Reader reader = com.ibatis.common.resource.Resources.getResourceAsReader(“Ibatis ”); sqlMapClient = com.ibatis.sqlMap.client.SqlMapClientBuilder.builderSqlMapClient(reader); reader.close(); }catch(IOException e){ ……. } }
6. IbatisのSQL Map:(1).IbatisのSQL Mapの核心概念はMapped Sttementです。Mapped Sttementは任意のSQL文を使用し、parameterMap/parameterClass(入力パラメータ)とreult Map/result Class(出力結果)を持つことができます。
(2)要素は汎用的な声明であり、SQL文のいずれかの種類に使用できますが、通常は特定のタイプを使用します。
7. Ibatisの添削操作の簡単な例:
(1)エンティティ類は、JavaBeanの仕様に従い、パラメータなしの構造方法を提供しなければならない。フィールドはgetとset方法を提供しなければならない。
(2)Ibatisに対応するエンティティマップファイルのタグ要素は、以下のように追加されます。
a.Ibatis追加:
<insert id=”Ibatis Id” parameterClass=” ”> insert into ( 1, 2,……) values(# 1#,# 2#......); insert>
注意:Ibatis添削検索文のパラメータはparameterClassまたはparameterMapを通じて伝達されます。Ibatisは一つのパラメータしか伝達できません。もしもう一つのパラメータが一つのオブジェクトに実装される必要があります。b.Ibatis削除:
<delete id=”Ibatis Id” parameterClass=” ”> delete from where =# #; delete>
注意:削除と照会の時、常に一定の条件によって操作しなければならない。c. Ibatis あいまい検索
name like'%c'のようです。Ibatisには2つの書き方があります。
書き方1:javaメソッドでパラメータを渡すときは「%フィールド名%」と書きます。
書き方2:Ibatisのsql文では、例えば:where name='%フィールド名$%と書くことができます。
d. Ibatis更新:
<update id=”Ibatis Id” parameterClass=” ”> update set 1=# 1#, 2=# 2#,…….where ….; update>
e. Ibatis検索<select id=”Ibatis Id” resultClass=” ” > select * from ; select>
ここで実証されているのは最も簡単なクエリであり、その結果はエンティティの集合である。8. javaオブジェクトにIbatisのstatementを使用して操作します。
(1).Ibatisの総配置ファイルからSql MapClientオブジェクトを取得し、具体的な方法は「5. Ibatisの総配置ファイルを読み込み、Sql MapClientを得る」。
(2)Sql MapClientオブジェクトを使用するqueryForObject()、queryForList()、insert()、delete()、udate()方法。これらの方法はいずれも、エンティティマッピングファイルで定義された動作statementIdを伝達するパラメータが必要であり、これらの定義された動作がパラメータを入力する必要がある場合、入力パラメータオブジェクトを伝達する必要がある。簡単な使い方は以下の通りです。
= sqlMapClient.queryForObject(“ .statementId”, “ ”);
:
user = (User) sqlMapClient.queryForObject("querybyid",id);
list = sqlMapClient.queryForList("queryAll",user);
sqlMapClient.update("update", user);
sqlMapClient.delete("delete",id); sqlMapClient.insert("insert", user); user = (User)sqlMapClient.queryForObject("login", u);
9. Ibatisキーは自動的に生成されます。メインキーの自動生成は、サブ要素を使用してサポートされます。異なるデータベースのマスターキーの自動生成機構については、Oracleは自己増加シーケンス欲によって生成され、MS-SQL ServerはIdentityによって生成される。ここではOracleデータベースを例にとって、メインキーの自動生成方法を簡単に説明します。
(1)まずOracleデータベースに自己増加シーケンスを作成する:
create Sequence
start with 1 increment 1;
(2).insertタグにselectkey子ラベルを挿入する:<insert id=” Id” parameterClass=” ”> <selectkey resultClass=”int” keyProperty=” ”> select .nextval from dual; selectkey> insert into ( , 1, 2,……) values(# #,# 1#,# 2#,…….); insert>
注意:selectkeyタグのkeyProperty属性は、主キーの割り当ての対象となります。10. Ibatisの埋め込みパラメータ:
埋め込みパラメータとは、Ibatisを使用する場合、パラメータの伝達値が指定されていない場合、Ibatisはデフォルトの値で置換されます。
構文は、:铉パラメータ値:データベースのデータタイプ:埋め込みパラメータ
簡単な例は以下の通りです。
<statement id=”insertProduct” parameterClass=”Product”> Insert into Product(PRD_ID,PRD_DESC) values(#id:Number:-999999#,#desc:varchar:noEntry#); statement>
IDが指定されていない場合は、データベースでデフォルトは0で、descが指定されていないときは、データベースがデフォルトで与えられたnoEntryです。11. Ibatisオブジェクト間の関係:
Ibatisの入力パラメータと出力パラメータは一つしかないので、入力パラメータが一つのエンティティオブジェクトの場合は、parameterClassを使用して、入力オブジェクトが一つのエンティティオブジェクトの中にいる場合は、result Classを使用します。
しかし、多くの場合、入力パラメータと出力パラメータはいくつかのエンティティオブジェクトに含まれています。一つのパラメータだけを伝えるために、これらの入力と出力パラメータの組み合わせのために、専用にクラスを作成することはできません。したがって、複数のエンティティオブジェクトのフィールドを組み合わせて、parameterMapとreultMapを使用する必要があります。
resultMapを例にとって、使用方法は以下の通りである。
<resultMap id=”resultMapId”>
<result property=”……” column=”…….” select=” StatementId”/> …… resultMap>
<sqlMap>
<typeAlias alias="User" type="com.pojo.User" /> <resultMap id="UserResult" class="User"> <result property="id" column="ID" /> <result property="username" column="USERNAME" /> <result property="password" column="PASSWORD" /> resultMap> <select id="login" resultMap="UserResult" parameterClass="User"> select * from USER where USERNAME=#username# and PASSWORD=#password# select> <insert id="insert" parameterClass="User"> insert into USER(ID,USERNAME,PASSWORD)values(#id#,#username#,#password#) insert> <delete id="delete" parameterClass="int"> delete from USER where ID = #id# delete> <update id="update" parameterClass="User"> update USER set USERNAME=#username#,PASSWORD=#password# where ID = #id# update> <select id="querybyid" parameterClass="int" resultClass="User"> select * from USER where ID = #id# select> <select id="queryAll" parameterClass="User" resultClass="User"> select * from USER select> sqlMap>
12. IbatisのSQL Mapはラベル要素によってメモリプロセスを呼び出します。格納プロセスは、データベースが特定の機能を完了するためのSql文をコンパイルし、呼び出しごとにコンパイルする必要がないため、実行速度と効率はSql文を直接使うよりも大きな利点があります。Ibatisではラベル要素によって直接データベースの格納プロセスを呼び出すことができます。そのプロセスは以下の通りです。
(1)保存プロセスを定義するために必要な入出力パラメータ、例えば、
<parameterMap id=” ” class=”map”> <parameter property=”email1” jdbcType=”varchar” javaType=”java.lang.String” mode=”INOUT”/> <parameter property=”email2” jdbcType=”varchar” javaType=”java.lang.String” mode=”INOUT”/> parameterMap>
(2)保存プロセスを起動します。<procedure id=”Ibatis ” parameterMap=” ”> {call (?,?)} procedure>
注意:Ibatisは、常にJDBC規格だけを使用した記憶過程文法を確保するために、格納プロセスを起動します。13. IbatisとSpringを統合:
現在Java Web開発では、SSHの3つのオープンソースフレームの組み合わせが非常に流行っています。Hibergに慣れていない人や、Hibergaの性能を疑っている人にとっては、ibergフレームの代わりにIbatisを使うこともできます。すなわちSSI(Spring,Struts,Ibatis)。SpringとStrutsの集積はここでは多くなく、SpringとIbatisの統合を具体的に説明します。
(1)IbatisプロジェクトにSpringサポートを導入し、Spring関連のjarパケットをクラスパスに追加し、/srcディレクトリの下でspringプロファイルを作成し、web.xmlファイルの中でspringプロファイルを指定し、springのWebContextを追加してモニターを起動する。
(2)データベースへの接続情報をspringで管理し、springプロファイルにデータベース接続情報を追加する:
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”> <property name=”driverClassName” value=” ”/> <property name=”url” value=” URL”/> <property name=”username” value=” ”/> <property name=”password” value=” ”/> bean>
(3).springプロファイルにIbatisへのサポートを追加する:<bean id=”sqlMapClient” class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”> <property name=”configLocation” value=”Ibatis ”/> <property name=”dataSource” ref=”dataSource”/> bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> property> <property name="configLocation"> <value>/WEB-INF/sql-map-config.xmlvalue> property> bean>
(4)Ibatisの全体構成ファイルからデータベース接続に関する情報を削除します。Ibatisの全体構成ファイルにエンティティマッピングファイルを配置すればいいです。ここでSpringとIbatisはシームレスに集積され、Sql MapClientオブジェクトを作成してデータソースを注入し、直接にspringを通してSql MapClientオブジェクトを獲得すればそのまま使用できます。
14. Ibatisの長所と短所のまとめ:
利点:標準Sql文を使って、JDBCより簡単で便利で、コード量を減らして、アーキテクチャと性能が向上します。HybernateなどのORMツールよりSql文に近いので、性能がコントロールできます。sql文とプログラムコードを分離して、プロジェクトの分業を簡略化して、並列開発の可能性を大いに高めます。
短所:標準的なsql文も書く必要があります。Hibernateがベースのデータベースの違いを完全に遮断したのと違って、プログラムの移植性はHibernateとJPAより悪いです。入力パラメータと出力パラメータは一つしかありません。プログラム作成の柔軟性はあまり高くないです。
転載先:https://www.cnblogs.com/tyhJava/p/5842594.html