Open yunyexiansheng opened 4 years ago
这个很简单的,POJO都实现了,返回Map的更容易实现了,直接将返回类型 List
1、Mapper接口:
@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectMapByExampleMapper {
/**
* 根据Example条件进行查询
*
* @param example
* @return
*/
@SelectProvider(type = ExampleProvider.class, method = "dynamicSQL")
List<Map<String, Object>> selectMapByExample(Example example);
}
2、ExampleProvider中 selectMapByExample 方法对应实现:
public String selectMapByExample(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder("SELECT ");
if (isCheckExampleEntityClass()) {
sql.append(SqlHelper.exampleCheck(entityClass));
}
sql.append("<if test=\"distinct\">distinct</if>");
sql.append(SqlHelper.exampleSelectColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.exampleWhereClause());
sql.append(SqlHelper.exampleOrderBy(entityClass));
sql.append(SqlHelper.exampleForUpdate());
return sql.toString();
}
个人感觉 Example 组装各种动态条件很便利,想使用通用 Mapper 实现动态查询。表目前可以实现动态指定,字段也可以,只是发现返回类型必须是 POJO,因为返回字段的不确定性,所以很难写出 POJO。
会报错,内容如下: