Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
后端镜像
java镜像
Springside4
提交
c434cf02
S
Springside4
项目概览
后端镜像
/
java镜像
/
Springside4
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Springside4
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c434cf02
编写于
9月 12, 2012
作者:
C
Calvin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#86 开始实现动态搜索条件组合的功能
上级
8c6aead8
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
97 addition
and
5 deletion
+97
-5
LICENSE.txt
LICENSE.txt
+1
-1
examples/quickstart/bin/package.bat
examples/quickstart/bin/package.bat
+1
-1
examples/quickstart/pom.xml
examples/quickstart/pom.xml
+0
-1
examples/quickstart/src/main/java/org/springside/examples/quickstart/repository/TaskDao.java
...rg/springside/examples/quickstart/repository/TaskDao.java
+2
-1
examples/quickstart/src/main/resources/applicationContext.xml
...ples/quickstart/src/main/resources/applicationContext.xml
+1
-0
examples/quickstart/src/test/java/org/springside/examples/quickstart/repository/TaskDaoTest.java
...pringside/examples/quickstart/repository/TaskDaoTest.java
+23
-0
examples/showcase/bin/package.bat
examples/showcase/bin/package.bat
+1
-1
modules/core/src/main/java/org/springside/modules/persistence/ByWebFilterSpecification.java
...ingside/modules/persistence/ByWebFilterSpecification.java
+48
-0
modules/core/src/main/java/org/springside/modules/persistence/SearchFilter.java
...java/org/springside/modules/persistence/SearchFilter.java
+20
-0
未找到文件。
LICENSE.txt
浏览文件 @
c434cf02
...
...
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [2006-20
07
] [www.springside.org.cn]
Copyright [2006-20
12
] [www.springside.org.cn]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
...
...
examples/quickstart/bin/package.bat
浏览文件 @
c434cf02
...
...
@@ -3,6 +3,6 @@ echo [INFO] Package the war in target dir.
cd
%~dp0
cd
..
call
mvn
package
-Dmaven
.test.skip
=
true
call
mvn
clean
package
-Dmaven
.test.skip
=
true
cd
bin
pause
\ No newline at end of file
examples/quickstart/pom.xml
浏览文件 @
c434cf02
...
...
@@ -431,7 +431,6 @@
</dependencyManagement>
<build>
<sourceDirectory>
${project.basedir}/src/main/java2
</sourceDirectory>
<plugins>
<!-- compiler插件, 设定JDK版本 -->
<plugin>
...
...
examples/quickstart/src/main/java/org/springside/examples/quickstart/repository/TaskDao.java
浏览文件 @
c434cf02
...
...
@@ -2,12 +2,13 @@ package org.springside.examples.quickstart.repository;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.data.jpa.repository.Modifying
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
import
org.springside.examples.quickstart.entity.Task
;
public
interface
TaskDao
extends
PagingAndSortingRepository
<
Task
,
Long
>
{
public
interface
TaskDao
extends
PagingAndSortingRepository
<
Task
,
Long
>
,
JpaSpecificationExecutor
<
Task
>
{
Page
<
Task
>
findByUserId
(
Long
id
,
Pageable
pageRequest
);
...
...
examples/quickstart/src/main/resources/applicationContext.xml
浏览文件 @
c434cf02
...
...
@@ -42,6 +42,7 @@
<!-- Spring Data Jpa配置 -->
<jpa:repositories
base-package=
"org.springside.examples.quickstart"
transaction-manager-ref=
"transactionManager"
entity-manager-factory-ref=
"entityManagerFactory"
/>
<bean
class=
"org.springside.modules.persistence.ByWebFilterSpecification"
/>
<!-- Jpa 事务配置 -->
<bean
id=
"transactionManager"
class=
"org.springframework.orm.jpa.JpaTransactionManager"
>
...
...
examples/quickstart/src/test/java/org/springside/examples/quickstart/repository/TaskDaoTest.java
浏览文件 @
c434cf02
...
...
@@ -2,6 +2,8 @@ package org.springside.examples.quickstart.repository;
import
static
org
.
junit
.
Assert
.*;
import
java.util.List
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
...
...
@@ -9,14 +11,22 @@ import org.springframework.data.domain.PageRequest;
import
org.springframework.data.domain.Sort.Direction
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springside.examples.quickstart.entity.Task
;
import
org.springside.modules.persistence.ByWebFilterSpecification
;
import
org.springside.modules.persistence.SearchFilter
;
import
org.springside.modules.persistence.SearchFilter.Operator
;
import
org.springside.modules.test.spring.SpringTransactionalTestCase
;
import
com.google.common.collect.Lists
;
@ContextConfiguration
(
locations
=
{
"/applicationContext.xml"
})
public
class
TaskDaoTest
extends
SpringTransactionalTestCase
{
@Autowired
private
TaskDao
taskDao
;
@Autowired
private
ByWebFilterSpecification
spec
;
@Test
public
void
findTasksByUserId
()
throws
Exception
{
Page
<
Task
>
tasks
=
taskDao
.
findByUserId
(
2L
,
new
PageRequest
(
0
,
100
,
Direction
.
ASC
,
"id"
));
...
...
@@ -26,4 +36,17 @@ public class TaskDaoTest extends SpringTransactionalTestCase {
tasks
=
taskDao
.
findByUserId
(
99999L
,
new
PageRequest
(
0
,
100
,
Direction
.
ASC
,
"id"
));
assertEquals
(
0
,
tasks
.
getContent
().
size
());
}
@Test
public
void
fineTasksByFilter
()
{
SearchFilter
filter
=
new
SearchFilter
(
"title"
,
"Study PlayFramework 2.0"
,
Operator
.
EQ
);
List
<
Task
>
tasks
=
taskDao
.
findAll
(
spec
.
byWebFilter
(
Lists
.
newArrayList
(
filter
),
Task
.
class
));
assertEquals
(
1
,
tasks
.
size
());
filter
=
new
SearchFilter
(
"description"
,
"playframework"
,
Operator
.
LIKE
);
tasks
=
taskDao
.
findAll
(
spec
.
byWebFilter
(
Lists
.
newArrayList
(
filter
),
Task
.
class
));
assertEquals
(
1
,
tasks
.
size
());
}
}
examples/showcase/bin/package.bat
浏览文件 @
c434cf02
...
...
@@ -3,6 +3,6 @@ echo [INFO] Package the war in target dir.
cd
%~dp0
cd
..
call
mvn
package
-Dmaven
.test.skip
=
true
call
mvn
clean
package
-Dmaven
.test.skip
=
true
cd
bin
pause
\ No newline at end of file
modules/core/src/main/java/org/springside/modules/persistence/ByWebFilterSpecification.java
0 → 100644
浏览文件 @
c434cf02
package
org.springside.modules.persistence
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.PersistenceContext
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Expression
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
import
javax.persistence.metamodel.SingularAttribute
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springside.modules.persistence.SearchFilter.Operator
;
import
com.google.common.collect.Lists
;
public
class
ByWebFilterSpecification
{
@PersistenceContext
private
EntityManager
entityManager
;
public
<
T
>
Specification
<
T
>
byWebFilter
(
final
List
<
SearchFilter
>
filters
,
final
Class
<
T
>
clazz
)
{
return
new
Specification
<
T
>()
{
@Override
public
Predicate
toPredicate
(
Root
<
T
>
root
,
CriteriaQuery
<?>
query
,
CriteriaBuilder
builder
)
{
List
<
Predicate
>
predicates
=
Lists
.
newArrayList
();
for
(
SearchFilter
filter
:
filters
)
{
SingularAttribute
<
T
,
?>
attr
=
entityManager
.
getMetamodel
().
entity
(
clazz
)
.
getDeclaredSingularAttribute
(
filter
.
fieldName
);
if
(
filter
.
operator
.
equals
(
Operator
.
EQ
))
{
predicates
.
add
(
builder
.
equal
(
root
.
get
(
attr
),
filter
.
value
));
}
if
(
filter
.
operator
.
equals
(
Operator
.
LIKE
))
{
predicates
.
add
(
builder
.
like
((
Expression
<
String
>)
root
.
get
(
attr
),
"%"
+
filter
.
value
+
"%"
));
}
}
if
(
predicates
.
size
()
>
0
)
{
return
builder
.
and
(
predicates
.
toArray
(
new
Predicate
[
predicates
.
size
()]));
}
return
builder
.
conjunction
();
}
};
}
}
modules/core/src/main/java/org/springside/modules/persistence/SearchFilter.java
0 → 100644
浏览文件 @
c434cf02
package
org.springside.modules.persistence
;
public
class
SearchFilter
{
public
enum
Operator
{
EQ
,
LIKE
}
public
String
fieldName
;
public
Object
value
;
public
Operator
operator
;
public
SearchFilter
(
String
fieldName
,
Object
value
,
Operator
operator
)
{
super
();
this
.
fieldName
=
fieldName
;
this
.
value
=
value
;
this
.
operator
=
operator
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录