O/Rマッピング
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
] [
Twitter
]
開始行:
→データベース関連
#contents
*一般 [#e155b143]
-[[Spring BootアプリケーションでのDBFluteとFlywayの紹介|...
-[[O/Rマッピングは百害あって一利なし!>https://qiita.com/...
-[[O/Rマッピング技術の進化が皮肉にも助長している「えせMVC...
--「この業界でプロとして仕事をするなら、使う言語やフレー...
-[[時代はO-Rマッピングからkey-valueストアへ>http://forza....
--昨今のWebアプリの技術を鳥瞰してみると、RailsやSeasarでO...
--そして、技術革新の場所は、GoogleのMapReduce、Amazonのレ...
*JPA [#qbcfff40]
-[[2023/4/27 Java仕様勉強会: Jakarta Persistence - Speake...
-[[今からでも遅くない JPAを学ぼう!(前編)O/Rマッピング...
-[[今からでも遅くない JPAを学ぼう!(後編)オブジェクト...
*Hibernate [#ieccfe1e]
-http://hibernate.org/
-Hibernate Reference Documentation
--http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/ht...
-[[Hibernateを使ってみる(JPAを使って)>http://d.hatena.n...
--JPAはO/Rマッパーの違いを隠ぺいするためのAPIである。
-[[Hibernate解説>http://www.techscore.com/tech/Java/Other...
--注意:ややバージョンが古いです
-[[Hibernate入門@syboos>http://www.syboos.jp/hibernate/]]
-[[チュートリアルを利用したHibernate入門>http://www.omote...
-[[SQLに似たHQLでリレーショナルデータを柔軟に検索 (1/2)>h...
**Nhibernate [#x67fe53b]
-[[NHibernateを利用してSQLを書かずにデータベースにアクセ...
-[[NHibernateによるO/Rマッピング>http://wiki.nhibernate.o...
*S2JDBC [#v6b79245]
-エンティティを生成したときにできる xxxxNamesクラスは何に...
--例えば以下のように、includesメソッドにカラム名を渡す場...
jdbcManager.update(hogeEntity).includes(
hogeNames.colA(),
hogeNames.colB(),
hogeNames.colC()).execute();
-jdbcManager#updateBySqlで更新した場合、 @Versionをつけて...
-エンティティの文字列長チェック
/***
* エンティティの文字列フィールドの長さをチェックします<...
* Columnアノテーションの length 属性と比較して長ければ...
* ついでにnot null制約がついているフィールドにnullを設...
* @param entity チェックしたいエンティティ
* @return チェックOKなら true NGなら false
*/
public static boolean checkStringFieldLength(Object enti...
boolean b = true;
try {
Class<?> cls = entity.getClass();
Field[] flds = cls.getDeclaredFields();
for(Field f : flds){
if( f.getType().equals(String.class) ){
Column c = f.getAnnotation(Column.class);
int len = c.length();
String name = cls.getSimpleName() +"." +f.getNam...
String val = (String) f.get(entity);
if(StringUtil.isEmpty(val)==false){
if(val.length() > len){
Log.error(name + "の値[" + val +
"]がエンティティで指定されている長さ(" +
len + ")よりも長すぎます");
b = false;
}
}
if(c.nullable()==false && val == null){
Log.error(name +"にはnullを設定することはでき...
b = false;
}
}
}
return b;
}catch(Exception e){
e.printStackTrace();
return b;
}
}
-スタンドアロンアプリでトランザクションを形成したいとき
--componentタグの中にaspect タグを書きそこにrequiredTxな...
--独自ファイル(たとえばbean.diconなど)作ってapp.diconから...
め
(例)
<component name="sample" class="jp.co.Sample">
<aspect>j2ee.requiredTx</aspect>
</component>
--指定したクラスのすべてのメソッドがトランザクション対象...
--pointCutタグを使うとメソッドを特定できる
--このとき
[ESSR0046]コンポーネント(j2ee)が見つかりません
と言われるならば
<include path="j2ee.dicon"/>
をapp.diconに追加すべし
-[[バッチ処理でトランザクションかますサンプル>http://code...
-org.seasar.framework.container.TooManyRegistrationRuntim...
[ESSR0045]interface javax.sql.XADataSourceに複数のコン...
(org.seasar.extension.dbcp.impl.XADataSourceImpl,
org.seasar.extension.dbcp.impl.XADataSourceImpl)が登録さ...
--jdbc.diconに <component name="xaDataSource"> のタグが複...
-jdbc.diconでコネクション・プーリングやタイムアウトの設定...
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolIm...
<property name="timeout">600</property> ←秒数
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
-[[S2JDBC>http://s2container.seasar.org/2.4/ja/s2jdbc_abs...
--[[チュートリアル>http://s2container.seasar.org/2.4/ja/s...
-ビューの扱い
--S2JDBC-Genでエンティティを生成できるのはテーブルのみで...
--ではどうするかというと、Viewに対しては Dtoを作ってSQL指...
public class ViewTestDtoService extends AbstractService<...
public List<ViewTestDto> getAll(){
List<ViewTestDto> results = jdbcManager.selectByS...
ViewTestDto.class, "select * from ...
.getResultList();
return results;
}
}
--ビューに限らず、複雑なSELECT文を使う場合も同様
--SQLファイルからDtoクラスを生成する機能がS2JDBC-Genにあ...
-S2AbstractServiceについて
--http://d.hatena.ne.jp/dewa/20080706/1215308304
--http://d.hatena.ne.jp/dkfj/20090306/1236301619
--Serviceクラスは、Entityクラスと1:1で対応させる。
--Serviceクラスは、Entityに対する処理以外はやらない。
--Serviceクラス以外は、jdbcManagerを生で使用しない。(Acti...
--AbstractServiceを作成し、DBに関する共通処理を集約させる...
日とか)
--[[続・SAStruts + S2JDBCのアーキテクチャ>http://d.hatena...
-[[S2JDBCとS2Daoのいけてないところ>http://blog.tsukuba-bu...
--S2DBCP は,ローカルトランザクションの内部では,Connecti...
--つまり,手動での JDBC 操作の部分と,S2JDBC/S2Dao の呼び...
--当然,トランザクションもばらばらになってしまうため,事...
-トランザクション管理は[[S2Tx>http://s2container.seasar.o...
--デフォルトだとコンポーネントが例外をスローした場合はト...
--addCommitRule(Class)メソッドを使用すると、トランザクシ...
--addRollbackRule(Class)メソッドを使用すると、トランザク...
-[[S2JDBCのトランザクション>http://kanon986.blog95.fc2.co...
--SAStrutsと組み合わせれば、デフォルトでAction単位でトラ...
--参考:[[SAStrutsにおけるトランザクション>http://sastrut...
-MS製のJDBCドライバでSQL Server 2005 Expressにつなぐとき...
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImp...
<property name="driverClassName">
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
</property>
<property name="URL">
"jdbc:sqlserver://localhost;instanceName=SQLEXPRE...
</property>
<property name="user">"sa"</property>
<property name="password">"hogehoge"</property>
</component>
-統合認証で接続する場合のjdbc.dicon
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceI...
<property name="driverClassName">
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
</property>
<property name="URL">
"jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;da...
</property>
</component>
-JDBCドライバのファイルはsqljdbc4.jarだけあれば良い模様。...
-jdbc.diconで統合認証を使う場合はJDBCドライバに同梱されて...
*iBATIS [#a46cecb6]
-[[Developer Guid>http://ibatisnet.sourceforge.net/DevGui...
-[[Quick Start Guide>http://opensource.atlassian.com/conf...
-[[ASP.NETで実践するiBATIS>http://www.atmarkit.co.jp/fdot...
-「iBATIS.NET」は「SQL Maps=DataMapper」と「DAO Framework...
--SQL Maps:XMLに記述したSQLの実行結果をマッピングする
--DAO Framework:DI機能。DBアクセスとビジネスロジックの依...
--ADO.NETのデータプロバイダに依存する
--2つのフレームワークはそれぞれ単体で使用可能
-[[iBATIS.NETによるO/Rマッピング(SQL Maps編):http://codez...
-[[iBATIS.NETによるO/Rマッピング(DAO Framework編):http://...
**インストール [#rea89cd6]
-http://ibatis.apache.org/ から最新版を落としてくる
-インストーラなどは無い。展開したものを適当なフォルダにコ...
-VS.NETから以下のdllを参照する
--IBatisNet.Common.dll
--IBatisNet.DataMapper.dll (SQL Maps使用時)
--IBatisNet.DataAccess.dll (DAO Framwork使用時)
**使い方 [#ye3cbeb6]
-マッピング対象のオブジェクトとなるクラスを定義する
-マッピング用XMLを作り、その中の所定のタグにSQLを書く
-管理ファイルSqlMap.configにマッピング用XMLを登録する
*その他 [#a1fc340a]
-[[Gentle.NET>http://www.mertner.com/confluence/display/G...
-[[SQLを記述しないO/RマッピングツールTorque:http://www.th...
終了行:
→データベース関連
#contents
*一般 [#e155b143]
-[[Spring BootアプリケーションでのDBFluteとFlywayの紹介|...
-[[O/Rマッピングは百害あって一利なし!>https://qiita.com/...
-[[O/Rマッピング技術の進化が皮肉にも助長している「えせMVC...
--「この業界でプロとして仕事をするなら、使う言語やフレー...
-[[時代はO-Rマッピングからkey-valueストアへ>http://forza....
--昨今のWebアプリの技術を鳥瞰してみると、RailsやSeasarでO...
--そして、技術革新の場所は、GoogleのMapReduce、Amazonのレ...
*JPA [#qbcfff40]
-[[2023/4/27 Java仕様勉強会: Jakarta Persistence - Speake...
-[[今からでも遅くない JPAを学ぼう!(前編)O/Rマッピング...
-[[今からでも遅くない JPAを学ぼう!(後編)オブジェクト...
*Hibernate [#ieccfe1e]
-http://hibernate.org/
-Hibernate Reference Documentation
--http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/ht...
-[[Hibernateを使ってみる(JPAを使って)>http://d.hatena.n...
--JPAはO/Rマッパーの違いを隠ぺいするためのAPIである。
-[[Hibernate解説>http://www.techscore.com/tech/Java/Other...
--注意:ややバージョンが古いです
-[[Hibernate入門@syboos>http://www.syboos.jp/hibernate/]]
-[[チュートリアルを利用したHibernate入門>http://www.omote...
-[[SQLに似たHQLでリレーショナルデータを柔軟に検索 (1/2)>h...
**Nhibernate [#x67fe53b]
-[[NHibernateを利用してSQLを書かずにデータベースにアクセ...
-[[NHibernateによるO/Rマッピング>http://wiki.nhibernate.o...
*S2JDBC [#v6b79245]
-エンティティを生成したときにできる xxxxNamesクラスは何に...
--例えば以下のように、includesメソッドにカラム名を渡す場...
jdbcManager.update(hogeEntity).includes(
hogeNames.colA(),
hogeNames.colB(),
hogeNames.colC()).execute();
-jdbcManager#updateBySqlで更新した場合、 @Versionをつけて...
-エンティティの文字列長チェック
/***
* エンティティの文字列フィールドの長さをチェックします<...
* Columnアノテーションの length 属性と比較して長ければ...
* ついでにnot null制約がついているフィールドにnullを設...
* @param entity チェックしたいエンティティ
* @return チェックOKなら true NGなら false
*/
public static boolean checkStringFieldLength(Object enti...
boolean b = true;
try {
Class<?> cls = entity.getClass();
Field[] flds = cls.getDeclaredFields();
for(Field f : flds){
if( f.getType().equals(String.class) ){
Column c = f.getAnnotation(Column.class);
int len = c.length();
String name = cls.getSimpleName() +"." +f.getNam...
String val = (String) f.get(entity);
if(StringUtil.isEmpty(val)==false){
if(val.length() > len){
Log.error(name + "の値[" + val +
"]がエンティティで指定されている長さ(" +
len + ")よりも長すぎます");
b = false;
}
}
if(c.nullable()==false && val == null){
Log.error(name +"にはnullを設定することはでき...
b = false;
}
}
}
return b;
}catch(Exception e){
e.printStackTrace();
return b;
}
}
-スタンドアロンアプリでトランザクションを形成したいとき
--componentタグの中にaspect タグを書きそこにrequiredTxな...
--独自ファイル(たとえばbean.diconなど)作ってapp.diconから...
め
(例)
<component name="sample" class="jp.co.Sample">
<aspect>j2ee.requiredTx</aspect>
</component>
--指定したクラスのすべてのメソッドがトランザクション対象...
--pointCutタグを使うとメソッドを特定できる
--このとき
[ESSR0046]コンポーネント(j2ee)が見つかりません
と言われるならば
<include path="j2ee.dicon"/>
をapp.diconに追加すべし
-[[バッチ処理でトランザクションかますサンプル>http://code...
-org.seasar.framework.container.TooManyRegistrationRuntim...
[ESSR0045]interface javax.sql.XADataSourceに複数のコン...
(org.seasar.extension.dbcp.impl.XADataSourceImpl,
org.seasar.extension.dbcp.impl.XADataSourceImpl)が登録さ...
--jdbc.diconに <component name="xaDataSource"> のタグが複...
-jdbc.diconでコネクション・プーリングやタイムアウトの設定...
<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolIm...
<property name="timeout">600</property> ←秒数
<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>
</component>
-[[S2JDBC>http://s2container.seasar.org/2.4/ja/s2jdbc_abs...
--[[チュートリアル>http://s2container.seasar.org/2.4/ja/s...
-ビューの扱い
--S2JDBC-Genでエンティティを生成できるのはテーブルのみで...
--ではどうするかというと、Viewに対しては Dtoを作ってSQL指...
public class ViewTestDtoService extends AbstractService<...
public List<ViewTestDto> getAll(){
List<ViewTestDto> results = jdbcManager.selectByS...
ViewTestDto.class, "select * from ...
.getResultList();
return results;
}
}
--ビューに限らず、複雑なSELECT文を使う場合も同様
--SQLファイルからDtoクラスを生成する機能がS2JDBC-Genにあ...
-S2AbstractServiceについて
--http://d.hatena.ne.jp/dewa/20080706/1215308304
--http://d.hatena.ne.jp/dkfj/20090306/1236301619
--Serviceクラスは、Entityクラスと1:1で対応させる。
--Serviceクラスは、Entityに対する処理以外はやらない。
--Serviceクラス以外は、jdbcManagerを生で使用しない。(Acti...
--AbstractServiceを作成し、DBに関する共通処理を集約させる...
日とか)
--[[続・SAStruts + S2JDBCのアーキテクチャ>http://d.hatena...
-[[S2JDBCとS2Daoのいけてないところ>http://blog.tsukuba-bu...
--S2DBCP は,ローカルトランザクションの内部では,Connecti...
--つまり,手動での JDBC 操作の部分と,S2JDBC/S2Dao の呼び...
--当然,トランザクションもばらばらになってしまうため,事...
-トランザクション管理は[[S2Tx>http://s2container.seasar.o...
--デフォルトだとコンポーネントが例外をスローした場合はト...
--addCommitRule(Class)メソッドを使用すると、トランザクシ...
--addRollbackRule(Class)メソッドを使用すると、トランザク...
-[[S2JDBCのトランザクション>http://kanon986.blog95.fc2.co...
--SAStrutsと組み合わせれば、デフォルトでAction単位でトラ...
--参考:[[SAStrutsにおけるトランザクション>http://sastrut...
-MS製のJDBCドライバでSQL Server 2005 Expressにつなぐとき...
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImp...
<property name="driverClassName">
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
</property>
<property name="URL">
"jdbc:sqlserver://localhost;instanceName=SQLEXPRE...
</property>
<property name="user">"sa"</property>
<property name="password">"hogehoge"</property>
</component>
-統合認証で接続する場合のjdbc.dicon
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceI...
<property name="driverClassName">
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
</property>
<property name="URL">
"jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;da...
</property>
</component>
-JDBCドライバのファイルはsqljdbc4.jarだけあれば良い模様。...
-jdbc.diconで統合認証を使う場合はJDBCドライバに同梱されて...
*iBATIS [#a46cecb6]
-[[Developer Guid>http://ibatisnet.sourceforge.net/DevGui...
-[[Quick Start Guide>http://opensource.atlassian.com/conf...
-[[ASP.NETで実践するiBATIS>http://www.atmarkit.co.jp/fdot...
-「iBATIS.NET」は「SQL Maps=DataMapper」と「DAO Framework...
--SQL Maps:XMLに記述したSQLの実行結果をマッピングする
--DAO Framework:DI機能。DBアクセスとビジネスロジックの依...
--ADO.NETのデータプロバイダに依存する
--2つのフレームワークはそれぞれ単体で使用可能
-[[iBATIS.NETによるO/Rマッピング(SQL Maps編):http://codez...
-[[iBATIS.NETによるO/Rマッピング(DAO Framework編):http://...
**インストール [#rea89cd6]
-http://ibatis.apache.org/ から最新版を落としてくる
-インストーラなどは無い。展開したものを適当なフォルダにコ...
-VS.NETから以下のdllを参照する
--IBatisNet.Common.dll
--IBatisNet.DataMapper.dll (SQL Maps使用時)
--IBatisNet.DataAccess.dll (DAO Framwork使用時)
**使い方 [#ye3cbeb6]
-マッピング対象のオブジェクトとなるクラスを定義する
-マッピング用XMLを作り、その中の所定のタグにSQLを書く
-管理ファイルSqlMap.configにマッピング用XMLを登録する
*その他 [#a1fc340a]
-[[Gentle.NET>http://www.mertner.com/confluence/display/G...
-[[SQLを記述しないO/RマッピングツールTorque:http://www.th...
ページ名: