1. 程式人生 > >MyBatis 中如何調用 Java 的 enum (枚舉) 字段

MyBatis 中如何調用 Java 的 enum (枚舉) 字段

註意 system not apach iss pub equals mybatis 我想

事先作成一 enum,如下:

public enum CityCode {

ALL("000"),
BEIJING("010"),
SHANGHAI("021"),

private String code;

CityCode(String code) {
this.code = code;
}

public String val() {
return this.code;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在mapper文件中,想判斷一個參數的值是否跟 CityCode.ALL 的值一致的時候,我想當然的像下面這麽寫了:

<if test="area != com.test.constant.CityCode.ALL.val" >
AND
p.`city`=#{area}
</if>
1
2
3
4
我為什麽會這麽寫?

因為之前有在 mapper 文件中判斷過 List 對象的size 是不是為 0的,就是下面這麽寫的:

<if test="statusList.size > 0" >
// to do sth.
</if>con
1
2
3
但是,結果是行,mybatis 報了下面的錯:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘com‘ not found. Available parameters are [area, param1, param2, now]

at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79) ~[mybatis-spring-1.3.0.jar:1.3.0]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447) ~[mybatis-spring-1.3.0.jar:1.3.0]
at com.sun.proxy.$Proxy22.selectList(Unknown Source) ~[?:?]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231) ~[mybatis-spring-1.3.0.jar:1.3.0]
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:128) ~[mybatis-3.4.0.jar:3.4.0]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68) ~[mybatis-3.4.0.jar:3.4.0]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53) ~[mybatis-3.4.0.jar:3.4.0]
at com.sun.proxy.$Proxy38.performance(Unknown Source) ~[?:?]
1
2
3
4
5
6
7
8
9
後來,又想起來,之前有過在 mybatis 中訪問靜態方法的示例,試了一下,果然可以,enum 修改如下:

public enum CityCode {

ALL("000"),
BEIJING("010"),
SHANGHAI("021"),

private String code;

CityCode(String code) {
this.code = code;
}

public String val() {
return this.code;
}

public static boolean isAll(String code) {
return ALL.val().equals(code);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
然後,mapper 文件修改如下:

<if test="[email protected]@isAll(area)" >
AND
p.`city`=#{area}
</if>
1
2
3
4
請註意一下語法:
@[email protected](parameter)
我上面那個test部分的第一個 ! 是用來對結果取反的,它不屬於語法的一部分。當然,你可以不用 ! 改用 not 也一樣的。

MyBatis 中如何調用 Java 的 enum (枚舉) 字段