因爲我的項目裏邊已經設置返回Map的時候,將Map內的Key轉換爲駝峯的命名表達式,但是使用BaseMapper時,發現接口傳遞過來的卻是全部小寫不符合駝峯的寫法,然後我就去對比代碼,發現造成這樣的結果是因爲EntityWrapper沒有設置sqlSelect
{
"msg": "查詢成功",
"code": 0,
"data": {
"list": [
{
"fdaltertime": null,
"fdalterid": null,
"fdstatus": 1,
"fdmaxusers": null,
"fddiscountamount": 100,
"fdcreateid": null,
"fdname": "滿50減10",
"fdcreatetime": null,
"fdhaveusers": null,
"fdid": "1",
"fdminamount": 10,
"fddiscountration": null,
"fdtype": 1,
"fdstartdate": null,
"fdenddate": null
},
{
"fdaltertime": null,
"fdalterid": null,
"fdstatus": 1,
"fdmaxusers": null,
"fddiscountamount": null,
"fdcreateid": null,
"fdname": "滿500打8折",
"fdcreatetime": null,
"fdhaveusers": null,
"fdid": "2",
"fdminamount": 10,
"fddiscountration": 20,
"fdtype": 2,
"fdstartdate": null,
"fdenddate": null
}
]
}
}
public Map<String, Object> query(Map<String, Object> params) {
int status = Integer.parseInt(String.valueOf(params.get("fdStatus")));
String studentId = String.valueOf(params.get("fdStudentId"));
EntityWrapper<DiscountCoupon> wrapper = new EntityWrapper<DiscountCoupon>();
if (2==status) {//已使用
List<String> list = couponDao.getCouponIdListByStudentId(studentId);
wrapper.in("FD_ID", list);
}else {
wrapper.eq("FD_STATUS", status);
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", couponDao.selectMaps(wrapper));
return map;
}
後臺打印的sql
設置 了sqlSelect
public Map<String, Object> query(Map<String, Object> params) {
int status = Integer.parseInt(String.valueOf(params.get("fdStatus")));
String studentId = String.valueOf(params.get("fdStudentId"));
EntityWrapper<DiscountCoupon> wrapper = new EntityWrapper<DiscountCoupon>();
if (2==status) {//已使用
List<String> list = couponDao.getCouponIdListByStudentId(studentId);
wrapper.in("FD_ID", list);
}else {
wrapper.eq("FD_STATUS", status);
}
wrapper.setSqlSelect("FD_ID,FD_NAME,FD_END_DATE,FD_TYPE,FD_MIN_AMOUNT,FD_DISCOUNT_AMOUNT,FD_DISCOUNT_RATION");
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", couponDao.selectMaps(wrapper));
return map;
}
接口結果
{
"msg": "查詢成功",
"code": 0,
"data": {
"list": [
{
"fdMinAmount": 10,
"fdEndDate": null,
"fdDiscountRation": null,
"fdId": "1",
"fdDiscountAmount": 100,
"fdName": "滿50減10",
"fdType": 1
},
{
"fdMinAmount": 10,
"fdEndDate": null,
"fdDiscountRation": 20,
"fdId": "2",
"fdDiscountAmount": null,
"fdName": "滿500打8折",
"fdType": 2
}
]
}
}
追本溯源
發現Wrapper.class的源代碼
/**
* <p>
* 使用字符串數組封裝sqlSelect,便於在不需要指定 AS 的情況下通過實體類自動生成的列靜態字段快速組裝 sqlSelect,<br/>
* 減少手動錄入的錯誤率
* </p>
* @param columns 字段
* @return
*/
public Wrapper<T> setSqlSelect(String... columns) {
StringBuilder builder = new StringBuilder();
for (String column : columns) {
if (StringUtils.isNotEmpty(column)) {
if (builder.length() > 0) {
builder.append(",");
}
builder.append(column);
}
}
this.sqlSelect = builder.toString();
return this;
}
/**
* <p>
* 使用對象封裝的setsqlselect
* </p>
*
* @param column 字段
* @return
*/
public Wrapper<T> setSqlSelect(Column... column) {
if (ArrayUtils.isNotEmpty(column)) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < column.length; i++) {
if (column[i] != null) {
String col = column[i].getColumn();
String as = column[i].getAs();
if (StringUtils.isEmpty(col)) {
continue;
}
builder.append(col).append(as);
if (i < column.length - 1) {
builder.append(",");
}
}
}
this.sqlSelect = builder.toString();
}
return this;
}
/**
* <p>
* 使用對象封裝的setsqlselect
* </p>
*
* @param columns 字段
* @return
*/
public Wrapper<T> setSqlSelect(Columns columns) {
Column[] columnArray = columns.getColumns();
if (ArrayUtils.isNotEmpty(columnArray)) {
setSqlSelect(columnArray);
}
return this;
}
當沒有指定sqlSelect時,會去調用Column.class的getAs()方法
public String getAs() {
if (StringUtils.isEmpty(getColumn()) || StringUtils.isEmpty(as)) {
return StringUtils.EMPTY;
}
String quote = null;
if (isEscape() && SqlRunner.FACTORY != null) {
GlobalConfiguration globalConfig = GlobalConfigUtils.getGlobalConfig(SqlRunner.FACTORY.getConfiguration());
quote = globalConfig.getIdentifierQuote() == null ? globalConfig.getDbType().getQuote() : globalConfig.getIdentifierQuote();
}
return AS + (StringUtils.isNotEmpty(quote) ? String.format(quote, as) : as);
}