SlideShare ist ein Scribd-Unternehmen logo
1 von 46
JPAの基礎と現場で役立つ開発Tips
SI-Toolkit for Application Development
• はじめに
• 環境構築
• JPA Programming
• JPA Configuration
• まとめ
はじめに
SI-Toolkit : SIプロジェクトで必要な道具一式
• Application Development : Java EE & CI/CD
• Web Testing : Test Automation
Concept:もっとSmartなSIを!
株式会社モノクレア
• SIプロジェクトの技術コンサルティング
• アプリケーションアーキテクチャ
• 開発方法論
• テスト自動化
• CI/CD
環境構築
構築する環境
Eclipse Project
pom.xml
src
main
java
a.b.c.myproject.domain.user
UserRepository.java
resources
META-INF
persistence.xml
test
java
a.b.c.myproject.domain.user
UserRepositoryTest.java
target/generate-sources/hibernate-tools
a.b.c.myproject.domain.user
UserEntity.java
tools
derby
migration
V1__create_user_and_group.sql
hibernate-tools
DB
(Derby)
Hibernate
Tools
Flyway
JPA, CDI1. create project
from
maven archetype
3. db migrate
4. reverse engineer
2. start db
プロジェクト作成 正式
• 手順詳細
• クイックスタート Eclipseで実行する場合
• 「ファイル」メニュー>新規>Mavenプロジェクト
• カタログ
• Remote http://repo.maven.apache.org/maven2/archetype-catalog.xml
• アーキタイプ
• グループId:org.sitoolkit.ad.archetype アーティファクトId:javaee7-web-tips バージョ
ン:1.1.1
プロジェクト作成 当勉強会用
• project-generator.zipをダウンロード
• https://github.com/sitoolkit/sit-ad-archetype-javaee7-web/issues/17
• Eclipseに既存プロジェクトとしてインポート
• 「ファイル」メニュー>インポート>既存プロジェクトをワークスペースへ
プロジェクト作成 当勉強会用
• 「Java EE」パースペクティブ「プロジェクト・エクスプローラー」ビューでproject-generatorプロ
ジェクトを右クリック>実行>Mavenビルド または Alt + Shift + X, M (alt + shift +
X, M)
• project-generatorプロジェクトを右クリック>リフレッシュ またはF5
• myprojectフォルダを右クリック>Import as Project
• project-generatorプロジェクトを右クリック>閉じる
derbyプロファイルをactivate
• myproject/pom.xmlを開く
• mysql以下のactivationをderby以下に移動
• derbyプロファイルのpropertiesにdb.catalogプロパティを空で設定
l.95
<profile>
<id>derby</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.catalog></db.catalog>
<db.client.groupId>org.apache.derby</db.client.groupId>
l.117
<profile>
<id>mysql</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
wildfly-testプロファイルをactivate
• プロジェクト右クリック>Maven>Mavenプロファイルの選択
• wildfly-testを選択
Derbyを起動
• プロジェクト右クリック>実行>Mavenビルド または Alt + Shift + X, M
• myproject_10_derby-runを選択>OK
• 「ウィンドウ」メニュー>パースペクティブ>パースペクティブを開く>その他
• DBViewerを選択>OK
• 「DBツリー・ビュー」で「データベース定義をインポート」をクリック
• myproject/target/test-classes/dbviewer/derby.xmlを選択
データベース接続定義をインポート
データベースを参照
• インポートしたデータベース定義をダブルクリック
db-migrateを実行
• myprojectプロジェクト右クリック>実行>Mavenビルド または Alt + Shift + X, M
• myproject_01_db-migrateを選択>OK
db-migrate後のデータベース
• APPを右クリック>更新 または F5
• USER_ENTITYをダブルクリック
db-migrate後のJavaリソース
• myprojectプロジェクトを右クリック>リフレッシュ または F5
Before After
サンプルテストを開く
• 「ナビゲート」メニュー>リソースを開く または Ctrl + Shift + R
サンプルテストを実行
• UserRepositoryTest.javaを開いた状態で右クリック>実行>Junitテスト または Alt +
Shift + X, T
JPA Programming
INSERT
• UserRepositoryTest.javaにEntityManagerフィールドとtestInsertメソッドを実装して実
行
• 「コンソール」ビューにINSERT INTO user_entityのSQL文が出力されることを確認
• USER_ENTITYテーブルにレコードが1件INSERTされていることを確認
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Inject
EntityManager em;
@Test
@Transactional
public void testInsert() {
UserEntity user = UserFactory.create();
em.persist(user);
}
}
O/R Mapping
• Hibernate ToolsでリバースしたUserEntity.java
@Entity
@Table(name="USER_ENTITY")
@Access(AccessType.PROPERTY)
public class UserEntity extends BaseEntity implements java.io.Serializable {
private String userId;
private Set<GroupEntity> groupEntities = new HashSet<GroupEntity>(0);
@Id
@Column(name="USER_ID", unique=true, nullable=false, length=10)
public String getUserId() {
return this.userId;
}
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="USER_GROUP_RELATION", schema="APP", joinColumns = {
@JoinColumn(name="USER_ID", nullable=false, updatable=false) },
inverseJoinColumns = {
@JoinColumn(name="GROUP_CODE", nullable=false, updatable=false) })
public Set<GroupEntity> getGroupEntities() {
return this.groupEntities;
}
JPA 要するに
• DBのテーブルやカラムをJavaのクラスやフィールドとして扱うフレームワーク。
• テーブル、カラムとクラス、フィールドの対応はアノテーションで定義する。(※1)
※1 xmlファイルでも定義できますが当資料では言及しません。
DB Java
テーブル @Entityのついたクラス
カラム @Entityのついたクラスのフィールド
レコード @Entityのついたクラスのインスタンス
SELECT
• UserRepositoryTest.javaにtestSelectメソッドを実装して実行
• 「コンソール」ビューにSELECT FROM user_entityのSQL文が出力されることを確認
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
public void testSelect() {
UserEntity user = em.find(UserEntity.class, "user0001");
System.out.println(user.getUserId());
}
}
UPDATE
• UserRepositoryTest.javaにtestUpdateメソッドを実装して実行
• 「コンソール」ビューにUPDATE user_entityのSQL文が出力されることを確認
• JPAではトランザクション内でManagedな状態のエンティティのプロパティを変更すると自動で
UPDATE!
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
@Transactional
public void testUpdate() {
UserEntity user = em.find(UserEntity.class, "user0001");
user.setFirstName("name");
}
}
UPDATEしない
• @Transactinalをコメントアウト、またはEntityManager.detachでUserEntityをデタッチ
• 「コンソール」ビューにUPDATE user_entityのSQL文が出力されないことを確認
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
// @Transactional
public void testUpdate() {
UserEntity user = em.find(UserEntity.class, "user0001");
em.detach(user);
user.setFirstName("name");
}
}
DELETE
• UserRepositoryTest.javaにtestDeleteメソッドを実装して実行
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
@Transactional
public void testDelete() {
UserEntity user = em.find(UserEntity.class, "user0001");
em.remove(user);
}
}
Managed
• EntityManagerから取得したEntityインスタンスはManaged
• SQLの実行タイミングはJPAが管理する。
• トランザクション内でのEntityインスタンスのプロパティ更新は、DBも更新されることを
意識しましょう!
EntityManagerのメソッド 作用
persist(Object entity) INSERTしてentityをManagedにする。
find(Class entityClass, Object primaryKey) entityClassのインスタンスを取得する。
SELECTが実行される可能性がある。
merge(Object entity) entityをManagedにする。UPDATE、または
INSERTが実行される可能性がある。
remove(Object entity) DELETEが実行される可能性がある。
CRUD
• 問題:次のtestCrudメソッドで実行されるSQLとその順番は?
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Inject
EntityManager em;
@Test
@Transactional
public void testCrud() {
UserEntity user = UserFactory.create();
em.persist(user);
UserEntity userInDb = em.find(UserEntity.class, user.getUserId());
userInDb.setFirstName("user");
em.merge(userInDb);
em.remove(userInDb);
}
}
JPQL SELECT
• UserRepositoryTest.javaにtestJpqlSelectメソッドを実装して実行
import javax.persistence.Query;
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
public void testJpqlSelect() {
Query query = em.createQuery(
"SELECT u FROM UserEntity u WHERE u.userId LIKE :userId");
query.setParameter("userId", "user%");
List<UserEntity> users = query.getResultList();
System.out.println(users.size());
}
}
JPQL JOIN – NG example
• UserRepositoryTest.javaにtestJpqlSelectメソッドを実装して実行
• UserEntity.getGroupEntities()実行時にもSELECTされる!
@Dependent
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
public void testJpqlJoin() {
Query query = em.createQuery(
"SELECT u FROM UserEntity u JOIN u.groupEntities g");
List<UserEntity> users = query.getResultList();
System.out.println(users.get(0).getGroupEntities());
}
}
FetchType
• LAZY:getしたときにSELECTする
• EAGER:初回のJPQL実行時点でJOINする
@Entity
@Table(name="USER_ENTITY")
@Access(AccessType.PROPERTY)
public class UserEntity extends BaseEntity implements java.io.Serializable {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="USER_GROUP_RELATION", schema="APP", joinColumns = {
@JoinColumn(name="USER_ID", nullable=false, updatable=false) },
inverseJoinColumns = {
@JoinColumn(name="GROUP_CODE", nullable=false, updatable=false) })
public Set<GroupEntity> getGroupEntities() {
return this.groupEntities;
}
JPQL JOIN – OK example
A) 関連プロパティ(groupEntities)が必要な場合
• JOINの後にFETCHをつける。FETCHの有り無しでSELECTするカラムが変わる。
B) 不要な場合
• デタッチする。
• 注意:デタッチした後に関連プロパティにアクセスすると例外が発生する。
@Dependent
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
public void testJpqlJoin() {
Query query = em.createQuery(
"SELECT u FROM UserEntity u JOIN FETCH u.groupEntities g");
List<UserEntity> users = query.getResultList();
users.stream().forEach(u -> em.detach(u));
System.out.println(users.get(0).getGroupEntities());
}
}
A)
B)
JPQL UPDATE
• Entityを使わずにUPDATEする場合はJPQLでUPDATEする。
@Dependent
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
@Transactional
public void testJpqlUpdate() {
Query query = em.createQuery(
"UPDATE UserEntity u SET u.lastName = :lastName "
+ "WHERE u.userId = :userId");
query.setParameter("lastName", "name");
query.setParameter("userId", "user0002");
System.out.println(query.executeUpdate());
}
}
JPQL 要するに
• DBのオブジェクト名をO/Rマッピング後の名前で指定するSQL
SQL JPQL
テーブル名 Entityクラス名
カラム名 Entityクラスのフィールド名
JOIN table ON JOIN entity
Native Query
• SQLを実行することも可能。
• SELECT結果をEntityとして抽出することも可能。
• 主な利用場面
• データモデルが汚すぎて職人でないとSQLが組めない。職人はJPQLを知らない。
@Dependent
@RunWith(CdiTestRunner.class)
public class UserRepositoryTest {
@Test
public void testNativeQuery() {
Query query = em.createNativeQuery(
"SELECT * FROM user_entity", UserEntity.class);
List<UserEntity> result = query.getResultList();
System.out.println(result.get(0));
}
}
JPA Configuration
persistence.xml
• src/main/resources/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="javaee7-web-tips-pu" transaction-type="JTA">
<jta-data-source>jdbc/javaee7-web-tips-ds</jta-data-source>
<properties>
<property name="eclipselink.logging.logger" value="JavaLogger" />
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.parameters" value="true" />
<property name="hibernate.dialect" value="${hibernate.dialect}"/>
<property name="hibernate.format_sql" value="true"/>
<property name="wildfly.jpa.default-unit" value="true"/>
</properties>
</persistence-unit>
:
:
Tips:実行SQLをロ
グ出力するように設定
persistence.xml 続き
:
:
<persistence-unit name="javaee7-web-tips-pu-non-ee-container" transaction-
type="RESOURCE_LOCAL">
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="${db.jdbc.driver}" />
<property name="javax.persistence.jdbc.url" value="${db.jdbc.url}" />
<property name="javax.persistence.jdbc.user" value="${db.username}" />
<property name="javax.persistence.jdbc.password" value="${db.password}" />
<property name="eclipselink.logging.logger" value="JavaLogger" />
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.parameters" value="true" />
<property name="hibernate.dialect" value="${hibernate.dialect}"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Tips:EEコンテナー外での
設定をテスト用として同一ファ
イル内に定義(次頁)
Tips:接続情報を開発
者ごとに切り替えられるよ
うに設定
テスト用のPUは何故必要?
• Entityクラスをスキャンする範囲
• META-INF/persistence.xmlがあるディレクトリ、jarまたはwar
• Mavenの作法に則ってテスト用persistence.xmlをsrc/test/resourcesに配置すると、
Entityクラスがスキャンされない!
src
main
java
my/package/structure
MyEntity.java
resources
META-INF
persistence.xml
test
resources
META-INF
persistence.xml
target
classes
my/package/structure
MyEntity.class
META-INF
persistence.xml
test-classes
META-INF
persistence.xml
build
スキャン対象
スキャン対象外
まとめ
今回学んだこと
Category Item Point
Programming O/R Mapping DBレコードをJavaオブジェクトとして扱うための定義 DB
テーブル構造をJavaクラスにマッピング
JPQL 単純CRUD以外のDBのデータ操作はJPQLで行う
Configuration persistence.xml DB接続情報やトランザクション管理方法などJPAの設
定はpersistence.xmlで定義する
Tips DB Migration Tool DDL、DMLをチームで共有し&個々人が実行できる環
境を作る -> Flyway
Reverse Engineering Tool EntityクラスをDBスキーマからリバースエンジニアリングで
きる環境を作る -> Hibernate Tools
SQL Log 実行SQLをログに出力するようにJPAプロバイダーを設定
する
Unit Test with CDI CDI、特に宣言的トランザクションが使える単体テスト環
境を作る -> DeltaSpike
発展内容
• JPA
• O/R Mapping
• @AttributeOverride、@Inheritance、@Convert
• EntityListener
• EntityGraph
• Criteria API (APIがわかりにくいのでSIT-ADに入れるかは要検討。。)
• Shared Cache Mode
• DeltaSpike
• Data Module
• https://deltaspike.apache.org/documentation/data.html
SIT-ADの活用方法
• JPAの練習
• DDL作成
• db-migration
• JUnit
• Tipsの参照
• Flyway
• Hibernate Tools
• DeltaSpike
ご清聴ありがとうございました!
SmartなSIを!

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)NTT DATA Technology & Innovation
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートオラクルエンジニア通信
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)NTT DATA Technology & Innovation
 
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerToshiaki Maki
 
