SlideShare a Scribd company logo
1 of 118
Download to read offline
(C) CASAREAL, Inc. All rights reserved.
1
(C) CASAREAL, Inc. All rights reserved.
2
(C) CASAREAL, Inc. All rights reserved.
3
(C) CASAREAL, Inc. All rights reserved.
▸
▸ 😅
▸
▸
4
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
5
(C) CASAREAL, Inc. All rights reserved.
▸
6
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
▸
7
(C) CASAREAL, Inc. All rights reserved.
8
Spring Web 4 Spring MVC
Spring Boot
Developer
2 Spring Boot
Spring Cloud
Services
3
Spring Cloud Microservices
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
9
(C) CASAREAL, Inc. All rights reserved.
10
(C) CASAREAL, Inc. All rights reserved.
11
(C) CASAREAL, Inc. All rights reserved.
▸
12
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
13
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
14
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
15
※ JPA 2.1(Java EE 7) 

(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
16
(C) CASAREAL, Inc. All rights reserved.
▸
17
<dependency>	
				<groupId>org.springframework.boot</groupId>	
				<artifactId>spring-boot-starter-data-jpa</artifactId>	
</dependency>
(C) CASAREAL, Inc. All rights reserved.
▸
18
<dependency>	
				<groupId>org.springframework.data</groupId>	
				<artifactId>spring-data-jpa</artifactId>	
				<version>2.0.1.RELEASE</version>	
</dependency>	
<dependency>	
				<groupId>org.hibernate</groupId>	
				<artifactId>hibernate-entitymanager</artifactId>	
				<version>5.2.12.Final</version>	
</dependency>
(C) CASAREAL, Inc. All rights reserved.
▸
19
logging.level.org.hibernate.SQL=debug	
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=	
trace
<logger	name="org.hibernate.SQL"	level="DEBUG"	/>	
<logger	name="org.hibernate.type.descriptor.sql.BasicBinder"	
			level="TRACE"	/>
▸
▸
※hibernate.show_sql=true
(C) CASAREAL, Inc. All rights reserved.
▸
20
spring.jpa.properties.hibernate.format_sql=true
▸
▸
▸
(C) CASAREAL, Inc. All rights reserved.
21
(C) CASAREAL, Inc. All rights reserved.
22


DB
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
23
@Entity	
public	class	Product	{	
		@Id	
		private	Integer	id;	
		private	String	name;		
		//	setter/getter	
}
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸ 

24
(C) CASAREAL, Inc. All rights reserved.
▸
▸ 

25
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸ 

26
(C) CASAREAL, Inc. All rights reserved.
27
NEW new
MANAGED
DETACHED
REMOVED
(C) CASAREAL, Inc. All rights reserved.
28
find()
persist() 1
remove() 1
merge()
detach()
flush() DB
clear()
refresh() DB
(C) CASAREAL, Inc. All rights reserved.
29
persist()
detach()

clear()
merge()
remove()
flush()
flush()
refresh()
find()

JPQL
detach()

clear()
(C) CASAREAL, Inc. All rights reserved.
30
EntityManager	em	=	…;	
//	 1 2 	
Product	product	=	em.find(Product.class,	1);
▸
select	
				product0_.id	as	id1_5_0_,	
				product0_.category_id	as	category4_5_0_,	
				product0_.name	as	name2_5_0_,	
				product0_.price	as	price3_5_0_,	
				product0_.vendor_id	as	vendor_i5_5_0_		
from	
				product	product0_		
where	
				product0_.id=?
SQL 

(C) CASAREAL, Inc. All rights reserved.
31
Product	product	=	new	Product(“ ”,	100000L);	
em.persist(product);
▸
▸
insert		
into	
				product	
				(category_id,	name,	price,	vendor_id,	id)		
values	
				(?,	?,	?,	?,	?)
(C) CASAREAL, Inc. All rights reserved.
32
//	find() MANAGED 	
Product	product	=	em.find(Product.class,	1);	
//	 	
product.setName(" ");	
//	 ( OK)	
em.flush();
▸
(C) CASAREAL, Inc. All rights reserved.
33
select	…	from	product	product0_	where	product0_.id=?	
binding	parameter	[1]	as	[INTEGER]	-	[1]	
update	product		
set	category_id=?,	name=?,	price=?,	vendor_id=?		
where	id=?	
binding	parameter	[1]	as	[INTEGER]	-	[1]	
binding	parameter	[2]	as	[VARCHAR]	-	[ ]	
binding	parameter	[3]	as	[BIGINT]	-	[100000]	
binding	parameter	[4]	as	[INTEGER]	-	[1]	
binding	parameter	[5]	as	[INTEGER]	-	[1]
(C) CASAREAL, Inc. All rights reserved.
34
Product	product	=	new	Product();	
product.setId(1);	
product.setName(“ ");	
//	merge() 	
em.merge(product);	
em.flush();
▸
(C) CASAREAL, Inc. All rights reserved.
35
select	…	from	product	product0_	where	product0_.id=?	
binding	parameter	[1]	as	[INTEGER]	-	[1]	
update	product		
set	category_id=?,	name=?,	price=?,	vendor_id=?		
where	id=?	
binding	parameter	[1]	as	[INTEGER]	-	[null]	
binding	parameter	[2]	as	[VARCHAR]	-	[ ]	
binding	parameter	[3]	as	[BIGINT]	-	[null]	
binding	parameter	[4]	as	[INTEGER]	-	[null]	
binding	parameter	[5]	as	[INTEGER]	-	[1]
▸
(C) CASAREAL, Inc. All rights reserved.
▸
▸
36
Product	mergedProduct	=	em.merge(product);	
//	 MANAGED 	
assertTrue(em.contains(mergedProduct));	
//	 	
assertFalse(em.contains(product));
(C) CASAREAL, Inc. All rights reserved.
37
//	find() MANAGED 	
Product	product	=	em.find(Product.class,	30);	
//	REMOVED 	
em.remove(product);	
//	 ( OK)	
em.flush();
▸
(C) CASAREAL, Inc. All rights reserved.
38
select	…	from	product	product0_	where	product0_.id=?	
binding	parameter	[1]	as	[INTEGER]	-	[30]	
delete	from	product	where	id=?	
binding	parameter	[1]	as	[INTEGER]	-	[30]
(C) CASAREAL, Inc. All rights reserved.
39
//	find() MANAGED 	
Product	product	=	em.find(Product.class,	30);	
//	REMOVED 	
em.remove(product);	
//	DETACHED 	
em.detach(product);	
//	DETACHED DB 	
em.flush();
▸
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
40
(C) CASAREAL, Inc. All rights reserved.
41
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
42
(C) CASAREAL, Inc. All rights reserved.
43
TypedQuery<Product>	query	=	em.createQuery(	
				"SELECT	p	FROM	Product	p	WHERE	p.id	=	:id",	
				Product.class);	
query.setParameter("id",	1);	
Product	product	=	query.getSingleResult();
TypedQuery<Product>	query	=	em.createQuery(	
				"SELECT	p	FROM	Product	p	WHERE	p.id	<=	:maxId"	
		+	"	ORDER	BY	p.id",	Product.class);	
query.setParameter("maxId",	5);	
List<Product>	list	=	query.getResultList();
▸
▸
(C) CASAREAL, Inc. All rights reserved.
44
select	
				product0_.id	as	id1_5_,	
				product0_.category_id	as	category4_5_,	
				product0_.name	as	name2_5_,	
				product0_.price	as	price3_5_,	
				product0_.vendor_id	as	vendor_i5_5_		
from	
				product	product0_		
where	
				product0_.id=?
▸ 

(C) CASAREAL, Inc. All rights reserved.
45
SELECT	 	FROM	 	[AS]	 	
WHERE	 . 	<=	:
▸
▸ 

▸
(C) CASAREAL, Inc. All rights reserved.
▸
▸
46
SELECT	new	com.example.demo.dto.CountDto(	
																				od.product.id,	COUNT(od))	
FROM	OrderDetail	od	GROUP	BY	od.product.id
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
47
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
48
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
49
(C) CASAREAL, Inc. All rights reserved.
▸
▸
50
(C) CASAREAL, Inc. All rights reserved.
51
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
52
@Entity	
public	class	Product	{	
		…	
		@ManyToOne	
		@JoinColumn(name="vendor_id")	
		private	Vendor	vendor;	
}
@Entity	
public	class	Vendor	{	
		…	
}
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
53
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
54
@Entity	
public	class	Product	{	
		…	
		@ManyToOne(fetch	=	FetchType.LAZY)	
		@JoinColumn(name="vendor_id")	
		private	Vendor	vendor;	
}
(C) CASAREAL, Inc. All rights reserved.
55
select	( )	from	product	product0_		
where	product0_.id=?	
select	( )	from	vendor	vendor0_	
where	vendor0_.id=?
@Entity	public	class	Product	{	
		@ManyToOne(fetch	=	FetchType.LAZY)	
		private	Vendor	vendor;	
}	
Product	p	=	em.find(Product.class,	1);	
Vendor	v	=	p.getVendor();	
String	n	=	v.getName()	//	 SELECT
2
SELECT
(C) CASAREAL, Inc. All rights reserved.
▸
56
em.getTransaction().begin();	
Product	p	=	em.find(Product.class,	1);	
em.getTransaction().rollback();	
Vendor	v	=	p.getVendor();	
String	n	=	v.getName();	//
(C) CASAREAL, Inc. All rights reserved.
57
@Entity	public	class	Product	{	
		@ManyToOne(fetch	=	FetchType.EAGER)	
		private	Vendor	vendor;	
}	
Product	p	=	em.find(Product.class,	1);	
Vendor	v	=	p.getVendor();	//	
select	( )	from	product	product0_		
left	outer	join	vendor	vendor2_		
		on	product0_.vendor_id=vendor2_.id		
where	product0_.id=?
1
SELECT
(C) CASAREAL, Inc. All rights reserved.
▸
▸ 

▸
58
(C) CASAREAL, Inc. All rights reserved.
59
//	order_summary SELECT 1 	
List<OrderSummary>	list	=	em.createQuery(	
		"SELECT	os	FROM	OrderSummary	os",OrderSummary.class)	
		.getResultList();	
for	(OrderSummary	os	:	list)	{	
		//	 order_detail 	
		System.out.println(os);	
		for	(OrderDetail	od	:	os.getOrderDetailList())	{	
				//	 order_detail SELECT (N )	
				System.out.println(od);	
		}	
}
(C) CASAREAL, Inc. All rights reserved.
60
//	order_summary SELECT 1 	
List<OrderSummary>	list	=	em.createQuery(	
				"SELECT	os	FROM	OrderSummary	os"	+		
				"	JOIN	os.orderDetailList",	OrderSummary.class)	
		.getResultList();	
for	(OrderSummary	os	:	list)	{	
		//	 order_detail 	
		System.out.println(os);	
		for	(OrderDetail	od	:	os.getOrderDetailList())	{	
				//	 order_detail SELECT (N )	
				System.out.println(od);	
		}	
}
(C) CASAREAL, Inc. All rights reserved.
61
select	
				ordersumma0_.id	as	id1_3_,	
				ordersumma0_.customer_id	as	customer3_3_,	
				ordersumma0_.order_timestamp	as	order_ti2_3_		
from	
				order_summary	ordersumma0_		
inner	join	
				order_detail	orderdetai1_		
								on	ordersumma0_.id=orderdetai1_.summary_id		
where	
				ordersumma0_.id=?
JOIN 

order_summary 

(C) CASAREAL, Inc. All rights reserved.
▸
62
//	order_summary SELECT 1 	
List<OrderSummary>	list	=	em.createQuery(	
				"SELECT	os	FROM	OrderSummary	os"	+		
				"	JOIN	FETCH	os.orderDetailList"	+		
				,	OrderSummary.class)	
		.getResultList();
(C) CASAREAL, Inc. All rights reserved.
63
select	
				ordersumma0_.id	as	id1_3_0_,	
				orderdetai1_.id	as	id1_2_1_,	
				ordersumma0_.customer_id	as	customer3_3_0_,	
				ordersumma0_.order_timestamp	as	order_ti2_3_0_,	
				orderdetai1_.amount	as	amount2_2_1_,	
				orderdetai1_.product_id	as	product_3_2_1_,	
				orderdetai1_.summary_id	as	summary_4_2_0__,	
				orderdetai1_.id	as	id1_2_0__		
from	
				order_summary	ordersumma0_		
inner	join	
				order_detail	orderdetai1_		
								on	ordersumma0_.id=orderdetai1_.summary_id		
where	
				ordersumma0_.id=?
JOIN 

(C) CASAREAL, Inc. All rights reserved.
64
OrderSummary{id=1,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=1,	amount=2}	
OrderDetail{id=2,	amount=2}	
OrderDetail{id=3,	amount=2}	
OrderSummary{id=1,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=1,	amount=2}	
OrderDetail{id=2,	amount=2}	
OrderDetail{id=3,	amount=2}	
OrderSummary{id=1,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=1,	amount=2}	
OrderDetail{id=2,	amount=2}	
OrderDetail{id=3,	amount=2}	
OrderSummary{id=2,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=4,	amount=2}	
OrderDetail{id=5,	amount=2}	


(C) CASAREAL, Inc. All rights reserved.
65
//	order_summary SELECT 1 	
List<OrderSummary>	list	=	em.createQuery(	
				"SELECT	DISTINCT	os	FROM	OrderSummary	os"	+		
				"	JOIN	FETCH	os.orderDetailList"	+		
				,	OrderSummary.class)	
		.getResultList();
(C) CASAREAL, Inc. All rights reserved.
66
select	distinct	
				ordersumma0_.id	as	id1_3_0_,	
				orderdetai1_.id	as	id1_2_1_,	
				ordersumma0_.customer_id	as	customer3_3_0_,	
				ordersumma0_.order_timestamp	as	order_ti2_3_0_,	
				orderdetai1_.amount	as	amount2_2_1_,	
				orderdetai1_.product_id	as	product_3_2_1_,	
				orderdetai1_.summary_id	as	summary_4_2_0__,	
				orderdetai1_.id	as	id1_2_0__		
from	
				order_summary	ordersumma0_		
inner	join	
				order_detail	orderdetai1_		
								on	ordersumma0_.id=orderdetai1_.summary_id		
where	
				ordersumma0_.id=?
distinct 

SQL 

(C) CASAREAL, Inc. All rights reserved.
67
OrderSummary{id=1,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=3,	amount=2}	
OrderDetail{id=1,	amount=2}	
OrderDetail{id=2,	amount=2}	
OrderSummary{id=2,	orderTimestamp=2017-04-01T10:00}	
OrderDetail{id=5,	amount=2}	
OrderDetail{id=6,	amount=2}	
OrderDetail{id=4,	amount=2}	
OrderSummary{id=9,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=7,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=6,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=5,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=4,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=3,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=8,	orderTimestamp=2017-04-01T10:00}	
OrderSummary{id=10,	orderTimestamp=2017-04-01T10:00}


(C) CASAREAL, Inc. All rights reserved.
▸
68
(C) CASAREAL, Inc. All rights reserved.
//	order_summary order_detail product JOIN 	
OrderSummary	orderSummary	=	em.createQuery(	
				"SELECT	os	FROM	OrderSummary	os"	+		
				"	JOIN	FETCH	os.orderDetailList	od"	+		
				"	JOIN	FETCH	od.product	p"	+		
				"	WHERE	os.id	=	:id",	OrderSummary.class)	
		.setParameter("id",	1)	
		.getSingleResult();
▸
69
(C) CASAREAL, Inc. All rights reserved.
70
select	
				ordersumma0_.id	as	id1_3_0_,	
				orderdetai1_.id	as	id1_2_1_,	
				product2_.id	as	id1_4_2_,	
				ordersumma0_.customer_id	as	customer3_3_0_,	
				ordersumma0_.order_timestamp	as	order_ti2_3_0_,	
				orderdetai1_.amount	as	amount2_2_1_,	
				orderdetai1_.product_id	as	product_3_2_1_,	
				orderdetai1_.summary_id	as	summary_4_2_0__,	
				orderdetai1_.id	as	id1_2_0__,	
				product2_.category_id	as	category4_4_2_,	
				product2_.name	as	name2_4_2_,	
				product2_.price	as	price3_4_2_,	
				product2_.vendor_id	as	vendor_i5_4_2_		
from	
				order_summary	ordersumma0_		
inner	join	
				order_detail	orderdetai1_		
								on	ordersumma0_.id=orderdetai1_.summary_id		
inner	join	
				product	product2_		
								on	orderdetai1_.product_id=product2_.id		
where	
				ordersumma0_.id=?
3 

JOIN 

(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
71
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸ 

▸
▸
72
https://www.casareal.co.jp/recruit/jobs/
ls_teacher.php
(C) CASAREAL, Inc. All rights reserved.
▸ 

✕ 

✕
▸ 







73
https://www.casareal.co.jp/ls/service/shinjinseminar/course01
(C) CASAREAL, Inc. All rights reserved.
74
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
75
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
76
Query	query	=	em.createNativeQuery(	
		"select	id,	name,	price,	vendor_id"		
		+	"	from	product	where	id	=	:id",	Product.class);	
query.setParameter("id",	1);	
Product	product	=	(Product)	query.getSingleResult();
(C) CASAREAL, Inc. All rights reserved.
▸
77
Query	query	=	em.createNativeQuery(	
		"select	id,	name	from	product	where	id	=	:id");	
query.setParameter("id",	1);	
//	0 id 1 name	
Object[]	objs	=	(Object[])	query.getSingleResult();	
Integer	productId	=	(Integer)	objs[0];	
String	productName	=	(String)	objs[1];
(C) CASAREAL, Inc. All rights reserved.
▸
▸
78
(C) CASAREAL, Inc. All rights reserved.
79
@Entity	
@SqlResultSetMapping(	
		name	=	"product_id_name",	//	 	
		classes	=	{	
				@ConstructorResult(targetClass	=	ProductDto.class,	
						columns	=	{	
								@ColumnResult(name	=	"id"),	
								@ColumnResult(name	=	"name")	
						}	
				)	
		}	
)	
public	class	Product	{	…	}


※@SqlResultSetMappings @SqlResultSetMapping
(C) CASAREAL, Inc. All rights reserved.
80
Query	query	=	em.createNativeQuery(	
		"select	id,	name	from	product	where	id	=	:id",		
		"product_id_name");	//	@SqlResultSetMapping name 	
query.setParameter("id",	1);	
ProductDto	productDto	=		
		(ProductDto)	query.getSingleResult();
public	class	ProductDto	{	
		private	Integer	id;	
		private	String	name;	
		public	ProductDto(Integer	id,	String	name)	{	…	}	
}


(C) CASAREAL, Inc. All rights reserved.
▸
81
//	H2	Database LEFT 	
TypedQuery<Product>	query	=	em.createQuery(	
		"SELECT	p	FROM	Product	p"		
				+	"	WHERE	FUNCTION('LEFT',	p.name,	2)	=	' '",	
		Product.class);	
List<Product>	productList	=	query.getResultList();
(C) CASAREAL, Inc. All rights reserved.
▸
82
StoredProcedureQuery	query	=		
		em.createStoredProcedureQuery(" ",	
				 .class);	
query.setParameter(" ",	 );	
List< >	list	=		
		(List< >)	query.getResultList();
※
(C) CASAREAL, Inc. All rights reserved.
▸
83
@Entity	
@Index(members	=	{"name"})	
public	class	Product	{	
		…	
}
※ 

※@Indices @Index
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
84
(C) CASAREAL, Inc. All rights reserved.
▸
▸
85
(C) CASAREAL, Inc. All rights reserved.
86
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
87
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
88
(C) CASAREAL, Inc. All rights reserved.
▸
89
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		//	 OK	
}
※@Repository
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
90
(C) CASAREAL, Inc. All rights reserved.
91
@Service	
public	class	ProductService	{	
		private	final	ProductRepository	repo;	
			
		@Autowired	//	 DI 	
		public	ProductService(ProductRepository	repo)	{	
				this.repo	=	repo;	
		}	
			
		@Transactional	
		public	void	insert(Product	product)	{	
				repo.save(product);	
		}	
}
※@Autowired Spring 4.3 

1
(C) CASAREAL, Inc. All rights reserved.
▸
▸
92
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		@Query("SELECT	p	FROM	Product	p	JOIN	FETCH	p.vendor"	
						+	"	WHERE	p.id	=	:id")	
		Product	findByIdJoinFetch(@Param("id")	Integer	id);	
}
(C) CASAREAL, Inc. All rights reserved.
▸
93
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		@Modifying	
		@Query("UPDATE	Product	p	SET	p.name	=	:name"	
									+	"	WHERE	p.id	=	:id")	
		void	updateName(@Param("name")	String	name,	
																		@Param("id")	Integer	id);	
}
(C) CASAREAL, Inc. All rights reserved.
▸
94
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		@Lock(LockModeType.PESSIMISTIC_READ)	
		@Query("SELECT	p	FROM	Product	p	JOIN	FETCH	p.vendor"	
						+	"	WHERE	p.id	=	:id")	
		Product	findByIdJoinFetch(@Param("id")	Integer	id);	
}
※ 

