Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
45206d60
Commit
45206d60
authored
Aug 03, 2013
by
Phillip Webb
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #9 from olivergierke/master
# By Oliver Gierke * pull9: Cleanups Spring Data JPA example.
parents
c1344683
d2def686
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
243 additions
and
232 deletions
+243
-232
HotelSummaryRepository.java
...le/data/jpa/domain/repository/HotelSummaryRepository.java
+0
-106
CityRepository.java
...ramework/boot/sample/data/jpa/service/CityRepository.java
+4
-4
CityServiceImpl.java
...amework/boot/sample/data/jpa/service/CityServiceImpl.java
+19
-23
HotelRepository.java
...amework/boot/sample/data/jpa/service/HotelRepository.java
+41
-0
HotelServiceImpl.java
...mework/boot/sample/data/jpa/service/HotelServiceImpl.java
+11
-27
ReviewRepository.java
...mework/boot/sample/data/jpa/service/ReviewRepository.java
+2
-2
ReviewsSummary.java
...ramework/boot/sample/data/jpa/service/ReviewsSummary.java
+1
-1
AbstractIntegrationTests.java
...mework/boot/sample/data/jpa/AbstractIntegrationTests.java
+36
-0
SampleDataJpaApplicationTests.java
...k/boot/sample/data/jpa/SampleDataJpaApplicationTests.java
+19
-69
CityRepositoryIntegrationTests.java
...mple/data/jpa/service/CityRepositoryIntegrationTests.java
+44
-0
HotelRepositoryIntegrationTests.java
...ple/data/jpa/service/HotelRepositoryIntegrationTests.java
+66
-0
No files found.
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/domain/repository/HotelSummaryRepository.java
deleted
100644 → 0
View file @
c1344683
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
domain
.
repository
;
import
java.util.List
;
import
java.util.Locale
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.Query
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.HotelSummary
;
import
org.springframework.boot.sample.data.jpa.domain.RatingCount
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageImpl
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort.Order
;
import
org.springframework.stereotype.Repository
;
@Repository
public
class
HotelSummaryRepository
{
private
static
final
String
AVERAGE_REVIEW_FUNCTION
=
"avg(r.rating)"
;
private
static
final
String
FIND_BY_CITY_QUERY
=
"select new "
+
HotelSummary
.
class
.
getName
()
+
"(h.city, h.name, "
+
AVERAGE_REVIEW_FUNCTION
+
") from Hotel h left outer join h.reviews r where h.city = ?1 group by h"
;
private
static
final
String
FIND_BY_CITY_COUNT_QUERY
=
"select count(h) from Hotel h where h.city = ?1"
;
private
static
final
String
FIND_RATING_COUNTS_QUERY
=
"select new "
+
RatingCount
.
class
.
getName
()
+
"(r.rating, count(r)) "
+
"from Review r where r.hotel = ?1 group by r.rating order by r.rating DESC"
;
private
EntityManager
entityManager
;
public
Page
<
HotelSummary
>
findByCity
(
City
city
,
Pageable
pageable
)
{
StringBuilder
queryString
=
new
StringBuilder
(
FIND_BY_CITY_QUERY
);
applySorting
(
queryString
,
pageable
==
null
?
null
:
pageable
.
getSort
());
Query
query
=
this
.
entityManager
.
createQuery
(
queryString
.
toString
());
query
.
setParameter
(
1
,
city
);
query
.
setFirstResult
(
pageable
.
getOffset
());
query
.
setMaxResults
(
pageable
.
getPageSize
());
Query
countQuery
=
this
.
entityManager
.
createQuery
(
FIND_BY_CITY_COUNT_QUERY
);
countQuery
.
setParameter
(
1
,
city
);
@SuppressWarnings
(
"unchecked"
)
List
<
HotelSummary
>
content
=
query
.
getResultList
();
Long
total
=
(
Long
)
countQuery
.
getSingleResult
();
return
new
PageImpl
<
HotelSummary
>(
content
,
pageable
,
total
);
}
@SuppressWarnings
(
"unchecked"
)
public
List
<
RatingCount
>
findRatingCounts
(
Hotel
hotel
)
{
Query
query
=
this
.
entityManager
.
createQuery
(
FIND_RATING_COUNTS_QUERY
);
query
.
setParameter
(
1
,
hotel
);
return
query
.
getResultList
();
}
private
void
applySorting
(
StringBuilder
query
,
Sort
sort
)
{
if
(
sort
!=
null
)
{
query
.
append
(
" order by"
);
for
(
Order
order
:
sort
)
{
String
aliasedProperty
=
getAliasedProperty
(
order
.
getProperty
());
query
.
append
(
String
.
format
(
" %s %s,"
,
aliasedProperty
,
order
.
getDirection
().
name
().
toLowerCase
(
Locale
.
US
)));
}
query
.
deleteCharAt
(
query
.
length
()
-
1
);
}
}
private
String
getAliasedProperty
(
String
property
)
{
if
(
property
.
equals
(
"averageRating"
))
{
return
AVERAGE_REVIEW_FUNCTION
;
}
return
"h."
+
property
;
}
@PersistenceContext
public
void
setEntityManager
(
EntityManager
entityManager
)
{
this
.
entityManager
=
entityManager
;
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
domain/repository
/CityRepository.java
→
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
service
/CityRepository.java
View file @
45206d60
...
@@ -14,19 +14,19 @@
...
@@ -14,19 +14,19 @@
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
domain
.
repository
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.repository.Repository
;
import
org.springframework.data.repository.Repository
;
public
interface
CityRepository
extends
Repository
<
City
,
Long
>
{
interface
CityRepository
extends
Repository
<
City
,
Long
>
{
Page
<
City
>
findAll
(
Pageable
pageable
);
Page
<
City
>
findAll
(
Pageable
pageable
);
Page
<
City
>
findByName
LikeAndCountryLikeAllIgnoringCase
(
String
name
,
String
country
,
Page
<
City
>
findByName
ContainingAndCountryContainingAllIgnoringCase
(
String
name
,
Pageable
pageable
);
String
country
,
Pageable
pageable
);
City
findByNameAndCountryAllIgnoringCase
(
String
name
,
String
country
);
City
findByNameAndCountryAllIgnoringCase
(
String
name
,
String
country
);
...
...
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/service/
impl/
CityServiceImpl.java
→
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/service/CityServiceImpl.java
View file @
45206d60
...
@@ -14,15 +14,11 @@
...
@@ -14,15 +14,11 @@
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
.
impl
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.HotelSummary
;
import
org.springframework.boot.sample.data.jpa.domain.HotelSummary
;
import
org.springframework.boot.sample.data.jpa.domain.repository.CityRepository
;
import
org.springframework.boot.sample.data.jpa.domain.repository.HotelSummaryRepository
;
import
org.springframework.boot.sample.data.jpa.service.CitySearchCriteria
;
import
org.springframework.boot.sample.data.jpa.service.CityService
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -32,31 +28,41 @@ import org.springframework.util.StringUtils;
...
@@ -32,31 +28,41 @@ import org.springframework.util.StringUtils;
@Component
(
"cityService"
)
@Component
(
"cityService"
)
@Transactional
@Transactional
public
class
CityServiceImpl
implements
CityService
{
class
CityServiceImpl
implements
CityService
{
// FIXME deal with null repository return values
// FIXME deal with null repository return values
private
CityRepository
cityRepository
;
private
final
CityRepository
cityRepository
;
private
HotelSummaryRepository
hotelSummaryRepository
;
private
final
HotelRepository
hotelRepository
;
@Autowired
public
CityServiceImpl
(
CityRepository
cityRepository
,
HotelRepository
hotelRepository
)
{
this
.
cityRepository
=
cityRepository
;
this
.
hotelRepository
=
hotelRepository
;
}
@Override
@Override
public
Page
<
City
>
findCities
(
CitySearchCriteria
criteria
,
Pageable
pageable
)
{
public
Page
<
City
>
findCities
(
CitySearchCriteria
criteria
,
Pageable
pageable
)
{
Assert
.
notNull
(
criteria
,
"Criteria must not be null"
);
Assert
.
notNull
(
criteria
,
"Criteria must not be null"
);
String
name
=
criteria
.
getName
();
String
name
=
criteria
.
getName
();
if
(!
StringUtils
.
hasLength
(
name
))
{
if
(!
StringUtils
.
hasLength
(
name
))
{
return
this
.
cityRepository
.
findAll
(
null
);
return
this
.
cityRepository
.
findAll
(
null
);
}
}
String
country
=
""
;
String
country
=
""
;
int
splitPos
=
name
.
lastIndexOf
(
","
);
int
splitPos
=
name
.
lastIndexOf
(
","
);
if
(
splitPos
>=
0
)
{
if
(
splitPos
>=
0
)
{
country
=
name
.
substring
(
splitPos
+
1
);
country
=
name
.
substring
(
splitPos
+
1
);
name
=
name
.
substring
(
0
,
splitPos
);
name
=
name
.
substring
(
0
,
splitPos
);
}
}
name
=
"%"
+
name
.
trim
()
+
"%"
;
country
=
"%"
+
country
.
trim
()
+
"%"
;
return
this
.
cityRepository
return
this
.
cityRepository
.
findByNameLikeAndCountryLikeAllIgnoringCase
(
name
,
.
findByNameContainingAndCountryContainingAllIgnoringCase
(
name
.
trim
()
,
country
,
pageable
);
country
.
trim
()
,
pageable
);
}
}
@Override
@Override
...
@@ -69,16 +75,6 @@ public class CityServiceImpl implements CityService {
...
@@ -69,16 +75,6 @@ public class CityServiceImpl implements CityService {
@Override
@Override
public
Page
<
HotelSummary
>
getHotels
(
City
city
,
Pageable
pageable
)
{
public
Page
<
HotelSummary
>
getHotels
(
City
city
,
Pageable
pageable
)
{
Assert
.
notNull
(
city
,
"City must not be null"
);
Assert
.
notNull
(
city
,
"City must not be null"
);
return
this
.
hotelSummaryRepository
.
findByCity
(
city
,
pageable
);
return
this
.
hotelRepository
.
findByCity
(
city
,
pageable
);
}
@Autowired
public
void
setCityRepository
(
CityRepository
cityRepository
)
{
this
.
cityRepository
=
cityRepository
;
}
@Autowired
public
void
setHotelSummaryRepository
(
HotelSummaryRepository
hotelSummaryRepository
)
{
this
.
hotelSummaryRepository
=
hotelSummaryRepository
;
}
}
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
domain/repository
/HotelRepository.java
→
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
service
/HotelRepository.java
View file @
45206d60
...
@@ -14,14 +14,28 @@
...
@@ -14,14 +14,28 @@
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
domain
.
repository
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
java.util.List
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.HotelSummary
;
import
org.springframework.boot.sample.data.jpa.domain.RatingCount
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.Repository
;
import
org.springframework.data.repository.Repository
;
public
interface
HotelRepository
extends
Repository
<
Hotel
,
Long
>
{
interface
HotelRepository
extends
Repository
<
Hotel
,
Long
>
{
Hotel
findByCityAndName
(
City
city
,
String
name
);
Hotel
findByCityAndName
(
City
city
,
String
name
);
@Query
(
"select new org.springframework.boot.sample.data.jpa.domain.HotelSummary(h.city, h.name, avg(r.rating)) "
+
"from Hotel h left outer join h.reviews r where h.city = ?1 group by h"
)
Page
<
HotelSummary
>
findByCity
(
City
city
,
Pageable
pageable
);
@Query
(
"select new org.springframework.boot.sample.data.jpa.domain.RatingCount(r.rating, count(r)) "
+
"from Review r where r.hotel = ?1 group by r.rating order by r.rating DESC"
)
List
<
RatingCount
>
findRatingCounts
(
Hotel
hotel
);
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/service/
impl/
HotelServiceImpl.java
→
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/service/HotelServiceImpl.java
View file @
45206d60
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
.
impl
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -27,11 +27,6 @@ import org.springframework.boot.sample.data.jpa.domain.Rating;
...
@@ -27,11 +27,6 @@ import org.springframework.boot.sample.data.jpa.domain.Rating;
import
org.springframework.boot.sample.data.jpa.domain.RatingCount
;
import
org.springframework.boot.sample.data.jpa.domain.RatingCount
;
import
org.springframework.boot.sample.data.jpa.domain.Review
;
import
org.springframework.boot.sample.data.jpa.domain.Review
;
import
org.springframework.boot.sample.data.jpa.domain.ReviewDetails
;
import
org.springframework.boot.sample.data.jpa.domain.ReviewDetails
;
import
org.springframework.boot.sample.data.jpa.domain.repository.HotelRepository
;
import
org.springframework.boot.sample.data.jpa.domain.repository.HotelSummaryRepository
;
import
org.springframework.boot.sample.data.jpa.domain.repository.ReviewRepository
;
import
org.springframework.boot.sample.data.jpa.service.HotelService
;
import
org.springframework.boot.sample.data.jpa.service.ReviewsSummary
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -40,15 +35,20 @@ import org.springframework.util.Assert;
...
@@ -40,15 +35,20 @@ import org.springframework.util.Assert;
@Component
(
"hotelService"
)
@Component
(
"hotelService"
)
@Transactional
@Transactional
public
class
HotelServiceImpl
implements
HotelService
{
class
HotelServiceImpl
implements
HotelService
{
// FIXME deal with null repository return values
// FIXME deal with null repository return values
private
HotelRepository
hotelRepository
;
private
final
HotelRepository
hotelRepository
;
private
HotelSummaryRepository
hotelSummary
Repository
;
private
final
ReviewRepository
review
Repository
;
private
ReviewRepository
reviewRepository
;
@Autowired
public
HotelServiceImpl
(
HotelRepository
hotelRepository
,
ReviewRepository
reviewRepository
)
{
this
.
hotelRepository
=
hotelRepository
;
this
.
reviewRepository
=
reviewRepository
;
}
@Override
@Override
public
Hotel
getHotel
(
City
city
,
String
name
)
{
public
Hotel
getHotel
(
City
city
,
String
name
)
{
...
@@ -78,26 +78,10 @@ public class HotelServiceImpl implements HotelService {
...
@@ -78,26 +78,10 @@ public class HotelServiceImpl implements HotelService {
@Override
@Override
public
ReviewsSummary
getReviewSummary
(
Hotel
hotel
)
{
public
ReviewsSummary
getReviewSummary
(
Hotel
hotel
)
{
List
<
RatingCount
>
ratingCounts
=
this
.
hotelSummaryRepository
List
<
RatingCount
>
ratingCounts
=
this
.
hotelRepository
.
findRatingCounts
(
hotel
);
.
findRatingCounts
(
hotel
);
return
new
ReviewsSummaryImpl
(
ratingCounts
);
return
new
ReviewsSummaryImpl
(
ratingCounts
);
}
}
@Autowired
public
void
setHotelRepository
(
HotelRepository
hotelRepository
)
{
this
.
hotelRepository
=
hotelRepository
;
}
@Autowired
public
void
setHotelSummaryRepository
(
HotelSummaryRepository
hotelSummaryRepository
)
{
this
.
hotelSummaryRepository
=
hotelSummaryRepository
;
}
@Autowired
public
void
setReviewRepository
(
ReviewRepository
reviewRepository
)
{
this
.
reviewRepository
=
reviewRepository
;
}
private
static
class
ReviewsSummaryImpl
implements
ReviewsSummary
{
private
static
class
ReviewsSummaryImpl
implements
ReviewsSummary
{
private
Map
<
Rating
,
Long
>
ratingCount
;
private
Map
<
Rating
,
Long
>
ratingCount
;
...
...
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
domain/repository
/ReviewRepository.java
→
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/
service
/ReviewRepository.java
View file @
45206d60
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
domain
.
repository
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.Review
;
import
org.springframework.boot.sample.data.jpa.domain.Review
;
...
@@ -22,7 +22,7 @@ import org.springframework.data.domain.Page;
...
@@ -22,7 +22,7 @@ import org.springframework.data.domain.Page;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.repository.Repository
;
import
org.springframework.data.repository.Repository
;
public
interface
ReviewRepository
extends
Repository
<
Review
,
Long
>
{
interface
ReviewRepository
extends
Repository
<
Review
,
Long
>
{
Page
<
Review
>
findByHotel
(
Hotel
hotel
,
Pageable
pageable
);
Page
<
Review
>
findByHotel
(
Hotel
hotel
,
Pageable
pageable
);
...
...
spring-boot-samples/spring-boot-sample-data-jpa/src/main/java/org/springframework/boot/sample/data/jpa/service/ReviewsSummary.java
View file @
45206d60
...
@@ -20,6 +20,6 @@ import org.springframework.boot.sample.data.jpa.domain.Rating;
...
@@ -20,6 +20,6 @@ import org.springframework.boot.sample.data.jpa.domain.Rating;
public
interface
ReviewsSummary
{
public
interface
ReviewsSummary
{
public
long
getNumberOfReviewsWithRating
(
Rating
rating
);
long
getNumberOfReviewsWithRating
(
Rating
rating
);
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/test/java/org/springframework/boot/sample/data/jpa/AbstractIntegrationTests.java
0 → 100644
View file @
45206d60
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.context.initializer.ConfigFileApplicationContextInitializer
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
/**
* Base class for integration tests. Mimics the behavior of
* {@link SpringApplication#run(String...)}.
*
* @author Oliver Gierke
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@WebAppConfiguration
@ContextConfiguration
(
classes
=
SampleDataJpaApplication
.
class
,
initializers
=
ConfigFileApplicationContextInitializer
.
class
)
public
abstract
class
AbstractIntegrationTests
{
}
spring-boot-samples/spring-boot-sample-data-jpa/src/test/java/org/springframework/boot/sample/data/jpa/SampleDataJpaApplicationTests.java
View file @
45206d60
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
;
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
;
import
java.io.IOException
;
import
org.junit.Before
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.TimeUnit
;
import
org.junit.AfterClass
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.test.web.servlet.MockMvc
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.test.web.servlet.setup.MockMvcBuilders
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.context.WebApplicationContext
;
import
org.springframework.http.client.ClientHttpResponse
;
import
org.springframework.web.client.DefaultResponseErrorHandler
;
import
org.springframework.web.client.RestTemplate
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
request
.
MockMvcRequestBuilders
.
get
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
result
.
MockMvcResultMatchers
.
content
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
result
.
MockMvcResultMatchers
.
status
;
/**
/**
*
Basic integration tests for service demo
application.
*
Integration test to run the
application.
*
*
* @author
Dave Syer
* @author
Oliver Gierke
*/
*/
public
class
SampleDataJpaApplicationTests
{
public
class
SampleDataJpaApplicationTests
extends
AbstractIntegrationTests
{
private
static
ConfigurableApplicationContext
context
;
@Autowired
private
WebApplicationContext
context
;
@BeforeClass
private
MockMvc
mvc
;
public
static
void
start
()
throws
Exception
{
Future
<
ConfigurableApplicationContext
>
future
=
Executors
.
newSingleThreadExecutor
().
submit
(
new
Callable
<
ConfigurableApplicationContext
>()
{
@Override
public
ConfigurableApplicationContext
call
()
throws
Exception
{
return
(
ConfigurableApplicationContext
)
SpringApplication
.
run
(
SampleDataJpaApplication
.
class
);
}
});
context
=
future
.
get
(
30
,
TimeUnit
.
SECONDS
);
}
@AfterClass
@Before
public
static
void
stop
()
{
public
void
setUp
()
{
if
(
context
!=
null
)
{
this
.
mvc
=
MockMvcBuilders
.
webAppContextSetup
(
this
.
context
).
build
();
context
.
close
();
}
}
}
@Test
@Test
public
void
testHome
()
throws
Exception
{
public
void
testHome
()
throws
Exception
{
ResponseEntity
<
String
>
entity
=
getRestTemplate
().
getForEntity
(
"http://localhost:8080"
,
String
.
class
);
assertEquals
(
HttpStatus
.
OK
,
entity
.
getStatusCode
());
assertEquals
(
"Bath"
,
entity
.
getBody
());
}
private
RestTemplate
getRestTemplate
()
{
RestTemplate
restTemplate
=
new
RestTemplate
();
restTemplate
.
setErrorHandler
(
new
DefaultResponseErrorHandler
()
{
@Override
public
void
handleError
(
ClientHttpResponse
response
)
throws
IOException
{
}
});
return
restTemplate
;
this
.
mvc
.
perform
(
get
(
"/"
)).
andExpect
(
status
().
isOk
())
.
andExpect
(
content
().
string
(
"Bath"
));
}
}
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/test/java/org/springframework/boot/sample/data/jpa/service/CityRepositoryIntegrationTests.java
0 → 100644
View file @
45206d60
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.sample.data.jpa.AbstractIntegrationTests
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertThat
;
/**
* Integration tests for {@link CityRepository}.
*
* @author Oliver Gierke
*/
public
class
CityRepositoryIntegrationTests
extends
AbstractIntegrationTests
{
@Autowired
CityRepository
repository
;
@Test
public
void
findsFirstPageOfCities
()
{
Page
<
City
>
cities
=
this
.
repository
.
findAll
(
new
PageRequest
(
0
,
10
));
assertThat
(
cities
.
getTotalElements
(),
is
(
21L
));
}
}
spring-boot-samples/spring-boot-sample-data-jpa/src/test/java/org/springframework/boot/sample/data/jpa/service/HotelRepositoryIntegrationTests.java
0 → 100644
View file @
45206d60
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
sample
.
data
.
jpa
.
service
;
import
java.util.List
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.sample.data.jpa.AbstractIntegrationTests
;
import
org.springframework.boot.sample.data.jpa.domain.City
;
import
org.springframework.boot.sample.data.jpa.domain.Hotel
;
import
org.springframework.boot.sample.data.jpa.domain.HotelSummary
;
import
org.springframework.boot.sample.data.jpa.domain.Rating
;
import
org.springframework.boot.sample.data.jpa.domain.RatingCount
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Sort.Direction
;
import
static
org
.
hamcrest
.
Matchers
.
hasSize
;
import
static
org
.
hamcrest
.
Matchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertThat
;
/**
* Integration tests for {@link HotelRepository}.
*
* @author Oliver Gierke
*/
public
class
HotelRepositoryIntegrationTests
extends
AbstractIntegrationTests
{
@Autowired
CityRepository
cityRepository
;
@Autowired
HotelRepository
repository
;
@Test
public
void
executesQueryMethodsCorrectly
()
{
City
city
=
this
.
cityRepository
.
findAll
(
new
PageRequest
(
0
,
1
,
Direction
.
ASC
,
"name"
)).
getContent
()
.
get
(
0
);
assertThat
(
city
.
getName
(),
is
(
"Atlanta"
));
Page
<
HotelSummary
>
hotels
=
this
.
repository
.
findByCity
(
city
,
new
PageRequest
(
0
,
10
,
Direction
.
ASC
,
"name"
));
Hotel
hotel
=
this
.
repository
.
findByCityAndName
(
city
,
hotels
.
getContent
().
get
(
0
)
.
getName
());
assertThat
(
hotel
.
getName
(),
is
(
"Doubletree"
));
List
<
RatingCount
>
counts
=
this
.
repository
.
findRatingCounts
(
hotel
);
assertThat
(
counts
,
hasSize
(
1
));
assertThat
(
counts
.
get
(
0
).
getRating
(),
is
(
Rating
.
AVERAGE
));
assertThat
(
counts
.
get
(
0
).
getCount
(),
is
(
2L
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment