SlideShare una empresa de Scribd logo
1 de 50
スキトラ
Spring + MyBatis
sh-ogawa
はじめに
Springフレームワークを用いて、Webアプリケーション開発を行えるようにな
ることを目的とする。
また、Springとセットで使われることの多いORMである、MyBatisも扱えるよう
になることを目的とする。
目次
・What’s Spring framework
・Springのコア機能
・What’s MyBatis
・SpringとMyBatisの連携
・Springの実装パターン
・Javaでバッチを実装する際の注意事項
What’s Spring framework
・Webアプリケーションフレームワークの実質グローバルスタンダード
・DI
・AOP
・アノテーションのパワフルなサポート
・周辺プロダクトとの豊富な連携・サポート
Springのコア機能
Springを使う上では、以下の理解は必須です。
・DI
・AOP
DI
巷では、「依存性の注入」と云われる。
意味がわからないため、「オブジェクト」を注入すると考えればOK。
例:
class Sample {
@Autowired
BizObj diObj; ← これの具象クラスのインスタンスを外部から注入すること
}
BizObjは、interface
DI
メリット
・共通機能など、使用する機能が出来上がってなくても実装が進められる
・ライセンスが絡むものなど、環境によってスタブに置き換えできる
勘違いしてほしくないのは、
・何でもかんでもDIすれば良い、というものではない
・何でもかんでもInterfaceに実装すれば良い、というものではない
DIコンテナ
DIする側のオブジェクトのインスタンスを生成してくれる機能。
Spring最大の特徴の1つ。
例:
class Sample {
@Autowired
BizObj diObj;
}
@Service
class BizObjImp implements BizObj{
@Autowired
BizDao bizDao;
}
このクラスのインスタンス生成を行い、
必要なインスタンスも生成してくれる
AOP
アスペクト指向プログラミングと云われ、以下の特徴を持つ。
・処理と処理の間に、別の処理を差し込める
・差し込む処理は、条件指定(pointcut)できる
例:ログ出力(メソッドの開始と終了を書く)
AOP未使用
メソッドA
メソッドB
各メソッドの最初と最
後に、ログ出力メソッド
を記述する
AOP
アスペクト指向プログラミングと云われ、以下の特徴を持つ。
・処理と処理の間に、別の処理を差し込める
・差し込む処理は、条件指定(pointcut)できる
例:ログ出力(メソッドの開始と終了を書く)
AOP未使用 AOP使用
メソッドA
メソッドB
各メソッドの最初と最
後に、ログ出力メソッド
を記述する
メソッドA
メソッドB
AOPメソッド 処理する共通機能を書
いておき、各メソッド間
に差し込んで実行する
特定のメソッドに対してのみ、
処理を差し込むことが可能
AOP
Springのトランザクション管理も、AOPを利用したものである。
このため、プログラマは以下のメリットを享受できる。
・処理結果に応じて、commit/rollbackを自動実行
・トランザクションのネストは明示する必要があるため、事故防止に繫がる
AOP
Springのトランザクション管理も、AOPを利用したものである。
このため、プログラマは以下のメリットを享受できる。
・処理結果に応じて、commit/rollbackを自動実行
・トランザクションのネストは明示する必要があるため、事故防止に繫がる
PGレベルでのトランザクションを管理しなくて良い
DI×AOPコンテナ
Springは、ここまで述べてきたように、DIとAOPによって支えられている。
プログラマが意識することはあまりないが、これらを実現する方法として、
以下があることを覚えておく必要がある。(エンジニア自身の生存戦略に必要)
・XMLベース
・アノテーションベース
XMLベース
DI、AOPの設定などを全てXML(applicationContext.xml)に書いていく方法で、
最もベーシックなやり方。以下の特徴がある。
・XMLに全て集約されるため、管理する側には見通しが良い
・記述方法に慣れが必要なため、誰でも書ける訳ではない
・重厚長大になって大抵ツライ
・この方法が身についていると、デバッグ時にSpringの奥まで見に行ける
・XMLを書く場合の担当者は、Springにある程度精通していることが多い
XMLベース
例:
<bean id=“SampleController" class="jp.sh4.ooga.SampleController">
<property name="SampleService" ref="SampleService" />
</bean>
<bean id="SampleService" class="jp.sh4.ooga.SampleServiceImpl">
<property name="SampleDao" ref="SampleDataDao" />
</bean>
<bean id=“SampleDao" class="jp.sh4.ooga.SampleDao">
<property name="SampleMapper" ref="SampleMapper" />
</bean>
<bean id="SampleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionTemplate" ref="sqlSessionTempRefs" />
<property name="mapperInterface“ value="jp.sh4.ooga.SampleMapper" />
</bean>
XMLベース
例:
<bean id=“SampleController" class="jp.sh4.ooga.SampleController">
<property name="SampleService" ref="SampleService" />
</bean>
<bean id="SampleService" class="jp.sh4.ooga.SampleServiceImpl">
<property name="SampleDao" ref="SampleDataDao" />
</bean>
<bean id=“SampleDao" class="jp.sh4.ooga.SampleDao">
<property name="SampleMapper" ref="SampleMapper" />
</bean>
<bean id="SampleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionTemplate" ref="sqlSessionTempRefs" />
<property name="mapperInterface“ value="jp.sh4.ooga.SampleMapper" />
</bean>
これを機能ごとに一式書かないといけないから、
しんどい
アノテーションベース
DI、AOPの設定をアノテーションを使って記述していく。
読み込みの設定は、XML上に書く必要がある。
以下の特徴がある。
・簡単
・トランザクションなど、よく使うものは提供されている
・コードに直接書くため、管理者側からすると見通しが悪い
・プログラマ自身がアノテーションを指定するため、一意性の担保が難しい
※Springを余り判っていない人が書くことになりかねないため、対策が必要
アノテーションベース
@Controller
public class SampleController{
@Autowired
SampleService sampleService;
}
@Service
public class SampleService{
@Autowired
SampleDao sampleDao;
}
・・・以下略・・・
<XML>
<context:component-scan base-package="jp.sh4.ooga" annotation-config="true" />
おまじない
jp.sh4.ooga配下のアノテーションが付いているクラスが
自動で取り込まれる。(お手軽)
アノテーションベース
@Controller
public class SampleController{
@Autowired
SampleService sampleService;
}
@Service
public class SampleService{
@Autowired
SampleDao sampleDao;
}
・・・以下略・・・
<XML>
<context:component-scan base-package="jp.sh4.ooga" annotation-config="true" />
おまじない
jp.sh4.ooga配下のアノテーションが付いているクラスが
自動で取り込まれる。(お手軽)
手軽だけど、全体見通しが悪く、
プログラマ自身が書くため、
品質がプログラマのレベルに左右される。
アノテーションベース
良く使うアノテーション
@Controller : コントローラクラスに付ける
@Service : ビジネスロジッククラスに付ける
@Repository : データをかき集めるクラスに付ける(ドメインモデルにおいては、「≠DAO」)
@Component : 共通機能群などに付ける(居るの?って感じ)
@Transactional : トランザクション境界に付与(主にServiceクラスに付ける)
@Autowired : DIコンテナを使って外から設定させたいフィールドに付ける
@RequestMapping : HTTPリクエストを受け取る際のパスの設定
@Scope : DIはデフォルトシングルトンのため、問題が起きたときに付ける(prototypeとか)
まとめ(DI×AOPコンテナ)
・DIはオブジェクトを外から設定する
・AOPは機能間に処理を差し込み実行でき、実行対象も制御可能
・DIとAOPにはXMLでの指定方法と、アノテーションでの指定方法がある
・XMLで指定すると全体が見通せるが、量が膨大だと大変
・アノテーションは手軽だが、プログラマのレベルに左右される可能性が高い
・プログラマのレベルにバラつきがある場合、熟練者がXMLで記載すると良い
・プログラマのレベルが総じて高い場合、アノテーションで記載すると良い
まとめ(DI×AOPコンテナ)
・Springで一定以上のレベルに行きたければ、XMLでの記述は必須スキル
・ライト層(とりあえずSpringを使ってみる人) → アノテーション
・ヘビー層 → XML(アノテーションと両方扱えるようになっているはず)
What’s MyBatis
・iBatisの後継
・SQLを自分で書くタイプのORM
・強力な動的SQLのサポート
・SQLの結果への、純粋なオブジェクトマッピングを提供
・2Way-SQLには対応していない
・Springと一緒に使っているプロジェクトが多いため、事例多数
SQLの書き方(1)
<select id=“findUser" resultType="jp.sh4.ooga.UserEntity">
select user_id userId
, user_name userName
from user
where user_id = #{userId}
and invalid_flag = 0
</select>
結果を直接JavaのEntityにマッピングできる
SQLの書き方(2)
<select id=“findUser” resultMap=“UserMap”>
select user_id
, user_name
from user
where user_id = #{userId}
and invalid_flag = 0
</select>
<resultMap id=“UserMap” type=“jp.sh4.ooga.UserEntity” >
<result column=“user_id” property=“userId” jdbcType=“VARCHAR” />
<result column=“ user_name ” property=“ userName ” jdbcType=“VARCHAR” />
・・・省略・・・
</resultMap>
結果をResultMapに入れておき、
UserEntityに必要なものを書くこともできる
Javaとの関連付け
【Java(素のMyBatisを使う場合)】
SqlSession session =
DBConnector.getSqlSessionFactory().openSession(ExecutorType.SIMPLE
, TransactionIsolationLevel.READ_COMMITTED);
UserMapper mapper = session.getMapper(UserMapper.class);
UserEntity user = mapper.findUser(userId);
【Mapper.java ※Interface】
UserEntity findUser(@Param(“userId”) String userId);
【Mapper.xml】
<mapper namespace=“jp.sh4.ooga.UserMapper” >
・・・中略(SQLの書き方の実装が入る)・・・
</mapper>
Mapper.xmlのnamespaceの指定で、
Javaと紐づける。
メソッド名は、XMLとJavaとで一致していれ
ば、自動で紐づく。
SqlSessionを使用して、
自分でトランザクション管理をする
動的SQL
書式は異なるが、XSLTで使える制御構文は、ほぼ使用が可能。
・ifタグ、choose/when/otherwiseタグ、foreachタグなど
<select id=“findUserList" resultType="java.lang.List">
select user_id userId
, user_name userName
from user
where user_id in
<foreach item=“userlist" index="index" collection="userlist“
open="(" separator="," close=")">
( #{userlist.userId} )
</foreach>
</select>
動的SQL
簡単に書けるが、やりすぎるとSQLとして何が出ているか判らなくなる。
そういう場合は、Log4JDBCなどを使用して、
実際に実行されているSQLをログに出力して確認することを、お奨めする。
※PreparedStatementでエスケープしていようとも、生のSQLがログに出る
【参考】
https://blog.ik.am/entries/115
まとめ(MyBatis)
・SQLを書けるため、DBの機能をフル活用(ストアドファンクション呼出など)可能
・作りがシンプルなため、ORMの学習コストは(少)ない
・ほぼ何でもありな、動的SQLの組み立て
・2Way-SQLはサポート外、場合によってはLog4JDBCなど使って確認しよう
まとめ(MyBatis)
・SQLを書けるため、DBの機能をフル活用(ストアドファンクション呼出など)可能
・作りがシンプルなため、ORMの学習コストは(少)ない
・ほぼ何でもありな、動的SQLの組み立て
・2Way-SQLはサポート外、場合によってはLog4JDBCなど使って確認しよう
ぶっちゃけ縛りがないなら、きっとDOMA2の方が良いと思う
この頃は
SpringとMyBatisの連携
SpringとMyBatisを両方使用する場合は、連携するのが常套手段。
連携することにより、以下のメリットが教授できる
・SqlSessionによるトランザクション管理をプログラマがしなくて良い
・DIコンテナによって必要なインスタンスがセットされるため、コード記述量減
(メソッド呼び出しだけでOK)
SpringとMyBatisの連携
<bean id=“SampleController" class="jp.sh4.ooga.SampleController">
<property name="SampleService" ref="SampleService" />
</bean>
<bean id="SampleService" class="jp.sh4.ooga.SampleServiceImpl">
<property name="SampleDao" ref="SampleDataDao" />
</bean>
<bean id=“SampleDao" class="jp.sh4.ooga.SampleDao">
<property name="SampleMapper" ref="SampleMapper" />
</bean>
<bean id="SampleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionTemplate" ref="sqlSessionTempRefs" />
<property name="mapperInterface“ value="jp.sh4.ooga.SampleMapper" />
</bean>
Daoの指定場所で、
Java側のMapperインタフェースを紐づける
XMLとJava側のマッピングは先述のとおり
SpringとMyBatisの連携
<bean id=“SampleMapper” class=“org.mybatis.spring.mapper.MapperFactoryBean”>
<property name=“sqlSessionTemplate” ref=“sqlSessionTemp” />
<property name=“mapperInterface“ value=”jp.sh4.ooga.SampleMapper” />
</bean>
<bean id=“sqlSessionTemp” class=“org.mybatis.spring.SqlSessionTemplate”>
<constructor-arg ref=“mySqlDao” />
</bean>
<bean id=“mySqlDao” class=“org.mybatis.spring.SqlSessionFactoryBean”>
・・・中略・・・
</bean>
SpringとMyBatisの連携
<bean id=“SampleMapper” class=“org.mybatis.spring.mapper.MapperFactoryBean”>
<property name=“sqlSessionTemplate” ref=“sqlSessionTemp” />
<property name=“mapperInterface“ value=”jp.sh4.ooga.SampleMapper” />
</bean>
<bean id=“sqlSessionTemp” class=“org.mybatis.spring.SqlSessionTemplate”>
<constructor-arg ref=“mySqlDaoRefs” />
</bean>
<bean id=“mySqlDao” class=“org.mybatis.spring.SqlSessionFactoryBean”>
・・・中略・・・
</bean>
アプリを作るときは、sqlSessionTemplateを必ず使用する。
書籍などでは、sqlSessionFactoryを使うことしか書かれていないが、これは必須。
sqlSessionFactoryはスレッドアンセーフなため、使うとよくないことが起きる。
まとめ(SpringとMyBatisの連携)
・DAO層の設定で、SpringとMyBatisを連携させる
・sqlSessionTemplateを必ず使う
・トランザクションはSpring管理下に置かれるため楽
・アーキテクチャの採用をする側のエンジニアは、
SpringとMyBatisの両方を理解すること
Springの実装パターン
SpringMVC
おさらい:MVC(Model View Controller)
Controller
Model View
操作
イベント通知
Springの実装パターン
SpringMVCに置き換えると、
Controller
Service View
操作
イベント通知
Springの実装パターン
DIやAOPを入れると、
操作
イベント通知 Dispatch
Servlet
①HTTPリクエスト
Handler
Mapping
②URL
Controller名
Controller
Service
※VIEW名
③
View
Resolver
④
VIEWオブジェクト
View
(jsp)
⑤
レスポンス
※次ページでフォーカスして説明
Springの実装パターン
DIやAOPを入れると、
操作
イベント通知 Dispatch
Servlet
①HTTPリクエスト
Handler
Mapping
②URL
Controller名
Controller
Service
※VIEW名
③
View
Resolver
④
VIEWオブジェクト
View
(jsp)
⑤
レスポンス
※次ページでフォーカスして説明
プログラマの実装範疇
Springの実装パターン
DIやAOPを入れると、
操作
イベント通知 Dispatch
Servlet
①HTTPリクエスト
Handler
Mapping
②URL
Controller名
Controller
Service
※VIEW名
③
View
Resolver
④
VIEWオブジェクト
View
(jsp)
⑤
レスポンス
※次ページでフォーカスして説明
プログラマの実装範疇
トランザクション境界
Springの実装パターン
Spring3から
Controller Service DAO
Mapper
(ORM)
DB
SqlSession
Template
DaoとMapperインタフェースは、
階層が別になっているため、
他のORM(Mapper)への乗り換えが容易だし、
SqlSessionTemplateへの繋ぎを
適材適所で指定可能
Springの実装パターン
Spring2.5以前
Controller Service
DAO
Mapper
(ORM)
DB
SqlSession
Template
Dao本体にSqlSessionTemplateを持たせるため、
ORMの乗り換えが行いづらく、適材適所で選択でき
ない。
また、SqlSessionTemplateをプログラマが容易に
採り出せてしまうため、仕組み的によくない
Springの実装パターン
Spring3以降でドメインを意識した場合
Controller Service
DAO
Mapper
(ORM)
DB
SqlSession
Template
必要なデータをかき集めるために、DAOの前に
Repositoryを置く。
Repositoryにドメインに必要なデータをかき集めるのが、
ドメインを意識した開発では善しとされている
※必要なデータに集約までしても良い
Repository DAO
DAO
Springの実装パターン
Spring3以降でドメインを意識した場合
※ダメな例
Controller Service
DAO
Mapper
(ORM)
DB
SqlSession
Template
この構成だと、Service側でドメインのデータを作り出すこ
とになり、業務ロジックと分離できない。
また、テーブル = ドメインという、
よくある勘違い&ドメイン貧血症で死ぬパターン
であるため、かなり残念なアーキテクチャ
DAO
DAO
まとめ(Springの実装パターン)
・Cotroller、Service、(Repository)、DAO、Mapper、VIEWを実装する
・トランザクション境界はServiceクラスのメソッドに引く
・処理の塊はトランザクション境界の内側に全て入れる
・DAOとMapperを分離した方が、技術の選択肢が広がる
・ドメインを意識する場合は、Repositoryを置いてドメインデータをかき集める
Javaでバッチを実装する際の注意事項
画面系の実装が主なエンジニアが陥るバッチ実装のアンチパターン
・ぐるぐる系でとにかく遅い
・大量データを処理するのに、資源もないのにメモリに全て乗せる
・ログが出ないから、何が行われているのか判らない
ぐるぐる系でとにかく遅い
・全行取得 → データ加工&UPDATEなど実行 → コミット
以下のように変える
・全行取得 → データ加工 → バルククエリでまとめてUPDATEなど実行 → コミット
※全行取得もデータ件数によってはアンチパターンになる
ケースバイケースで他にも色々可能。
JDBCのメソッドやDB製品でどのようなSQLを書けるか知っているだけで、
色々工夫できる。
大量データを処理するのに、
資源もないのにメモリに全て乗せる
100万件のデータを加工、更新しないといけないような場合など、
(テーブル設計がモノを言う場面もあるけど、、)
・1万件ずつ取得・加工・更新・コミットするなど分割
・データベースのパラメータをチューニング (アプリで対策しない)
・どうしても全件やりたい場合は、テキストレベルでローカルに落として
データの加工結果をテンポラリテーブルに登録
→ テンポラリテーブルからまとめて更新
ログが出ないから、
何が行われているのか判らない
ログ出力の指針を方式設計に組み込む。
異常系の方針ばかり書かれるが以下の観点を盛り込むことも重要。
・処理対象の件数
・何の処理を行うか
・何の処理が終わった
・処理対象件数に対して、どれだけ終わったか(後どれだけかかるまで出ると最高)
・処理結果がどうだったのか(正常・異常に依らず出した方が良い)
実装指針
JavaBatchやSpringBatchを使わない場合でも、実装方針としてはコレに倣う。
詳細は以下を参照ください。(これだけで2時間くらい喋れるので資料割愛)
http://www.slideshare.net/agetsuma/batch-
applicationforthejavaplatform?ref=http://n-
agetsuma.hatenablog.com/entry/2013/01/02/133049

Más contenido relacionado

La actualidad más candente

Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
Satoshi Kubo
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
 

La actualidad más candente (20)

並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 

Destacado

Netflix oss season 2 episode 1 - meetup Lightning talks
Netflix oss   season 2 episode 1 - meetup Lightning talksNetflix oss   season 2 episode 1 - meetup Lightning talks
Netflix oss season 2 episode 1 - meetup Lightning talks
Ruslan Meshenberg
 

Destacado (10)

jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 
Netflix Open Source Meetup Season 3 Episode 2
Netflix Open Source Meetup Season 3 Episode 2Netflix Open Source Meetup Season 3 Episode 2
Netflix Open Source Meetup Season 3 Episode 2
 
20140708 - Jeremy Edberg: How Netflix Delivers Software
20140708 - Jeremy Edberg: How Netflix Delivers Software20140708 - Jeremy Edberg: How Netflix Delivers Software
20140708 - Jeremy Edberg: How Netflix Delivers Software
 
Netflix oss season 2 episode 1 - meetup Lightning talks
Netflix oss   season 2 episode 1 - meetup Lightning talksNetflix oss   season 2 episode 1 - meetup Lightning talks
Netflix oss season 2 episode 1 - meetup Lightning talks
 
NetflixOSS Meetup season 3 episode 1
NetflixOSS Meetup season 3 episode 1NetflixOSS Meetup season 3 episode 1
NetflixOSS Meetup season 3 episode 1
 
NetflixOSS season 2 episode 2 - Reactive / Async
NetflixOSS   season 2 episode 2 - Reactive / AsyncNetflixOSS   season 2 episode 2 - Reactive / Async
NetflixOSS season 2 episode 2 - Reactive / Async
 
Netflix oss season 1 episode 3
Netflix oss season 1 episode 3 Netflix oss season 1 episode 3
Netflix oss season 1 episode 3
 
Netflix Open Source Meetup Season 4 Episode 1
Netflix Open Source Meetup Season 4 Episode 1Netflix Open Source Meetup Season 4 Episode 1
Netflix Open Source Meetup Season 4 Episode 1
 
Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2
 
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyoSpring Framework 5.0による Reactive Web Application #JavaDayTokyo
Spring Framework 5.0による Reactive Web Application #JavaDayTokyo
 

Similar a スキトラ Spring + mybatis

業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules
Hiroki Kondo
 

Similar a スキトラ Spring + mybatis (20)

概説 Data API v3
概説 Data API v3概説 Data API v3
概説 Data API v3
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatformJSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
SpringBootの研修本で学んだこと
SpringBootの研修本で学んだことSpringBootの研修本で学んだこと
SpringBootの研修本で学んだこと
 
業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
非SAPの人に贈るSAP on AWS
非SAPの人に贈るSAP on AWS非SAPの人に贈るSAP on AWS
非SAPの人に贈るSAP on AWS
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
 
遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
Spring.project
Spring.projectSpring.project
Spring.project
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 
6製品1サービスの開発にPortfolio for JIRAを使ってみた
6製品1サービスの開発にPortfolio for JIRAを使ってみた6製品1サービスの開発にPortfolio for JIRAを使ってみた
6製品1サービスの開発にPortfolio for JIRAを使ってみた
 
Springを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう
 
OpenWhisk Serverless への期待
OpenWhisk Serverless への期待OpenWhisk Serverless への期待
OpenWhisk Serverless への期待
 
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
 

Más de 小川 昌吾

Más de 小川 昌吾 (20)

Effective flutter
Effective flutterEffective flutter
Effective flutter
 
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
 
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
 
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
 
Lara vue
Lara vueLara vue
Lara vue
 
Atomic design+vue
Atomic design+vueAtomic design+vue
Atomic design+vue
 
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
 
Njug docker-20180623
Njug docker-20180623Njug docker-20180623
Njug docker-20180623
 
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
 
Njug 20180414
Njug 20180414Njug 20180414
Njug 20180414
 
Java屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経ったJava屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経った
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
 
受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた
 
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
 
非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理
 
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
 
スキトラGit
スキトラGitスキトラGit
スキトラGit
 
テストコード入門
テストコード入門テストコード入門
テストコード入門
 
IoT検定
IoT検定IoT検定
IoT検定
 
MySQL入門
MySQL入門MySQL入門
MySQL入門
 

スキトラ Spring + mybatis