Azure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワークAzure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワークKuninobu SaSaki
 
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介Microsoft
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51Takakiyo Tanaka
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 

Was ist angesagt? (20)

PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
 
Azure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワークAzure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワーク
 
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
DXの加速化に力を与えるSQL Serverのモダナイズのオプションを一挙にご紹介
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 

Ähnlich wie JPAの基礎と現場で役立つ開発Tips

Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 智治 長沢
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014Koji Hasegawa
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンスNozomi Ito
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Daizen Ikehara
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
How to django at first
How to django at firstHow to django at first
How to django at firstMaito Kuwahara
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...Akira Inoue
 
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011Yusuke Suzuki
 
テスト自動化の現場で困ること SI-Toolkitが解決すること
テスト自動化の現場で困ること SI-Toolkitが解決することテスト自動化の現場で困ること SI-Toolkitが解決すること
テスト自動化の現場で困ること SI-Toolkitが解決することyuichi_kuwahara
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaHiroshi Sakate
 

Ähnlich wie JPAの基礎と現場で役立つ開発Tips (20)

Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
 
Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
How to django at first
How to django at firstHow to django at first
How to django at first
 
Road to UI Library
Road to UI LibraryRoad to UI Library
Road to UI Library
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
 
Ldd13 present
Ldd13 presentLdd13 present
Ldd13 present
 
テスト自動化の現場で困ること SI-Toolkitが解決すること
テスト自動化の現場で困ること SI-Toolkitが解決することテスト自動化の現場で困ること SI-Toolkitが解決すること
テスト自動化の現場で困ること SI-Toolkitが解決すること
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alpha
 

JPAの基礎と現場で役立つ開発Tips