<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>あはは。な日記</title><link>http://blogs.wankuma.com/ahaha/</link><description>最近はjava/.net・・・って言うより設計とか調整とかだなぁ(´・ｪ・｀) </description><managingEditor>あはは。ahaha@wankuma.com</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>[java]reflectionを使って、引数のobjectの文字列化する。　ってやっぱり遅いんだなぁと</title><link>http://blogs.wankuma.com/ahaha/archive/2008/12/20/164494.aspx</link><pubDate>Sat, 20 Dec 2008 05:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/12/20/164494.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/164494.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/12/20/164494.aspx#Feedback</comments><slash:comments>175</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/164494.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/164494.aspx</trackback:ping><description>entityやら構造体やら、値を入れる入れ物を書くと大抵&lt;br&gt;
toString()メソッドをoverrideしているかと思うわけですが、&lt;br&gt;
毎回書くのは結構かったるい訳です。&lt;br&gt;
DBのスキーマを元に、とかだと自動生成ツールがいろいろとあったりするわけですが、&lt;br&gt;
時には自作しなければいけないもの。&lt;br&gt;
&lt;br&gt;
で、reflectionでそこを楽にできないかなぁと調べた結果がこれ。&lt;br&gt;
(下部にソース添付)&lt;br&gt;

loopで10万回繰り返して、作成したentityで試してみた。&lt;br&gt;
結果：&lt;br&gt;
　reflectionを使用したもの：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12秒358&lt;br&gt;
　普通にtoString()を実装&amp;nbsp;&amp;nbsp;&amp;nbsp;0秒180&lt;br&gt;
　(StringBuilderで文字を組み立てたもの)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

(´・ｪ・｀)&amp;nbsp;・・・違い過ぎる。&lt;br&gt;
うーん、マシンスペックやらを省略してますけど、それでもこんなに違うとは。&lt;br&gt;
utility的にreflectionを多用したら開発が楽できるかな？&lt;br&gt;
と思ったのですが後のパフォーマンスチューニングに苦しみそうですね。&lt;br&gt;
それにこれ、配列とかリストとか全然対応してないし。&lt;br&gt;
&lt;br&gt;
とすると、次なる候補はvelocityなどのTemplateEngine系になりそうです。&lt;br&gt;
(使用しているFrameworkのソースをみたらおもしろそうだったので)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
package&amp;nbsp;jp.co.ahaha.reflection;&lt;br&gt;

import&amp;nbsp;java.lang.reflect.Field;&lt;br&gt;
import&amp;nbsp;java.lang.reflect.Modifier;&lt;br&gt;

import&amp;nbsp;javax.persistence.Column;&amp;nbsp;&amp;nbsp;//geronimo-jpa_3.0_spec-1.0jar&amp;nbsp;を使用&lt;br&gt;

public&amp;nbsp;class&amp;nbsp;ReflectionSample&amp;nbsp;{&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/**&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;受け取ったobjectを、　フィールド名=値　の形式でカンマ区切りにした文字列表現で返却します。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;ただし、final　と　static&amp;nbsp;で宣言された項目については呼び出す予定はありません。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;また、もしそのobjectがentityである場合(=javax.persistence.Columnアノテーションが付加されている場合)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;フィールド名の代わりに、Columnアノテーションの名前を用いて　出力します。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;こちらは、返却される文字列には改行コードは含まれません。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;value&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;final&amp;nbsp;String&amp;nbsp;toValueOneLine(Object&amp;nbsp;value)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ReflectionSample.toValue(value,false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/**&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;受け取ったobjectを、　フィールド名=値　の形式でカンマ区切りにした文字列表現で返却します。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;ただし、final　と　static&amp;nbsp;で宣言された項目については呼び出す予定はありません。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;また、もしそのobjectがentityである場合(=javax.persistence.Columnアノテーションが付加されている場合)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;フィールド名の代わりに、Columnアノテーションの名前を用いて　出力します。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;こちらは、返却される文字列の　フィールド名=値のペア毎に改行します。&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;value&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;final&amp;nbsp;String&amp;nbsp;toValueMulti(Object&amp;nbsp;value)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;ReflectionSample.toValue(value,true);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;final&amp;nbsp;static&amp;nbsp;String&amp;nbsp;toValue(Object&amp;nbsp;value,&amp;nbsp;boolean&amp;nbsp;multiLine)&amp;nbsp;{&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//for&amp;nbsp;NullException&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(value&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;"null";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;endOfLine&amp;nbsp;=&amp;nbsp;"";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(multiLine)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endOfLine&amp;nbsp;=&amp;nbsp;"\n";&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//get&amp;nbsp;public&amp;nbsp;field(Seasar&amp;nbsp;entity)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Field[]&amp;nbsp;fields&amp;nbsp;=&amp;nbsp;value.getClass().getFields();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolean&amp;nbsp;accessPrivate&amp;nbsp;=&amp;nbsp;false;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(fields&amp;nbsp;==&amp;nbsp;null&amp;nbsp;||&amp;nbsp;fields.length&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//get&amp;nbsp;normal&amp;nbsp;javaBeans&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fields&amp;nbsp;=&amp;nbsp;value.getClass().getDeclaredFields();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accessPrivate&amp;nbsp;=&amp;nbsp;true;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder&amp;nbsp;sb&amp;nbsp;=&amp;nbsp;new&amp;nbsp;StringBuilder(1024);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(Field&amp;nbsp;f:&amp;nbsp;fields)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(accessPrivate)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.setAccessible(accessPrivate);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//dont&amp;nbsp;get&amp;nbsp;Final&amp;nbsp;or&amp;nbsp;Static&amp;nbsp;fields&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!Modifier.isFinal(f.getModifiers())&amp;nbsp;&amp;&amp;&lt;br&gt;
!Modifier.isStatic(f.getModifiers()))&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//columnName&amp;nbsp;(fieldName)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append(toFieldString(f));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append("=");&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//columnValue&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;f.get(value);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(temp&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append("null");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append(temp.toString());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append(",");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append(endOfLine);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;catch&amp;nbsp;and&amp;nbsp;proceed&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&amp;nbsp;//need&amp;nbsp;log&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;sb.toString();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/**&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;if&amp;nbsp;field&amp;nbsp;has&amp;nbsp;javax.persistence.Column&amp;nbsp;annotation&amp;nbsp;and&amp;nbsp;(name&amp;nbsp;is&lt;br&gt;
not&amp;nbsp;null)&amp;nbsp;then&amp;nbsp;return&amp;nbsp;column.name&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;else&amp;nbsp;return&amp;nbsp;field&amp;nbsp;name&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;f&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;final&amp;nbsp;static&amp;nbsp;String&amp;nbsp;toFieldString(Field&amp;nbsp;f)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Column&amp;nbsp;c&amp;nbsp;=&amp;nbsp;f.getAnnotation(Column.class);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(c&amp;nbsp;!=&amp;nbsp;null&amp;nbsp;&amp;&amp;&amp;nbsp;c.name()&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;c.name();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;f.getName();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
}&lt;br&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/164494.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>Seasar Conference 2008に行ってきたわけでして</title><link>http://blogs.wankuma.com/ahaha/archive/2008/09/07/155760.aspx</link><pubDate>Sun, 07 Sep 2008 02:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/09/07/155760.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/155760.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/09/07/155760.aspx#Feedback</comments><slash:comments>341</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/155760.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/155760.aspx</trackback:ping><description>( ´ー｀)y-~~一番行きたかった、＋お会いしたかったのが　DBFlute 開発者のjfluteさん、&lt;br&gt;
1番最初の時間で、飯田橋駅降りた後に迷っていたので&lt;br&gt;
時間に間に合ってよかった( ´ー`)フゥー．．．&lt;br&gt;

Webに上がってあるDocument系はざっと目を通していたんだけども&lt;br&gt;
それでもまだまだ機能のうち使いこなせていないのが多かったなぁと反省。&lt;br&gt;

以下、月曜日以降に試そうと思っているもの&lt;br&gt;
・S2Unitによってテストケース毎にxlsでデータを準備して、テスト前にデータ投入ができるけど&lt;br&gt;
　テーブルの列の増減等が多い場合、&lt;br&gt;
　DBの変更に追従できなくて逆にテストしなくなっちゃう問題&lt;br&gt;
　→Replace-Schema.bat(sh)を用いて、DBデータを一か所にまとめておきましょう&lt;br&gt;
&lt;br&gt;&lt;br&gt;

・DDLを生成、変更、削除があったときに、古いテーブルが残っちゃっていてそれのentityも生成しちゃってる問題&lt;br&gt;
　→今使っているのがdbflute-s2jdbcの0.7.3 だけども、最新だと0.7.9があって、少し前から&lt;br&gt;
　　&lt;br&gt;
　　　build.propertiesの方で&lt;br&gt;
　　　torque.isDeleteOldTableClass = true&lt;br&gt;
　　　と設定すれば消せるらしい事&lt;br&gt;
&lt;br&gt;
あたりでしょうか。&lt;br&gt;
2か月くらい前に見ていた時はdbflute-s2jdbcがリリースされたばかりのためか、&lt;br&gt;
S2Dao版のはbuildバージョンが上がってるけどS2JDBC版は上がらないなぁ&lt;br&gt;
とwatchをやめていたんですよね。&lt;br&gt;
( ´ー｀)y-~~うーん、webでの情報収集の考え方、方法をもう少し考えないとなぁ。&lt;br&gt;
&lt;br&gt;
以下今後の自分のタスク&lt;br&gt;
・外部キーを張ると、テストデータとか入れる時大変なんだよねーだから張らないんだ。&lt;br&gt;
　っていう管理者、DBA、開発者の人に対して、どうやれば楽にデータ投入などできるから貼りましょうよ&lt;br&gt;
　って説明するための、具体的な楽になる手順の提示&lt;br&gt;
　(自動生成系ツールがテーブルのメタデータにアクセスして作成しようとしているのに、上記だと無理だから)&lt;br&gt;
&lt;br&gt;
↑&lt;br&gt;
jfluteさん、教えていただきありがとうございます。・・・・&lt;br&gt;
&lt;br&gt;
ってうわー、あのあと「DBFluteユーザの集い２」ってあったんですね？&lt;br&gt;
サイトを確認しておけばよかった  つД｀)･ﾟ･&lt;br&gt;
&lt;P&gt;&lt;A href="http://d.hatena.ne.jp/jflute/20080905"&gt;http://d.hatena.ne.jp/jflute/20080905&lt;/A&gt;&lt;/P&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
・O/Rマッパで　　列がnotnullでも、ラッパクラスとして作成されるものが多いのはなぜか？&lt;br&gt;
　いくつか見ているとnotnullだとプリミティブ型　になるものと、それでもラッパクラスになるものがあるみたいだけど&lt;br&gt;
　それはどういった理由・方針からなのか、&lt;br&gt;
　→今回のプロジェクトではすべての列がnotnullで数値なら0、日付は1900年1月1日、文字系は""が入るようになっているが&lt;br&gt;
　　dbflute-s2jdbcではすべてラッパクラス。&lt;br&gt;
　　で、他の開発者、受け入れ元の会社の方からの依頼があったのでやむを得ず&lt;br&gt;
    mydbflute\dbflute-0.7.3\template\om\java\other\s2jdbc\entity\S2jdbcExtendedEntity.vm&lt;br&gt;
   のテンプレートに&lt;br&gt;
　　コンストラクタを追加するよう定義。&lt;br&gt;
　　コンストラクタにおいて自分自身を渡す  DefalutSetter.toSet(this);&lt;br&gt;
　　みたいなメソッドを作ってその中でリフレクションで上記フィールド系にデフォルト値をセットするようにしてみた&lt;br&gt;
&lt;br&gt;
　　( ´ー｀)y-~~うーん、ここら辺はもっといろんな人の批評が聞きたいところだなぁもっとほかにいい方法あるんじゃないかなぁ？&lt;br&gt;
　　(Listで1000件作成するときに、通常と比べて１GBメモリのマシンで大体1秒くらいの速度差だったからよしとしたんだけども)&lt;br&gt;
&lt;br&gt;
　　&lt;br&gt;
&lt;br&gt;
・ここら辺も読むこと&lt;br&gt;
  http://www.agiledata.org/essays/mappingObjects.html&lt;br&gt;
  http://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison&lt;br&gt;
  http://www.martinfowler.com/eaaCatalog/&lt;br&gt;
&lt;br&gt;
・情報収集の在り方についてもう少しきちんとWebと向き合おう。&lt;br&gt;
　→vbaとかクラサバにかかわってた時間が長すぎるからどうしてもwebの知識が足りなすぎるし、コツコツ集めましょう&lt;br&gt;
&lt;br&gt;
&gt;中さん&lt;br&gt;
すいません、わんくまに見る勉強会開催のススメ&lt;br&gt;
という題で講演をされているのは知っていたのですが&lt;br&gt;
裏番組の、「Seasarの中の中」&lt;br&gt;
というAOPの仕組み javaassistの方が興味あったのでそっち行ってましたー♪いやー楽しかったー♪&lt;br&gt;
&lt;br&gt;
( ´ー｀)y-~~そして明日は、(今日は)java勉強会です。&lt;br&gt;
http://www.dalf.jp/wiki/java/doku.php&lt;br&gt;
http://www.dalf.jp/wiki/java/doku.php?id=dalf-java-type1-00062100-029&lt;br&gt;
↑&lt;br&gt;
とりあえずこんな感じで作っていて、&lt;br&gt;
同じ画面を、いろんなフレームワークで作るとどうなるの？どう違うの？&lt;br&gt;
っていうのをやっています。&lt;br&gt;
&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/155760.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>sqlcmdについてメモ</title><link>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148241.aspx</link><pubDate>Thu, 10 Jul 2008 00:27:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148241.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/148241.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148241.aspx#Feedback</comments><slash:comments>103</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/148241.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/148241.aspx</trackback:ping><description>&lt;P&gt;sqlserverのコマンドラインツールも忘れないうちにｃ⌒っ;;・∀・)φ&lt;BR&gt;sqlcmd -Uuserid -Ppassword -Sservername\instance&lt;BR&gt;で入れます&lt;BR&gt;-oC:\sqlLog.log&lt;BR&gt;に出してtailすると楽&lt;BR&gt;&lt;A href="http://www.vector.co.jp/soft/winnt/util/se241763.html"&gt;http://www.vector.co.jp/soft/winnt/util/se241763.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;-e&lt;BR&gt;で、echo inputすると,自分が実行したsqlもログに出力されるようになるから&lt;BR&gt;更にあとで楽になる&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;DBをuse ○○で変更後&lt;BR&gt;select * from sys.tables&amp;nbsp; &lt;BR&gt;でテーブル名の一覧が表示される&lt;/P&gt;
&lt;P&gt;列の情報が知りたければ下記を実行する&lt;/P&gt;
&lt;P&gt;指定されたテーブルの各列のデータ型を知るにはどのようにすればよいですか。&lt;BR&gt;次のクエリの &amp;lt;database_name&amp;gt; と &amp;lt;schema_name.table_name&amp;gt; を有効な名前に置き換えてから、クエリを実行します。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;コードのコピー&lt;BR&gt;USE &amp;lt;database_name&amp;gt;;&lt;BR&gt;GO&lt;BR&gt;SELECT c.name AS column_name&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,c.column_id&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,SCHEMA_NAME(t.schema_id) AS type_schema&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,t.name AS type_name&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,t.is_user_defined&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,t.is_assembly_type&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,c.max_length&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,c.precision&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,c.scale&lt;BR&gt;FROM sys.columns AS c &lt;BR&gt;JOIN sys.types AS t ON c.user_type_id=t.user_type_id&lt;BR&gt;WHERE c.object_id = OBJECT_ID('&amp;lt;schema_name.table_name&amp;gt;')&lt;BR&gt;ORDER BY c.column_id;&lt;BR&gt;GO&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms345522.aspx#_FAQ7"&gt;http://msdn.microsoft.com/ja-jp/library/ms345522.aspx#_FAQ7&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;sqlcmdユーティリティは&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms162773.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/ms162773.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/148241.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>oracleのsqlplusについて</title><link>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148240.aspx</link><pubDate>Thu, 10 Jul 2008 00:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148240.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/148240.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148240.aspx#Feedback</comments><slash:comments>66</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/148240.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/148240.aspx</trackback:ping><description>&lt;P&gt;忘れないうちに、資料を無くさないうちにｃ⌒っ;;・∀・)φ&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;●テキスト表示(ed)&lt;BR&gt;直前に発行したsqlをテキストに表示させる&lt;BR&gt;このsqlを編集して、テキストを保存して閉じるとsqlPlus上に&lt;BR&gt;編集したsqlが表示される&lt;BR&gt;その後,[/]を入力して実行可能&lt;/P&gt;
&lt;P&gt;(alt+F+Xでテキストを閉じる癖をつけること&lt;BR&gt;(デフォルトがメモ帳なので、秀丸等でやろう&lt;/P&gt;
&lt;P&gt;●sqlを実行するには&lt;BR&gt;同一行(最終行)に、;を入力で実行&lt;BR&gt;ちなみに記載した後に改行をした場合は、/を入力で実行&lt;BR&gt;;は行が終了したことを、/はすべて終了したことを表すって事ね&lt;/P&gt;
&lt;P&gt;●列名を表示させるには&lt;BR&gt;sqlPlus上では、&lt;BR&gt;DESC テーブル名　でテーブル構造が表示だってさ&lt;/P&gt;
&lt;P&gt;●テーブル一覧を表示には&lt;BR&gt;select tname from tab where tabtype='TABLE'で&lt;BR&gt;その環境のテーブルすべて&lt;/P&gt;
&lt;P&gt;●表示する行の最大値を変更&lt;BR&gt;何もしないと、列名を表示するときに列が10項目以上あると&lt;BR&gt;10行ごとにヘッダー行が表示される&lt;BR&gt;その設定を変えることが出来る&lt;BR&gt;set pagesize 行数(num)&lt;/P&gt;
&lt;P&gt;●表示する列の文字数を変更&lt;BR&gt;改行される位置を帰る&lt;BR&gt;set linesize 文字数&lt;/P&gt;
&lt;P&gt;●ログイン変更&lt;BR&gt;一度ログインした後に別環境にログインするには&lt;BR&gt;CONN ユーザ名/パスワード@ホスト文字列&lt;BR&gt;ちなみに、sqlplusを起動したときのログイン画面のユーザ名の項目に&lt;BR&gt;ユーザ名/パスワード@ホスト文字列と入力するだけでもログイン可能&lt;/P&gt;
&lt;P&gt;●直前の結果をテキストに落とす&lt;BR&gt;sqlplusで作業した内容をテキストに落とす&lt;BR&gt;SPOOL C:\ファイルパス\ファイル名.TXT&lt;BR&gt;R&lt;BR&gt;・・・&lt;BR&gt;作業・・・・&lt;BR&gt;・・・&lt;BR&gt;SPOOL OFF&lt;/P&gt;
&lt;P&gt;●PL/SQLのコンパイル&lt;BR&gt;はできるんだけどエラーメッセージがわかりづらいので&lt;BR&gt;オブジェクトブラウザでやるほうが良いとの事&lt;/P&gt;
&lt;P&gt;●メッセージ出力&lt;BR&gt;PL/SQLをsqlPlusから実行した場合、プログラム上から&lt;BR&gt;メッセージ出力(DBMSのoutputね)したものを&lt;BR&gt;sqlplusに表示する場合は、「SET SERVEROUTPUT ON]&lt;BR&gt;を実行しておくと表示されるようになる&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/148240.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>S2JDBC_IterationCallBackのメモ</title><link>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148239.aspx</link><pubDate>Thu, 10 Jul 2008 00:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148239.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/148239.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/07/10/148239.aspx#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/148239.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/148239.aspx</trackback:ping><description>&lt;P&gt;S2JDBCのtutorialソースを読んでいて、自分で追加してテストした内容&lt;BR&gt;&lt;A href="http://s2container.seasar.org/2.4/ja/s2jdbc_manager_auto.html"&gt;http://s2container.seasar.org/2.4/ja/s2jdbc_manager_auto.html&lt;/A&gt;#イテレーションによる検索&lt;BR&gt;tutorialは2.4.25&lt;BR&gt;&lt;A href="http://s2container.seasar.org/download/2008-04-18/S2JDBC-Tutorial-2.4.25.zip"&gt;http://s2container.seasar.org/download/2008-04-18/S2JDBC-Tutorial-2.4.25.zip&lt;/A&gt;&lt;BR&gt;( &amp;#180;ー｀)y-~~んー、普通ならばListでデータを全部受け取って、for のloopなりでまわせば良いけど&lt;BR&gt;メモリの関係とかで一件ずつ行いたい場合はどうなるんだ？ってことでjavadocみたりしながらやってみた&lt;BR&gt;/*&lt;BR&gt;&amp;nbsp;* Copyright 2004-2008 the Seasar Foundation and the Others.&lt;BR&gt;&amp;nbsp;*&lt;BR&gt;&amp;nbsp;* Licensed under the Apache License, Version 2.0 (the "License");&lt;BR&gt;&amp;nbsp;* you may not use this file except in compliance with the License.&lt;BR&gt;&amp;nbsp;* You may obtain a copy of the License at&lt;BR&gt;&amp;nbsp;*&lt;BR&gt;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://www.apache.org/licenses/LICENSE-2.0"&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/A&gt;&lt;BR&gt;&amp;nbsp;*&lt;BR&gt;&amp;nbsp;* Unless required by applicable law or agreed to in writing, software&lt;BR&gt;&amp;nbsp;* distributed under the License is distributed on an "AS IS" BASIS,&lt;BR&gt;&amp;nbsp;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,&lt;BR&gt;&amp;nbsp;* either express or implied. See the License for the specific language&lt;BR&gt;&amp;nbsp;* governing permissions and limitations under the License.&lt;BR&gt;&amp;nbsp;*/&lt;BR&gt;package examples.entity;&lt;/P&gt;
&lt;P&gt;import org.seasar.extension.jdbc.IterationCallback;&lt;BR&gt;import org.seasar.extension.jdbc.IterationContext;&lt;BR&gt;import org.seasar.extension.jdbc.JdbcManager;&lt;BR&gt;import org.seasar.extension.unit.S2TestCase;&lt;/P&gt;
&lt;P&gt;/**&lt;BR&gt;&amp;nbsp;* @author koichik&lt;BR&gt;&amp;nbsp;*/&lt;BR&gt;public class IterateTest extends S2TestCase {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private JdbcManager jdbcManager;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void setUp() throws Exception {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; include("app.dicon");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;//******************ここから追加したもの******************&lt;BR&gt;&amp;nbsp; public void testIterateMonomaneTx() throws Exception {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jdbcManager.from(Employee.class).iterate(new EmployeeHandler());&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;//こっちが受け取るほう&lt;BR&gt;import org.seasar.extension.jdbc.IterationCallback;&lt;BR&gt;import org.seasar.extension.jdbc.IterationContext;&lt;BR&gt;import org.seasar.extension.jdbc.JdbcManager;&lt;BR&gt;import org.seasar.framework.container.SingletonS2Container;&lt;/P&gt;
&lt;P&gt;public class EmployeeHandler implements IterationCallback&amp;lt;Employee, Employee&amp;gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ここが、通常のsql実行ならばloopでぐるぐる回す所に該当し、1件ずつ通知される&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Employee iterate(Employee entity, IterationContext context) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(entity.name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; otherSqlExecute(entity);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return entity;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void otherSqlExecute(Employee entity) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JdbcManager jdbcmanager = SingletonS2Container.getComponent(JdbcManager.class);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Department d = jdbcmanager.from(Department.class)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .where("id = ?", entity.departmentId).getSingleResult();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(d.name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;( &amp;#180;ー｀)y-~~テストで実行してみて確かに動作することはするんだけども&lt;/P&gt;
&lt;P&gt;　ちょっと設計として正しいのか自信が無かったりするので後で&lt;/P&gt;
&lt;P&gt;IterationCallBackという考え方について調べてみようっと&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/148239.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あはは。ahaha@wankuma.com</dc:creator><title>プログラミングが恋しくて・・・</title><link>http://blogs.wankuma.com/ahaha/archive/2008/04/15/133129.aspx</link><pubDate>Tue, 15 Apr 2008 00:27:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/04/15/133129.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/133129.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/04/15/133129.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/133129.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/133129.aspx</trackback:ping><description>&lt;P&gt;この一年の間に、実質２ヶ月(３ヶ月?)くらいしか仕事上でプログラミングをすることが出来ずにちょっと欲求不満。&lt;/P&gt;
&lt;P&gt;んな割にはお客さん先の業務分析とかデータの調査とか設計とか仕様の打ち合わせとかetc・・・&lt;/P&gt;
&lt;P&gt;ってのに駆けずり回っていてどうにも家での自主勉強も取る気になれないくらいに疲れてしまっていたりするんですよね。&lt;/P&gt;
&lt;P&gt;近くの席に座っている個人事業主の人は「プログラミングが専門だから」という一言と共に&lt;/P&gt;
&lt;P&gt;黙々と作ってたり調べ物したりして勉強をしているのを横目に良いなぁなんていってます。&lt;/P&gt;
&lt;P&gt;(いや、それはそれでとっても大事なのはわかりますけど)&lt;/P&gt;
&lt;P&gt;あぁ・・・&lt;/P&gt;
&lt;P&gt;とまぁ愚痴を言ってても仕方ない。今できることをこつこつと楽に出来るような仕掛けを作っていって、&lt;/P&gt;
&lt;P&gt;少しでもプログラミングをする時間を捻出しないとね。&lt;/P&gt;
&lt;P&gt;ってなわけで、最近excelと戯れる日々が続いているのでこんなものを自作して楽してます。&lt;/P&gt;
&lt;P&gt;excelのVBAマクロで記述して、ショートカットキーで呼び出せるようにしておくと色々便利♪&lt;/P&gt;
&lt;P&gt;しかし・・・Excel上で擬似コードを書くことを求められてもなぁ・・・それよりは実際に作ってしまうほうが&lt;/P&gt;
&lt;P&gt;楽なんだけどなぁ？&lt;/P&gt;
&lt;P&gt;・作ったもの&lt;BR&gt;Excelで選択セルに対して&lt;BR&gt;　１　結合/非結合を切り替える&lt;BR&gt;　2　フォントの色を変える&lt;BR&gt;　3　背景色を変える&lt;BR&gt;　4　セル内の配置を変える　（&amp;#215; ２）&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Public Sub mergeCells()&lt;BR&gt;' 選択セルの結合・非結合の変更&lt;BR&gt;If Selection.mergeCells = True Then&lt;BR&gt;　Selection.mergeCells = False&lt;BR&gt;Else&lt;BR&gt;　Selection.mergeCells = True&lt;BR&gt;End If&lt;/P&gt;
&lt;P&gt;End Sub&lt;/P&gt;
&lt;P&gt;Public Sub changeFontColor()&lt;BR&gt;' 選択セルの色を変える&lt;BR&gt;' 色はF2で表示されるオブジェクトブラウザで&lt;BR&gt;' 定義されている色定数ColorConstantsに対応&lt;BR&gt;' これ以上やる場合はColorIndexを使う&lt;BR&gt;If Selection.Font.Color = vbRed Then&lt;BR&gt;　Selection.Font.Color = vbBlack&lt;BR&gt;ElseIf Selection.Font.Color = vbBlack Then&lt;BR&gt;　Selection.Font.Color = vbBlue&lt;BR&gt;ElseIf Selection.Font.Color = vbBlue Then&lt;BR&gt;　'Selection.Font.Color = vbCyan&lt;BR&gt;'ElseIf Selection.Font.Color = vbCyan Then&lt;BR&gt;'Selection.Font.Color = vbGreen&lt;BR&gt;' ElseIf Selection.Font.Color = vbGreen Then&lt;BR&gt;'Selection.Font.Color = vbMagenta&lt;BR&gt;' ElseIf Selection.Font.Color = vbMagenta Then&lt;BR&gt;'Selection.Font.Color = vbYellow&lt;BR&gt;' ElseIf Selection.Font.Color = vbYellow Then&lt;BR&gt;&amp;nbsp; Selection.Font.Color = vbRed&lt;BR&gt;Else&lt;BR&gt;　Selection.Font.Color = vbBlack&lt;BR&gt;End If&lt;BR&gt;End Sub&lt;/P&gt;
&lt;P&gt;Public Sub changeInteriorColor()&lt;BR&gt;' 選択セルの背景色を変える&lt;BR&gt;' 色はF2で表示されるオブジェクトブラウザで&lt;BR&gt;' 定義されている色定数ColorConstantsに対応&lt;BR&gt;' これ以上やる場合はColorIndexを使う&lt;BR&gt;If Selection.Interior.Color = vbRed Then&lt;BR&gt;&amp;nbsp; &amp;nbsp;Selection.Interior.Color = vbBlack&lt;BR&gt;ElseIf Selection.Interior.Color = vbBlack Then&lt;BR&gt;&amp;nbsp; &amp;nbsp;Selection.Interior.Color = vbBlue&lt;BR&gt;ElseIf Selection.Interior.Color = vbBlue Then&lt;BR&gt;' &amp;nbsp;Selection.interior.Color = vbCyan&lt;BR&gt;' ElseIf Selection.interior.Color = vbCyan Then&lt;BR&gt;' &amp;nbsp;Selection.interior.Color = vbGreen&lt;BR&gt;' ElseIf Selection.interior.Color = vbGreen Then&lt;BR&gt;' &amp;nbsp;Selection.interior.Color = vbMagenta&lt;BR&gt;' ElseIf Selection.interior.Color = vbMagenta Then&lt;BR&gt;&amp;nbsp; &amp;nbsp;Selection.Interior.Color = vbYellow&lt;BR&gt;ElseIf Selection.Interior.Color = vbYellow Then&lt;BR&gt;&amp;nbsp;Selection.Interior.Color = vbRed&lt;BR&gt;Else&lt;BR&gt;&amp;nbsp;&amp;nbsp;Selection.Interior.Color = vbBlack&lt;BR&gt;End If&lt;/P&gt;
&lt;P&gt;End Sub&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Public Sub changeHorizontalAlignment()&lt;BR&gt;'セル内での配置を調整&lt;BR&gt;With Selection&lt;BR&gt;&amp;nbsp;&amp;nbsp;If .HorizontalAlignment = xlCenter Then&lt;BR&gt;.HorizontalAlignment = xlRight&lt;BR&gt;&amp;nbsp;&amp;nbsp;ElseIf .HorizontalAlignment = xlRight Then&lt;BR&gt;.HorizontalAlignment = xlLeft&lt;BR&gt;&amp;nbsp;&amp;nbsp;ElseIf .HorizontalAlignment = xlLeft Then&lt;BR&gt;.HorizontalAlignment = xlCenter&lt;BR&gt;&amp;nbsp;&amp;nbsp;End If&lt;BR&gt;End With&lt;BR&gt;End Sub&lt;/P&gt;
&lt;P&gt;Public Sub changeVerticalAlignment()&lt;BR&gt;'セル内での配置を調整&lt;BR&gt;With Selection&lt;BR&gt;&amp;nbsp; &amp;nbsp;If .VerticalAlignment = xlBottom Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .VerticalAlignment = xlTop&lt;BR&gt;&amp;nbsp; &amp;nbsp;ElseIf .VerticalAlignment = xlTop Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .VerticalAlignment = xlCenter&lt;BR&gt;&amp;nbsp; &amp;nbsp;ElseIf .VerticalAlignment = xlCenter Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .VerticalAlignment = xlBottom&lt;BR&gt;&amp;nbsp; &amp;nbsp;End If&lt;BR&gt;&amp;nbsp;&lt;BR&gt;End With&lt;BR&gt;End Sub&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;しかし、あれだ。クラサバでの開発と、運用保守にひたすら&lt;/P&gt;
&lt;P&gt;関わってきただけあって、WebのHTMLとかCSSとか全然わかってねーや&lt;/P&gt;
&lt;P&gt;これから勉強していきたいなぁ時間つくろっとー♪&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/133129.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Blog Author</dc:creator><title>参加表明♪</title><link>http://blogs.wankuma.com/ahaha/archive/2008/03/07/126672.aspx</link><pubDate>Fri, 07 Mar 2008 02:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/ahaha/archive/2008/03/07/126672.aspx</guid><wfw:comment>http://blogs.wankuma.com/ahaha/comments/126672.aspx</wfw:comment><comments>http://blogs.wankuma.com/ahaha/archive/2008/03/07/126672.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ahaha/comments/commentRss/126672.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ahaha/services/trackbacks/126672.aspx</trackback:ping><description>&lt;P&gt;初めまして、っと。&lt;/P&gt;
&lt;P&gt;2007/07と08月頃にオフラインの勉強会で参加させていただいていたあはは。と申します。&lt;/P&gt;
&lt;P&gt;当時に「コミュニティに入りたい♪」と手を挙げていたのに何の因果か忙しい現場に入って設計・開発・テストとやっているうちに&lt;/P&gt;
&lt;P&gt;気がつけばもう3月・・・&lt;/P&gt;
&lt;P&gt;( &amp;#180;ー｀)y-~~今年中には動き出さないとなってな事で初投稿です。どうぞよろしくお願いします。&lt;/P&gt;
&lt;P&gt;[memo][本]&lt;/P&gt;
&lt;P&gt;満員電車がなくなる日&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.amazon.co.jp/o/ASIN/4827550298/503-7490896-3731926?SubscriptionId=0C760DFJTH2FN8YG3CR2"&gt;http://www.amazon.co.jp/o/ASIN/4827550298/503-7490896-3731926?SubscriptionId=0C760DFJTH2FN8YG3CR2&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;最寄り駅まで自転車で10分の立地とはいえ、その後電車では40分くらいずっと座っていける場所に住んでいる身としては&lt;/P&gt;
&lt;P&gt;痛感することは少ないんですが、良くまぁみんな耐えてますよねww&lt;/P&gt;
&lt;P&gt;( &amp;#180;ー｀)y-~~そういう「もうどうしようもないよ」ってあきらめがちなところにシステム的に・法律・技術的に解決策を提示・実行する&lt;/P&gt;
&lt;P&gt;　　っていう人間になりたいです。まだまだひよっこなので1企業の1基幹業務とかそういう単位でしか物事に関われないけれども、&lt;/P&gt;
&lt;P&gt;　将来は上記にあるくらい大きな、誰もが思ってもあきらめてたようなことをやってみたいですね。&lt;/P&gt;
&lt;P&gt;　　&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ahaha/aggbug/126672.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>