Mybatis通过GNDL语法引用静态常量或者枚举类型
代码如下:
Mybatis xml mapper语句
<select id="listModelsToProTps" resultType="com.voyageone.ecerp.model.wms.WmsBtShipmentModel">
SELECT * from wms_bt_shipment${partition}
WHERE port =${@com.voyageone.ecerp.domain.constant.wms.WmsConstant$Port@RST.value}
AND
tps_flg in (${@com.voyageone.ecerp.domain.enums.wms.WmsEnums$TpsFlg@NOT_HANDLE.value},
${@com.voyageone.ecerp.domain.enums.wms.WmsEnums$TpsFlg@CREATED.value})
AND status != ${@com.voyageone.ecerp.domain.enums.wms.WmsEnums$ShipmentStatus@OPEN.value};
</select>
枚举定义:
/*
对应的枚举代码:${@com.voyageone.ecerp.domain.enums.wms.WmsEnums$TpsFlg@CREATED.value}
*/
public enum TpsFlg {
NOT_HANDLE("0"),
CREATED("1"),
SHIPPED("2");
private String value;
TpsFlg(String val) {
this.value = val;
}
//这里定义了mybatis调用的方法成员,对应ms$TpsFlg@CREATED.value中的value,这应该和序列化有关
public String value() {
return value;
}
}
常量类型定义
/**
* 港口
* 对应的mapper xml代码:${@com.voyageone.ecerp.domain.constant.wms.WmsConstant$Port@RST.value}
*/
public final static class Port extends AbstractTypedConstant<Integer> {
public static final Port RST = new Port(28);
private Port() {
}
public Port(Integer value) {
this.value = value;
}
}
总结: 引用语法规则:${@path$subClass@Attr.getValueMethod}
https://commons.apache.org/proper/commons-ognl/language-guide.html
在mybatis的映射xml文件调用java类的方法:
1.
SELECT *
FROM
EC_CORE_USER
WHERE
(user_name=#{userName} or mail =#{userName} or mobile_phone = '${@net.ytoec.framework.security.EncryptionDecryption@dSecret(userName)}') and user_password=#{userPassword}
入上面代码所示。此处应注意,方法必须为静态方法。
2.获取类里面的常量:
r.czmc='${@com.ytoxl.module.datahub.kernel.dataobject.EcSystemLog@THE_AUDIT}'
3.判断是否为null:
<iftest="@org.apache.commons.lang.StringUtils@isNotBlank(province)">andjdo.province=#{province}</if>
---------------------
版权声明:本文为CSDN博主「sky_xin」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sky_xin/article/details/84809782