プロキシ環境でpipコマンドを使う@Mac
【JJUGナイトセミナー Javaクラウドプラットフォーム大特集】のまとめ
イベントの存在を知った時点でキャンセル待ち100名超えだったので、残念ながら参加できませんでしたが、さっそく資料が公開されていたので、リンクをまとめてみました。 各社のエバンジェリストが一同に会していて、中々豪華なイベントですね。
togetter
AWS版のSpringBoot?「AWS Elastic Beanstalk」と「AWS Lambda」のご紹介/株式会社ソラコム 片山さん
IBM Bluemix(PaaS)で、手軽なJavaウェブアプリケーションの開発環境構築/日本アイ・ビー・エム株式会社 宋さん
スライド
まだ
Introduction to Cloud Foundry/Pivotal 槙さん
Google Cloud Platformで作るJava PaaS環境/大日本印刷株式会社 田丸さん
Heroku Javaで12-Factor App/Salesforce 岡本さん
heroku localコマンドでローカルで動作するのは知らなかった。あとで試してみます。
スライド
動画
Microsoft Azure/Microsoft 寺田さん
Oracle Java Cloud Service
OpenShiftでかんたんDocker PaaS/Red Hat 木村さん
Mavenのテストでデバッグする方法
個々のJUnitの実行時には発生せず、Mavenテストでプロジェクト全体のJUnitをまとめて実行した場合のみ再現するエラーがあった。 そこで、MavenテストをEclipseからデバッグ実行し、Javaファイルにブレークポイントを張ったが、止まってくれない。。。
Mavenテストをデバッグするには、以下の方法が必要らしい。
1. Maven buildからtestを実行
mvn test -Dmaven.surefire.debug
2. リモートJavaアプリケーションで上記のプロセスにリモートデバッグ。
接続先は、localhost:5005。
3. ブレークポイントを張る
1,2ができた状態でJavaファイルにブレークポイントを張るとちゃんと止まってくれる。
参考
mvn testした時だってEclipseでデバッグしたい!! http://cynipe.hateblo.jp/entry/20090226/1235630326
MyBatis-Springを試してみました。
MyBatis単独の場合と違ってSpring側でコネクションを管理してくれるので、直接SqlSessionを使って管理する必要がありません。
アプリケーション開発者側では、SpringがインジェクションしてくれたMapperインターフェースを通してDB操作を行うだけで完結できます。
トランザクションはMyBatisに限らずですが、@Transactionalアノテーションをメソッドに付与することで、Spring側で管理してくれます。
参考
サンプルコード
勉強メモとして作ったサンプルコード。
https://github.com/momotaro-lucy/mybatis_spring_sample
公式サイト
Spring連携版についてもMyBatisと同様に公式サイトが用意されています。 http://mybatis.github.io/spring/ja/getting-started.html
メモ
セットアップ
開発するMavenプロジェクトに、MyBatis-Springへの依存関係を付与します。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency>
MyBatis-SpringはもちろんMyBatisやSpringフレームワーク自体に依存関係を持っていますが、Maven上の指定がprovidedとなっているため、 Eclipse経由などでJavaアプリケーションとしてそのまま実行する場合は、MyBatisやSpringフレームワーク自体にも依存関係を付与する必要があります。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-infrastructure</artifactId> <version>3.0.4.RELEASE</version> </dependency>
メモ
ApplicationContext.xmlを作成します。
Springの設定ファイル ApplicationContext.xmlにデータソース・SqlSessionFactory・Mapperの設定を記述します。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- データソースの設定 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver"/> <property name="url" value="jdbc:postgresql://localhost:5432/mybatis_spring_sample" /> <property name="username" value="mybatis_sample_user" /> <property name="password" value="mybatis_sample_password" /> </bean> <!-- SqlSessionFactoryの設定 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" > <property name="dataSource" ref="dataSource"/> </bean> <!-- Mapperインターフェースの登録 --> <bean id="SampleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="jp.momotaro_lucy.sample.mybatis_spring.mapper.SampleMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <context:annotation-config /> <context:component-scan base-package="jp.momotaro_lucy.sample.mybatis_spring" /> </beans>
Mapperインターフェースが複数存在する場合は、パッケージ単位での指定も可能です。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd"> <!-- データソースの設定 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver"/> <property name="url" value="jdbc:postgresql://localhost:5432/mybatis_spring_sample" /> <property name="username" value="imart" /> <property name="password" value="imart" /> </bean> <!-- SqlSessionFactoryの設定 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" > <property name="dataSource" ref="dataSource"/> </bean> <!-- Mapperインターフェースが配置されたパッケージの設定 --> <mybatis:scan base-package="jp.momotaro_lucy.sample.mybatis_spring.mapper" /> <context:annotation-config /> <context:component-scan base-package="jp.momotaro_lucy.sample.mybatis_spring" /> </beans>
Mapperインターフェースを作成します。
ApplicationContext.xmlで指定したMapperクラスを作成します。
https://mybatis.github.io/spring/ja/mappers.html
public interface SampleMapper { @Insert("insert into mybatis_sample_table (item_cd, item_name, item_comment) values(#{itemCd}, #{itemName}, #{itemComment})") public void insert(SampleModel model); @Select("select item_cd as itemCd, item_name as itemName, item_comment as itemComment from mybatis_sample_table where item_cd = #{itemCd}") public SampleModel select(String itemCd); @Update("update mybatis_sample_table set item_name = #{itemName}, item_comment = #{itemComment} where item_cd = #{itemCd}") public void update(SampleModel model); }
ORマッパーの呼び出し側の実装を作成します。
SpringがインジェクションしたMapperインターフェースを操作するだけでSQLが実行されます。 @Transactionalのアテーションをメソッドに付与することで、実行中のトランザクションがない場合はSpringフレームワーク側で勝手にトランザクションを張ってくれます。
https://mybatis.github.io/spring/ja/transactions.html
@Service public class SampleExecuter { @Autowired SampleMapper mapper; public static void main(String args[]){ ConfigurableApplicationContext appContext = new FileSystemXmlApplicationContext("src/main/resources/applicationContext.xml"); SampleExecuter executer = appContext.getBean(SampleExecuter.class); executer.execute(); appContext.close(); } @Transactional public void execute(){ // 登録 SampleModel model = new SampleModel(); model.setItemCd(UUID.randomUUID().toString()); model.setItemName(UUID.randomUUID().toString()); model.setItemComment(UUID.randomUUID().toString()); mapper.insert(model); System.out.println("Insert Data"); System.out.println("itemCd : " + model.getItemCd()); System.out.println("itemName : " + model.getItemName()); System.out.println("itemComment : " + model.getItemComment()); System.out.println(""); // 更新 model.setItemName(UUID.randomUUID().toString()); model.setItemComment(UUID.randomUUID().toString()); mapper.update(model); System.out.println("Update Data"); System.out.println("itemCd : " + model.getItemCd()); System.out.println("itemName : " + model.getItemName()); System.out.println("itemComment : " + model.getItemComment()); System.out.println(""); SampleModel result2 = mapper.select(model.getItemCd()); System.out.println("Select Data2"); System.out.println("itemCd : " + result2.getItemCd()); System.out.println("itemName : " + result2.getItemName()); System.out.println("itemComment : " + result2.getItemComment()); } }
MyBatis3.xを試してみました。
MyBatis3.xを試してみました。
仕事でSpring MVC + MyBatis 3.xを使う必要が出てきて、久しぶりに触ったので、自分用にサンプルとメモを残します。
以前はSpringとMyBatis 2.xのフレームワークだったのですが、数年が経ってバージョンアップしたようです。
ちなみに、今回はSpringによるラッパーフレームワークは使わず、MyBatis 3.xのみで動かしてみました。
サンプルコード
勉強メモとして作ったサンプルコード。
https://github.com/momotaro-lucy/mybatis_sample
参考
公式サイト
MyBatisの公式サイトが素直にわかりやすいのですが、チュートリアル的なものが弱く、そのまま動かして試してみるには辛かったです。
https://mybatis.github.io/mybatis-3/ja/getting-started.html
書籍
MyBatisを専門に扱った日本語書籍はないと思いますが、こちらのSpringの入門本にMyBatis 2.xと3.xの両方が解説されており、わかりやすいです。
Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ
- 作者: 長谷川裕一,大野渉,土岐孝平
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/02
- メディア: 大型本
- 購入: 8人 クリック: 115回
- この商品を含むブログ (14件) を見る
メモ
MyBatisは、SQLを記述するタイプのORマッパーで、 テーブルとオブジェクトのマッピングというより、SQLとオブジェクトとのマッピングを作っていくイメージ。
-
SQLとやり取りさせるエンティティクラスを定義します。カラム名のフィールドとセッター・ゲッターを定義したただのBeanで問題なし。
1で作成するSQLに記述するバインドフィールドとフィールド名が一致する必要あり。
-
Mapper XML ファイルには、SQLとマッピングするエンティティクラスの指定を行う。
注意点としては、SQLから取得できるカラム名がエンティティクラスのフィールド名と一致しないと自動でバインドしてもらえない。アンダーバーでつないでいるとカラム名とキャメルケースのフィールド名を自動でバインドしてくれなかった。
Mapper インターフェイスに定義したSQLに対応するメソッドを定義する。
XMLでパラメータ・戻り値の型定義を行っていますが、こちらのインターフェースで重複して定義が必要みたい?