//select * from table where name = ? limit 0,20
createQuery().where("name",name).list()
// select * from table where name like ?||'%';
// 构造并调用其他的dao
DefaultDSLQueryService.createQuery(userDao)
.where("name$like$startWith",name)
.listNoPaging();
//AbstractSqlTermCustomer提供了一些便利的方法
@org.springframework.stereotype.Component //注入到spring自动开启支持此条件
public class UserInDepartmentTerm extends AbstractSqlTermCustomizer{
@Override
public String getTermType() {
//对应Term参数中的属性termType
return "user-in-dept";
}
@Override
public Dialect[] forDialect() {
//对特定对数据库类型生效,返回null时对全部支持对数据库类型生效
return null;
}
@Override
public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) {
//当传入了my-term条件对时候,会调用此方法进行拼接
//对传入对参数进行转换,此步骤为必须的
ChangedTermValue termValue =createChangedValue(term);
//转换参数,将参数转为集合,以支持in查询.
List<Object> idList = BoostTermTypeMapper.convertList(column, termValue.getOld());
SqlAppender appender= new SqlAppender();
appender.add(createColumnName(column,tableAlias),"in (select user_id from user_department where t_id");
//根据参数的数量,构造对应的=或者in条件
Object newValue= appendCondition(idList,wherePrefix,appender);
appender.add(")");
//设置新的值到条件中
termValue.setValue(newValue);
return appender;
}
}
// where user_id in(select user_id from user_department where t_id = ? )
createQuery().where("userId$user-in-dept","test")