我正在使用Fanbatis框架来访问MySQL数据库。这里的文档:http://www.talesframework.org/fanbatis/表示我可以使用@Column注释将类属性映射到具有不同名称的列:
@Column{name="xx"} - By default column name is assumed to be the field name,
to change this use this annotation on a field
我有这门课......
using fanbatis
@Table {name = "APPS"}
class App
{
@Primary
Str? id
Str? name
@Column{name="description"}
Str? descr
}
使用此SQL创建的APPS表:
create table APPS (
ID varchar(36) not null,
NAME varchar(100) not null,
DESCRIPTION varchar(400) ,
primary key (ID)
);
我正在尝试使用此DAO从数据库中检索记录
class AppDao
{
static App? findById(Str id)
{
S<|
select * from apps where id = #{id}
|>
}
}
我的代码编译得很好,但是当我运行它时,传入现有记录的ID,它从数据库中检索记录并设置与列名匹配的属性值,但app.descr仍然为null 。但是,如果我只是从“descr”属性中删除@Column注释并将其重命名为与列(“description”)匹配,那么代码运行正常并返回预期值。
-- Run: auth::TestAppDao.testFindById... Test setup! app.id: 0615a6cb-7bda-cc40-a274-00130281bd51 app.name: MyApp app.descr: null TEST FAILED sys::TestErr: Test failed: null != "MyApp descr" [sys::Str] fan.sys.Test.err (Test.java:206) fan.sys.Test.fail (Test.java:198) fan.sys.Test.verifyEq (Test.java:121) fan.sys.Test.verifyEq (Test.java:90) auth::TestAppDao.testFindById (TestAppDao.fan:36) java.lang.reflect.Method.invoke (Unknown) fan.sys.Method.invoke (Method.java:559) fan.sys.Method$MethodFunc.callList (Method.java:204) fan.sys.Method.callList (Method.java:138) fanx.tools.Fant.runTest (Fant.java:191) fanx.tools.Fant.test (Fant.java:110) fanx.tools.Fant.test (Fant.java:32) fanx.tools.Fant.run (Fant.java:284) fanx.tools.Fant.main (Fant.java:327) Test teardown!
我做错了什么或者这是Fanbatis的错误?
答案 0 :(得分:1)
这可能是由于区分大小写 - 请参阅MySQL 9.2.2. Identifier Case Sensitivity
虽然数据库和表名在某些情况下不区分大小写 平台,您不应该使用给定的数据库或表 同一陈述中的不同案例。以下声明 不起作用,因为它将表引用为my_table和as MY_TABLE:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
尝试:
@Column{name="DESCRIPTION"}
this question中也提到了这一点。