Mybatis注解开发传入集合参数

mac2025-02-28  5

今天又一个需求,是查询是传入的是一个集合的参数,而使用的是注解的开发,并且条件是有多个,根据是否为空,进行动态的变动处理,所以不能使用<script></script>的方式,只能使用单独的类进行封装sql,实现的代码如下:

Mybatis方法:

 

Mybatis调用方法:

@SelectProvider(type = RoleMapper.RoleDaoProvider.class, method = "findAll") List<AdministratorRole> findAll(AdministratorRole role,List<Long> parentIdList);

内部类:

class UserDaoProvider { public String findAll(AdministratorRole role,List<Long> parentIdList) { SQL sql = new SQL() { { SELECT( "t1.*,t2.agent_name" ); FROM( "administrator_role t1 " ); LEFT_OUTER_JOIN( " agent t2 on t1.agent_id = t2.agent_id" ); WHERE( "t1.is_delete=0" ); if (StringUtils.isNotBlank( role.getRole_name() )) { WHERE( " t1.role_name like \"%"+role.getRole_name()+"%\" " ); } } }; String sqlStr = sql.toString(); //代理商查询条件 if (parentIdList!= null && parentIdList.size()>0) { sqlStr +=" and t1.agent_id in ("; for ( int i=0;i<parentIdList.size();i++) { if(i == parentIdList.size()-1){ sqlStr += parentIdList.get( i ); break; } sqlStr += parentIdList.get( i )+","; } sqlStr +=" )"; } if(StringUtils.isNotEmpty( role.getOpenFlag() )){ if("1".equals( role.getOpenFlag())){ sqlStr+= " order by t1.is_disable desc" ; } if("0".equals( role.getOpenFlag())){ sqlStr+= " order by t1.is_disable asc"; } } if(StringUtils.isNotEmpty( role.getOrderTime() )){ if(StringUtils.isNotEmpty( role.getOpenFlag() )){ if("1".equals( role.getOrderTime() )){ sqlStr+= " , t1.create_datetime desc"; } if("0".equals( role.getOrderTime() )){ sqlStr+= " , t1.create_datetime asc"; } }else{ if("1".equals( role.getOrderTime() )){ sqlStr+= " order by t1.create_datetime desc"; } if("0".equals( role.getOrderTime() )){ sqlStr+= " order by t1.create_datetime asc"; } } } Integer pageNo = role.getPageNo(); Integer pageSize = role.getPageSize(); if (pageNo != null && pageSize != null) { int first = (pageNo - 1) * pageSize; sqlStr += " limit " + first + "," + pageSize; } return sqlStr; } }

 

最新回复(0)