今天又一个需求,是查询是传入的是一个集合的参数,而使用的是注解的开发,并且条件是有多个,根据是否为空,进行动态的变动处理,所以不能使用<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;
}
}