https://www.slideshare.net/masatoshitada7/jpa20140518-ccc-r15-jjug-ccc
(C) CASAREAL, Inc. All rights reserved.
▸
95
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		@EntityGraph(" ")	
		@Query("SELECT	p	FROM	Product	p	JOIN	FETCH	p.vendor"	
						+	"	WHERE	p.id	=	:id")	
		Product	findByIdJoinFetch(@Param("id")	Integer	id);	
}
※ 

https://blog.ik.am/entries/350
(C) CASAREAL, Inc. All rights reserved.
▸
96
public	interface	ProductRepository	
				extends	JpaRepository<Product,	Integer>	{	
		//	name 	
		List<Product>	findByNameContaining(String	keyword);	
}
(C) CASAREAL, Inc. All rights reserved.
97
select	
				product0_.id	as	id1_4_,	
				product0_.category_id	as	category4_4_,	
				product0_.name	as	name2_4_,	
				product0_.price	as	price3_4_,	
				product0_.vendor_id	as	vendor_i5_4_		
from	
				product	product0_		
where	
				product0_.name	like	?	
binding	parameter	[1]	as	[VARCHAR]	-	[% %]
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
98
(C) CASAREAL, Inc. All rights reserved.
▸
▸
99


(C) CASAREAL, Inc. All rights reserved.
▸
100
@Entity	public	class	Hoge	{	
		@CreatedBy	String	createdUser;	
		@CreatedDate	LocalDateTime	createdDate;	
		@LastModifiedBy	String	modifiedUser;	
		@LastModifiedDate	LocalDateTime	lastModifiedDate;	
}
(C) CASAREAL, Inc. All rights reserved.
101
@SpringBootApplication	
@EnableJpaAuditing(auditorAwareRef	=	"myAuditorAware")	
public	class	SpringDataJpaDaitokaiApplication	{	…	}
@Component	
public	class	MyAuditorAware	
				implements	AuditorAware<String>	{	
		@Override	
		public	Optional<String>	getCurrentAuditor()	{	
				return	Optional.of("user01");}	
}
Spring Security 

