TERASOLUNA Server Framework for Java (5.x)のTutorialをやってみる 〜3.5. データベースアクセスを伴うインフラストラクチャ層の作成〜

今日はこれ*1

まずは、Mybatis3。淡々と。エラーなく、終了。

MyBatis3を使用する場合、RepositoryImplはRepositoryインタフェース(Mapperインタフェース)から自動生成される。 そのため、TodoRepositoryImplの作成は不要である。

ふむふむ。iBatisの時は確か違ったな。

情報: date:2016-05-04 11:29:39 thread:http-listener-1(3) X-Track:8473675e93e84e5f8712f736102bbe33 level:DEBUG logger:jdbc.sqltiming message: sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
5. SELECT
todo_id,
todo_title,
finished,
created_at
FROM
todo {executed in 0 sec}

ふむふむ。こういうログは重要。バインド変数も一緒に出ると尚良し。ついでにSQLインジェクション対応とかやっててくれると更に良し。

感想はこんなところで。


次にSpring Data JPA
エラー二つ。

まず一つ目。

重大: Exception during lifecycle processing
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'realDataSource' defined in class path resource [META-INF/spring/todo-env.xml]: Could not resolve placeholder 'database.username' in string value "${database.username}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'database.username' in string value "${database.username}"

todo-infra.propertiesを修正するときに、うっかり以下を削除した模様。

database.username=sa

二つ目。

重大: Exception during lifecycle processing
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'todoRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property update found for type Todo!

よく見ると、Serviceはコピーではダメで手順には
以下の部分をsaveに変える必要があった模様。

todoRepository.create(todo);
todoRepository.update(todo);

ソース上の以下の記載に気づかなかったのが原因汗

todoRepository.update(todo);
/* REMOVE THIS LINE IF YOU USE JPA
todoRepository.save(todo); // (11)
REMOVE THIS LINE IF YOU USE JPA */

まとめ。
育ってきた環境からか、Spring Data JPAより、ベタ書きSQLのMybatisの方がやっぱり好きだなぁ。
ヒント句とか書きたいし。(まぁ、いざとなったら、書けるのだろうけども)