#{}:
直接传的属性值,类似这样的 是加了“”的
#{doctorId,jdbcType=BIGINT}
${}:
这种不加引号,一般在orderby中使用。如下
order by
${key} ${value}
**
* @Author xty
* @Description
* @Date 15:41 2018/11/05
*/
public class OutPatientEncounterDetailRequest extends PageRequest {
private static final long serialVersionUID = -2037535116111838237L;
@ApiModelProperty("排序标识(不允许出现数据库字段名称)")
private String orderKey;
@ApiModelProperty("排序类型(升序(asc)、降序(desc))")
private String orderType = "asc";
@ApiModelProperty(value = "排序map",hidden = true)
private Map sortMap;
其中数据库字段名为了安全性不能暴露在前段。因此自定义标识在后端转换存入map中。以至于字段排序的传入顺序让前段拼接完传入。
**
* @Author xty
* @Description
* @Date 15:41 2018/11/05
*/
public Map getSort(OutPatientEncounterDetailRequest request) {
Map sortmap = new HashMap<>();
String[] keys = request.getOrderKey().split(",");
String[] types = request.getOrderType().split(",");
for (int i = 0; i < keys.length; i++) {
if ("a".equals(keys[i])) {
sortmap.put("数据库字段名", types[i]);
} else if ("b".equals(keys[i])) {
sortmap.put("数据库字段名", types[i]);
} else if ("c".equals(keys[i])) {
sortmap.put("数据库字段名", types[i]);
}
}
Map resultMap = new HashMap<>();
for (Map.Entry entry : sortmap.entrySet()) {
String key = "a." + entry.getKey();
resultMap.put(key, entry.getValue());
}
return resultMap;
}
传参类似这样
{
"patientDivision":1,
"encounterStatus":2,
"orderKey":"b,a",
"orderType":"desc,desc"
}
动态把排序字段和排序规则放入map。然后放入xml里面执行
还发现了当没有数据的时候 mybatis是不执行orderby的 。
StringEscapeUtils.escapeSql(queryStr)这个方法可以防止sql注入