OK
(C) CASAREAL, Inc. All rights reserved.
102
<entity-mappings>	
		<persistence-unit-metadata>	
				<persistence-unit-defaults>	
						<entity-listeners>	
								<entity-listener	
class="org.springframework.data.jpa.domain.support.AuditingEntityListene
r"	/>	
					</entity-listeners>	
				</persistence-unit-defaults>	
		</persistence-unit-metadata>	
</entity-mappings>
▸
▸
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
103
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
104
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
▸
105
(C) CASAREAL, Inc. All rights reserved.
106
(C) CASAREAL, Inc. All rights reserved.
▸
107
http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#boot-features-jpa-in-
web-environment
(C) CASAREAL, Inc. All rights reserved.
▸
108
spring.jpa.open-in-view=false
(C) CASAREAL, Inc. All rights reserved.
▸
▸
109
@Entity	public	class	Hoge	{	
		//	Spring	Boot @Column 	
		@Column(name=“foo_bar”)	String	fooBar;	
}
http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-configure-
hibernate-naming-strategy
(C) CASAREAL, Inc. All rights reserved.
▸
110
spring.jpa.hibernate.naming.physical-strategy=Strategy FQCN	
spring.jpa.hibernate.naming.implicit-strategy=Strategy FQCN
(C) CASAREAL, Inc. All rights reserved.
▸
▸
111
@SpringBootApplication	
@EntityScan(basePackages	=	{	
		"com.example.demo.persistence.entity",	
		"org.springframework.data.jpa.convert.threeten"})	
public	class	SpringDataJpaDaitokaiApplication	{	…	}
http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-separate-entity-
definitions-from-spring-configuration
(C) CASAREAL, Inc. All rights reserved.
112
(C) CASAREAL, Inc. All rights reserved.
▸
113
(C) CASAREAL, Inc. All rights reserved.




114
😅
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
▸
115
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
▸
▸
▸
116
(C) CASAREAL, Inc. All rights reserved.
▸
▸
▸
▸
▸
▸
▸
▸
117
(C) CASAREAL, Inc. All rights reserved.
▸
118

More Related Content

What's hot

とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_cccPivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_cccMasatoshi Tada
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービューMasatoshi Tada
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線MeetupMasatoshi Tada
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?土岐 孝平
 
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05都元ダイスケ Miyamoto
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発Amazon Web Services Japan
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーションssuser070fa9
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介オラクルエンジニア通信
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
JJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みJJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みRecruit Technologies
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用iPride Co., Ltd.
 

What's hot (20)

とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_cccPivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
Pivotal認定講師によるSpring Framework 5.1 & Spring Boot 2.1ハンズオン! #jjug_ccc
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
JJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みJJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組み
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用
 

Similar to Spring Data JPAによるデータアクセス徹底入門 #jsug

Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Masatoshi Tada
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Masatoshi Tada
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会Masatoshi Tada
 
Wellington APAC Groundbreakers tour - Upgrading to the 12c Optimizer
Wellington APAC Groundbreakers tour - Upgrading to the 12c OptimizerWellington APAC Groundbreakers tour - Upgrading to the 12c Optimizer
Wellington APAC Groundbreakers tour - Upgrading to the 12c OptimizerConnor McDonald
 
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...Amazon Web Services
 
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docx
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docxBREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docx
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docxhartrobert670
 
