简单的介绍一下使用场景,DAO层用Spring Data实现,dao 只有接口,实现类是容器启动时动态字节码生成,接口里定义方法,方法上@Query 里写JPQL查询语句。
基于以上的限制,如果对一个实体做查询,条件有多个,而且每个条件又不是必填的,怎么弄?参数肯定必须传,传Null或空字符串肯定不行,今天下午项目组里就有人遇到这个问题了。
我之前搞过,但是代码没找到,自己回想一下又试了试成了,然后代码丢给PG了。
这回代码贴出来,省得再丢,代码如下:
DAO接口
1
2
3
4
5
6
|
public interface ActivityDao extends JpaRepository<Activity, Integer> { @Query ( "SELECT a FROM Activity a WHERE (a.code=:code OR :code = null) AND (a.name=:name OR :name = null)" ) public List<Activity> findByCodeAndName( @Param ( "code" ) String code, @Param ( "name" ) String name); } |
Junit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@RunWith (SpringJUnit4ClassRunner. class ) @ContextConfiguration (locations = "classpath:META-INF\appContext.xml" ) public class ActivityDaoTest extends AbstractJUnit4SpringContextTests { @Resource private ActivityDao dao; @Test public void test() { // List<Activity> list = dao.findByCodeAndName("33", "3"); List<Activity> list = dao.findByCodeAndName( "33" , null ); System.out.println(list.size()); } } |