Real-time Data Updates for Neo4j Using GraphQL Subscriptions
Real-time Data Updates for Neo4j Using GraphQL SubscriptionsReal-time Data Updates for Neo4j Using GraphQL Subscriptions
Real-time Data Updates for Neo4j Using GraphQL SubscriptionsNeo4j
 
Altinity Quickstart for ClickHouse-2202-09-15.pdf
Altinity Quickstart for ClickHouse-2202-09-15.pdfAltinity Quickstart for ClickHouse-2202-09-15.pdf
Altinity Quickstart for ClickHouse-2202-09-15.pdfAltinity Ltd
 
2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDKCasey Lee
 
Weather scraper for your data warehouse
Weather scraper for your data warehouseWeather scraper for your data warehouse
Weather scraper for your data warehouseFru Louis
 
Full Stack Visualization: Build A React App With A Sankey Diagram
Full Stack Visualization: Build A React App With A Sankey DiagramFull Stack Visualization: Build A React App With A Sankey Diagram
Full Stack Visualization: Build A React App With A Sankey DiagramNeo4j
 
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司紘司 村田
 

Similar to Spring Data JPAによるデータアクセス徹底入門 #jsug (14)

Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-Java EE 8新機能解説 -Bean Validation 2.0編-
Java EE 8新機能解説 -Bean Validation 2.0編-
 
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
Java EEでもOAuth 2.0!~そしてPayara Micro on Cloud Foundryで遊ぶ~
 
JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会JSUG SpringOne 2017報告会
JSUG SpringOne 2017報告会
 
Wellington APAC Groundbreakers tour - Upgrading to the 12c Optimizer
Wellington APAC Groundbreakers tour - Upgrading to the 12c OptimizerWellington APAC Groundbreakers tour - Upgrading to the 12c Optimizer
Wellington APAC Groundbreakers tour - Upgrading to the 12c Optimizer
 
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...
How Zocdoc Achieves Automatic Threat Detection & Remediation with Security as...
 
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docx
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docxBREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docx
BREWBEANS.sql.txtDROP TABLE BB_Department CASCADE CONSTRAINTS .docx
 
Real-time Data Updates for Neo4j Using GraphQL Subscriptions
Real-time Data Updates for Neo4j Using GraphQL SubscriptionsReal-time Data Updates for Neo4j Using GraphQL Subscriptions
Real-time Data Updates for Neo4j Using GraphQL Subscriptions
 
Altinity Quickstart for ClickHouse-2202-09-15.pdf
Altinity Quickstart for ClickHouse-2202-09-15.pdfAltinity Quickstart for ClickHouse-2202-09-15.pdf
Altinity Quickstart for ClickHouse-2202-09-15.pdf
 
2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK2022 SF Summit - Improving Developer Experience with CDK
2022 SF Summit - Improving Developer Experience with CDK
 
Inner joins
Inner joinsInner joins
Inner joins
 
Using Inner-Joins (SQL)
Using Inner-Joins (SQL)Using Inner-Joins (SQL)
Using Inner-Joins (SQL)
 
Weather scraper for your data warehouse
Weather scraper for your data warehouseWeather scraper for your data warehouse
Weather scraper for your data warehouse
 
Full Stack Visualization: Build A React App With A Sankey Diagram
Full Stack Visualization: Build A React App With A Sankey DiagramFull Stack Visualization: Build A React App With A Sankey Diagram
Full Stack Visualization: Build A React App With A Sankey Diagram
 
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
 

More from Masatoshi Tada

基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装Masatoshi Tada
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafMasatoshi Tada
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Masatoshi Tada
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltMasatoshi Tada
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccMasatoshi Tada
 

More from Masatoshi Tada (7)

基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装基礎からのOAuth 2.0とSpring Security 5.1による実装
基礎からのOAuth 2.0とSpring Security 5.1による実装
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho ltNetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
NetBeansでかんたんJava EE ○分間クッキング! #kuwaccho lt
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_cccJPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
 

Recently uploaded

[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneUiPathCommunity
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Français Patch Tuesday - Avril
Français Patch Tuesday - AvrilFrançais Patch Tuesday - Avril
Français Patch Tuesday - AvrilIvanti
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 

Recently uploaded (20)

[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyone
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Français Patch Tuesday - Avril
Français Patch Tuesday - AvrilFrançais Patch Tuesday - Avril
Français Patch Tuesday - Avril
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 

Spring Data JPAによるデータアクセス徹底入門 #jsug

  • 1. (C) CASAREAL, Inc. All rights reserved. 1
  • 2. (C) CASAREAL, Inc. All rights reserved. 2
  • 3. (C) CASAREAL, Inc. All rights reserved. 3
  • 4. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 😅 ▸ ▸ 4
  • 5. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 5
  • 6. (C) CASAREAL, Inc. All rights reserved. ▸ 6
  • 7. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ ▸ 7
  • 8. (C) CASAREAL, Inc. All rights reserved. 8 Spring Web 4 Spring MVC Spring Boot Developer 2 Spring Boot Spring Cloud Services 3 Spring Cloud Microservices
  • 9. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 9
  • 10. (C) CASAREAL, Inc. All rights reserved. 10
  • 11. (C) CASAREAL, Inc. All rights reserved. 11
  • 12. (C) CASAREAL, Inc. All rights reserved. ▸ 12
  • 13. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 13
  • 14. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 14
  • 15. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 15 ※ JPA 2.1(Java EE 7) 

  • 16. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 16
  • 17. (C) CASAREAL, Inc. All rights reserved. ▸ 17 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
  • 18. (C) CASAREAL, Inc. All rights reserved. ▸ 18 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.2.12.Final</version> </dependency>
  • 19. (C) CASAREAL, Inc. All rights reserved. ▸ 19 logging.level.org.hibernate.SQL=debug logging.level.org.hibernate.type.descriptor.sql.BasicBinder= trace <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> ▸ ▸ ※hibernate.show_sql=true
  • 20. (C) CASAREAL, Inc. All rights reserved. ▸ 20 spring.jpa.properties.hibernate.format_sql=true ▸ ▸ ▸
  • 21. (C) CASAREAL, Inc. All rights reserved. 21
  • 22. (C) CASAREAL, Inc. All rights reserved. 22 
 DB
  • 23. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 23 @Entity public class Product { @Id private Integer id; private String name; // setter/getter }
  • 24. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 
 24
  • 25. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 
 25
  • 26. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 
 26
  • 27. (C) CASAREAL, Inc. All rights reserved. 27 NEW new MANAGED DETACHED REMOVED
  • 28. (C) CASAREAL, Inc. All rights reserved. 28 find() persist() 1 remove() 1 merge() detach() flush() DB clear() refresh() DB
  • 29. (C) CASAREAL, Inc. All rights reserved. 29 persist() detach()
 clear() merge() remove() flush() flush() refresh() find()
 JPQL detach()
 clear()
  • 30. (C) CASAREAL, Inc. All rights reserved. 30 EntityManager em = …; // 1 2 Product product = em.find(Product.class, 1); ▸ select product0_.id as id1_5_0_, product0_.category_id as category4_5_0_, product0_.name as name2_5_0_, product0_.price as price3_5_0_, product0_.vendor_id as vendor_i5_5_0_ from product product0_ where product0_.id=? SQL 

  • 31. (C) CASAREAL, Inc. All rights reserved. 31 Product product = new Product(“ ”, 100000L); em.persist(product); ▸ ▸ insert into product (category_id, name, price, vendor_id, id) values (?, ?, ?, ?, ?)
  • 32. (C) CASAREAL, Inc. All rights reserved. 32 // find() MANAGED Product product = em.find(Product.class, 1); // product.setName(" "); // ( OK) em.flush(); ▸
  • 33. (C) CASAREAL, Inc. All rights reserved. 33 select … from product product0_ where product0_.id=? binding parameter [1] as [INTEGER] - [1] update product set category_id=?, name=?, price=?, vendor_id=? where id=? binding parameter [1] as [INTEGER] - [1] binding parameter [2] as [VARCHAR] - [ ] binding parameter [3] as [BIGINT] - [100000] binding parameter [4] as [INTEGER] - [1] binding parameter [5] as [INTEGER] - [1]
  • 34. (C) CASAREAL, Inc. All rights reserved. 34 Product product = new Product(); product.setId(1); product.setName(“ "); // merge() em.merge(product); em.flush(); ▸
  • 35. (C) CASAREAL, Inc. All rights reserved. 35 select … from product product0_ where product0_.id=? binding parameter [1] as [INTEGER] - [1] update product set category_id=?, name=?, price=?, vendor_id=? where id=? binding parameter [1] as [INTEGER] - [null] binding parameter [2] as [VARCHAR] - [ ] binding parameter [3] as [BIGINT] - [null] binding parameter [4] as [INTEGER] - [null] binding parameter [5] as [INTEGER] - [1] ▸
  • 36. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 36 Product mergedProduct = em.merge(product); // MANAGED assertTrue(em.contains(mergedProduct)); // assertFalse(em.contains(product));
  • 37. (C) CASAREAL, Inc. All rights reserved. 37 // find() MANAGED Product product = em.find(Product.class, 30); // REMOVED em.remove(product); // ( OK) em.flush(); ▸
  • 38. (C) CASAREAL, Inc. All rights reserved. 38 select … from product product0_ where product0_.id=? binding parameter [1] as [INTEGER] - [30] delete from product where id=? binding parameter [1] as [INTEGER] - [30]
  • 39. (C) CASAREAL, Inc. All rights reserved. 39 // find() MANAGED Product product = em.find(Product.class, 30); // REMOVED em.remove(product); // DETACHED em.detach(product); // DETACHED DB em.flush(); ▸
  • 40. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 40
  • 41. (C) CASAREAL, Inc. All rights reserved. 41
  • 42. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 42
  • 43. (C) CASAREAL, Inc. All rights reserved. 43 TypedQuery<Product> query = em.createQuery( "SELECT p FROM Product p WHERE p.id = :id", Product.class); query.setParameter("id", 1); Product product = query.getSingleResult(); TypedQuery<Product> query = em.createQuery( "SELECT p FROM Product p WHERE p.id <= :maxId" + " ORDER BY p.id", Product.class); query.setParameter("maxId", 5); List<Product> list = query.getResultList(); ▸ ▸
  • 44. (C) CASAREAL, Inc. All rights reserved. 44 select product0_.id as id1_5_, product0_.category_id as category4_5_, product0_.name as name2_5_, product0_.price as price3_5_, product0_.vendor_id as vendor_i5_5_ from product product0_ where product0_.id=? ▸ 

  • 45. (C) CASAREAL, Inc. All rights reserved. 45 SELECT FROM [AS] WHERE . <= : ▸ ▸ 
 ▸
  • 46. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 46 SELECT new com.example.demo.dto.CountDto( od.product.id, COUNT(od)) FROM OrderDetail od GROUP BY od.product.id
  • 47. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 47
  • 48. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 48
  • 49. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 49
  • 50. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 50
  • 51. (C) CASAREAL, Inc. All rights reserved. 51
  • 52. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 52 @Entity public class Product { … @ManyToOne @JoinColumn(name="vendor_id") private Vendor vendor; } @Entity public class Vendor { … }
  • 53. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 53
  • 54. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 54 @Entity public class Product { … @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="vendor_id") private Vendor vendor; }
  • 55. (C) CASAREAL, Inc. All rights reserved. 55 select ( ) from product product0_ where product0_.id=? select ( ) from vendor vendor0_ where vendor0_.id=? @Entity public class Product { @ManyToOne(fetch = FetchType.LAZY) private Vendor vendor; } Product p = em.find(Product.class, 1); Vendor v = p.getVendor(); String n = v.getName() // SELECT 2 SELECT
  • 56. (C) CASAREAL, Inc. All rights reserved. ▸ 56 em.getTransaction().begin(); Product p = em.find(Product.class, 1); em.getTransaction().rollback(); Vendor v = p.getVendor(); String n = v.getName(); //
  • 57. (C) CASAREAL, Inc. All rights reserved. 57 @Entity public class Product { @ManyToOne(fetch = FetchType.EAGER) private Vendor vendor; } Product p = em.find(Product.class, 1); Vendor v = p.getVendor(); // select ( ) from product product0_ left outer join vendor vendor2_ on product0_.vendor_id=vendor2_.id where product0_.id=? 1 SELECT
  • 58. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 
 ▸ 58
  • 59. (C) CASAREAL, Inc. All rights reserved. 59 // order_summary SELECT 1 List<OrderSummary> list = em.createQuery( "SELECT os FROM OrderSummary os",OrderSummary.class) .getResultList(); for (OrderSummary os : list) { // order_detail System.out.println(os); for (OrderDetail od : os.getOrderDetailList()) { // order_detail SELECT (N ) System.out.println(od); } }
  • 60. (C) CASAREAL, Inc. All rights reserved. 60 // order_summary SELECT 1 List<OrderSummary> list = em.createQuery( "SELECT os FROM OrderSummary os" + " JOIN os.orderDetailList", OrderSummary.class) .getResultList(); for (OrderSummary os : list) { // order_detail System.out.println(os); for (OrderDetail od : os.getOrderDetailList()) { // order_detail SELECT (N ) System.out.println(od); } }
  • 61. (C) CASAREAL, Inc. All rights reserved. 61 select ordersumma0_.id as id1_3_, ordersumma0_.customer_id as customer3_3_, ordersumma0_.order_timestamp as order_ti2_3_ from order_summary ordersumma0_ inner join order_detail orderdetai1_ on ordersumma0_.id=orderdetai1_.summary_id where ordersumma0_.id=? JOIN 
 order_summary 

  • 62. (C) CASAREAL, Inc. All rights reserved. ▸ 62 // order_summary SELECT 1 List<OrderSummary> list = em.createQuery( "SELECT os FROM OrderSummary os" + " JOIN FETCH os.orderDetailList" + , OrderSummary.class) .getResultList();
  • 63. (C) CASAREAL, Inc. All rights reserved. 63 select ordersumma0_.id as id1_3_0_, orderdetai1_.id as id1_2_1_, ordersumma0_.customer_id as customer3_3_0_, ordersumma0_.order_timestamp as order_ti2_3_0_, orderdetai1_.amount as amount2_2_1_, orderdetai1_.product_id as product_3_2_1_, orderdetai1_.summary_id as summary_4_2_0__, orderdetai1_.id as id1_2_0__ from order_summary ordersumma0_ inner join order_detail orderdetai1_ on ordersumma0_.id=orderdetai1_.summary_id where ordersumma0_.id=? JOIN 

  • 64. (C) CASAREAL, Inc. All rights reserved. 64 OrderSummary{id=1, orderTimestamp=2017-04-01T10:00} OrderDetail{id=1, amount=2} OrderDetail{id=2, amount=2} OrderDetail{id=3, amount=2} OrderSummary{id=1, orderTimestamp=2017-04-01T10:00} OrderDetail{id=1, amount=2} OrderDetail{id=2, amount=2} OrderDetail{id=3, amount=2} OrderSummary{id=1, orderTimestamp=2017-04-01T10:00} OrderDetail{id=1, amount=2} OrderDetail{id=2, amount=2} OrderDetail{id=3, amount=2} OrderSummary{id=2, orderTimestamp=2017-04-01T10:00} OrderDetail{id=4, amount=2} OrderDetail{id=5, amount=2} 

  • 65. (C) CASAREAL, Inc. All rights reserved. 65 // order_summary SELECT 1 List<OrderSummary> list = em.createQuery( "SELECT DISTINCT os FROM OrderSummary os" + " JOIN FETCH os.orderDetailList" + , OrderSummary.class) .getResultList();
  • 66. (C) CASAREAL, Inc. All rights reserved. 66 select distinct ordersumma0_.id as id1_3_0_, orderdetai1_.id as id1_2_1_, ordersumma0_.customer_id as customer3_3_0_, ordersumma0_.order_timestamp as order_ti2_3_0_, orderdetai1_.amount as amount2_2_1_, orderdetai1_.product_id as product_3_2_1_, orderdetai1_.summary_id as summary_4_2_0__, orderdetai1_.id as id1_2_0__ from order_summary ordersumma0_ inner join order_detail orderdetai1_ on ordersumma0_.id=orderdetai1_.summary_id where ordersumma0_.id=? distinct 
 SQL 

  • 67. (C) CASAREAL, Inc. All rights reserved. 67 OrderSummary{id=1, orderTimestamp=2017-04-01T10:00} OrderDetail{id=3, amount=2} OrderDetail{id=1, amount=2} OrderDetail{id=2, amount=2} OrderSummary{id=2, orderTimestamp=2017-04-01T10:00} OrderDetail{id=5, amount=2} OrderDetail{id=6, amount=2} OrderDetail{id=4, amount=2} OrderSummary{id=9, orderTimestamp=2017-04-01T10:00} OrderSummary{id=7, orderTimestamp=2017-04-01T10:00} OrderSummary{id=6, orderTimestamp=2017-04-01T10:00} OrderSummary{id=5, orderTimestamp=2017-04-01T10:00} OrderSummary{id=4, orderTimestamp=2017-04-01T10:00} OrderSummary{id=3, orderTimestamp=2017-04-01T10:00} OrderSummary{id=8, orderTimestamp=2017-04-01T10:00} OrderSummary{id=10, orderTimestamp=2017-04-01T10:00} 

  • 68. (C) CASAREAL, Inc. All rights reserved. ▸ 68
  • 69. (C) CASAREAL, Inc. All rights reserved. // order_summary order_detail product JOIN OrderSummary orderSummary = em.createQuery( "SELECT os FROM OrderSummary os" + " JOIN FETCH os.orderDetailList od" + " JOIN FETCH od.product p" + " WHERE os.id = :id", OrderSummary.class) .setParameter("id", 1) .getSingleResult(); ▸ 69
  • 70. (C) CASAREAL, Inc. All rights reserved. 70 select ordersumma0_.id as id1_3_0_, orderdetai1_.id as id1_2_1_, product2_.id as id1_4_2_, ordersumma0_.customer_id as customer3_3_0_, ordersumma0_.order_timestamp as order_ti2_3_0_, orderdetai1_.amount as amount2_2_1_, orderdetai1_.product_id as product_3_2_1_, orderdetai1_.summary_id as summary_4_2_0__, orderdetai1_.id as id1_2_0__, product2_.category_id as category4_4_2_, product2_.name as name2_4_2_, product2_.price as price3_4_2_, product2_.vendor_id as vendor_i5_4_2_ from order_summary ordersumma0_ inner join order_detail orderdetai1_ on ordersumma0_.id=orderdetai1_.summary_id inner join product product2_ on orderdetai1_.product_id=product2_.id where ordersumma0_.id=? 3 
 JOIN 

  • 71. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 71
  • 72. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 
 ▸ ▸ 72 https://www.casareal.co.jp/recruit/jobs/ ls_teacher.php
  • 73. (C) CASAREAL, Inc. All rights reserved. ▸ 
 ✕ 
 ✕ ▸ 
 
 
 
 73 https://www.casareal.co.jp/ls/service/shinjinseminar/course01
  • 74. (C) CASAREAL, Inc. All rights reserved. 74
  • 75. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 75
  • 76. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 76 Query query = em.createNativeQuery( "select id, name, price, vendor_id" + " from product where id = :id", Product.class); query.setParameter("id", 1); Product product = (Product) query.getSingleResult();
  • 77. (C) CASAREAL, Inc. All rights reserved. ▸ 77 Query query = em.createNativeQuery( "select id, name from product where id = :id"); query.setParameter("id", 1); // 0 id 1 name Object[] objs = (Object[]) query.getSingleResult(); Integer productId = (Integer) objs[0]; String productName = (String) objs[1];
  • 78. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 78
  • 79. (C) CASAREAL, Inc. All rights reserved. 79 @Entity @SqlResultSetMapping( name = "product_id_name", // classes = { @ConstructorResult(targetClass = ProductDto.class, columns = { @ColumnResult(name = "id"), @ColumnResult(name = "name") } ) } ) public class Product { … } 
 ※@SqlResultSetMappings @SqlResultSetMapping
  • 80. (C) CASAREAL, Inc. All rights reserved. 80 Query query = em.createNativeQuery( "select id, name from product where id = :id", "product_id_name"); // @SqlResultSetMapping name query.setParameter("id", 1); ProductDto productDto = (ProductDto) query.getSingleResult(); public class ProductDto { private Integer id; private String name; public ProductDto(Integer id, String name) { … } } 

  • 81. (C) CASAREAL, Inc. All rights reserved. ▸ 81 // H2 Database LEFT TypedQuery<Product> query = em.createQuery( "SELECT p FROM Product p" + " WHERE FUNCTION('LEFT', p.name, 2) = ' '", Product.class); List<Product> productList = query.getResultList();
  • 82. (C) CASAREAL, Inc. All rights reserved. ▸ 82 StoredProcedureQuery query = em.createStoredProcedureQuery(" ", .class); query.setParameter(" ", ); List< > list = (List< >) query.getResultList(); ※
  • 83. (C) CASAREAL, Inc. All rights reserved. ▸ 83 @Entity @Index(members = {"name"}) public class Product { … } ※ 
 ※@Indices @Index
  • 84. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 84
  • 85. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 85
  • 86. (C) CASAREAL, Inc. All rights reserved. 86
  • 87. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 87
  • 88. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ 88
  • 89. (C) CASAREAL, Inc. All rights reserved. ▸ 89 public interface ProductRepository extends JpaRepository<Product, Integer> { // OK } ※@Repository
  • 90. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 90
  • 91. (C) CASAREAL, Inc. All rights reserved. 91 @Service public class ProductService { private final ProductRepository repo; @Autowired // DI public ProductService(ProductRepository repo) { this.repo = repo; } @Transactional public void insert(Product product) { repo.save(product); } } ※@Autowired Spring 4.3 
 1
  • 92. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 92 public interface ProductRepository extends JpaRepository<Product, Integer> { @Query("SELECT p FROM Product p JOIN FETCH p.vendor" + " WHERE p.id = :id") Product findByIdJoinFetch(@Param("id") Integer id); }
  • 93. (C) CASAREAL, Inc. All rights reserved. ▸ 93 public interface ProductRepository extends JpaRepository<Product, Integer> { @Modifying @Query("UPDATE Product p SET p.name = :name" + " WHERE p.id = :id") void updateName(@Param("name") String name, @Param("id") Integer id); }
  • 94. (C) CASAREAL, Inc. All rights reserved. ▸ 94 public interface ProductRepository extends JpaRepository<Product, Integer> { @Lock(LockModeType.PESSIMISTIC_READ) @Query("SELECT p FROM Product p JOIN FETCH p.vendor" + " WHERE p.id = :id") Product findByIdJoinFetch(@Param("id") Integer id); } ※ 
 https://www.slideshare.net/masatoshitada7/jpa20140518-ccc-r15-jjug-ccc
  • 95. (C) CASAREAL, Inc. All rights reserved. ▸ 95 public interface ProductRepository extends JpaRepository<Product, Integer> { @EntityGraph(" ") @Query("SELECT p FROM Product p JOIN FETCH p.vendor" + " WHERE p.id = :id") Product findByIdJoinFetch(@Param("id") Integer id); } ※ 
 https://blog.ik.am/entries/350
  • 96. (C) CASAREAL, Inc. All rights reserved. ▸ 96 public interface ProductRepository extends JpaRepository<Product, Integer> { // name List<Product> findByNameContaining(String keyword); }
  • 97. (C) CASAREAL, Inc. All rights reserved. 97 select product0_.id as id1_4_, product0_.category_id as category4_4_, product0_.name as name2_4_, product0_.price as price3_4_, product0_.vendor_id as vendor_i5_4_ from product product0_ where product0_.name like ? binding parameter [1] as [VARCHAR] - [% %]
  • 98. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 98
  • 99. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 99 

  • 100. (C) CASAREAL, Inc. All rights reserved. ▸ 100 @Entity public class Hoge { @CreatedBy String createdUser; @CreatedDate LocalDateTime createdDate; @LastModifiedBy String modifiedUser; @LastModifiedDate LocalDateTime lastModifiedDate; }
  • 101. (C) CASAREAL, Inc. All rights reserved. 101 @SpringBootApplication @EnableJpaAuditing(auditorAwareRef = "myAuditorAware") public class SpringDataJpaDaitokaiApplication { … } @Component public class MyAuditorAware implements AuditorAware<String> { @Override public Optional<String> getCurrentAuditor() { return Optional.of("user01");} } Spring Security 
 OK
  • 102. (C) CASAREAL, Inc. All rights reserved. 102 <entity-mappings> <persistence-unit-metadata> <persistence-unit-defaults> <entity-listeners> <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListene r" /> </entity-listeners> </persistence-unit-defaults> </persistence-unit-metadata> </entity-mappings> ▸ ▸
  • 103. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ 103
  • 104. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ 104
  • 105. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ ▸ 105
  • 106. (C) CASAREAL, Inc. All rights reserved. 106
  • 107. (C) CASAREAL, Inc. All rights reserved. ▸ 107 http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#boot-features-jpa-in- web-environment
  • 108. (C) CASAREAL, Inc. All rights reserved. ▸ 108 spring.jpa.open-in-view=false
  • 109. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 109 @Entity public class Hoge { // Spring Boot @Column @Column(name=“foo_bar”) String fooBar; } http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-configure- hibernate-naming-strategy
  • 110. (C) CASAREAL, Inc. All rights reserved. ▸ 110 spring.jpa.hibernate.naming.physical-strategy=Strategy FQCN spring.jpa.hibernate.naming.implicit-strategy=Strategy FQCN
  • 111. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ 111 @SpringBootApplication @EntityScan(basePackages = { "com.example.demo.persistence.entity", "org.springframework.data.jpa.convert.threeten"}) public class SpringDataJpaDaitokaiApplication { … } http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-separate-entity- definitions-from-spring-configuration
  • 112. (C) CASAREAL, Inc. All rights reserved. 112
  • 113. (C) CASAREAL, Inc. All rights reserved. ▸ 113
  • 114. (C) CASAREAL, Inc. All rights reserved. 
 
 114 😅
  • 115. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ ▸ 115
  • 116. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ 116
  • 117. (C) CASAREAL, Inc. All rights reserved. ▸ ▸ ▸ ▸ ▸ ▸ ▸ ▸ 117
  • 118. (C) CASAREAL, Inc. All rights reserved. ▸ 118