Ibatis中的一个“There is no READABLE property named 'uId' in class 'userinfoPo”错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ibatis中的一个“There is no READABLE property named 'uId' in class 'userinfoPo”错误相关的知识,希望对你有一定的参考价值。

我在ibatis中有如下配置:

这是一个PO:
/**
* 用户基本信息
* @author Rao
* @Date 2009-10-04
* @Table (mwweb.userinfo)
*/
public class UserinfoPo
private String uId; //用户Id
private String uName; //用户登录名称
private String uNickname; //用户昵称
private String uPass; //用户密码
private String uEmail; //用户Email
private String uBirth; //用户出生日期
private int uSex; //用户性别(1男,2女)
private String uAddress; //用户地址

public String getUName()
return uName;

public void setUName(String name)
uName = name;

public String getUPass()
return uPass;

public void setUPass(String pass)
uPass = pass;

public String getUEmail()
return uEmail;

public void setUEmail(String email)
uEmail = email;

public String getUBirth()
return uBirth;

public void setUBirth(String birth)
uBirth = birth;

public int getUSex()
return uSex;

public void setUSex(int sex)
uSex = sex;

public String getUAddress()
return uAddress;

public void setUAddress(String address)
uAddress = address;

public String getUNickname()
return uNickname;

public void setUNickname(String nickname)
uNickname = nickname;

public String getUId()
return uId;

public void setUId(String id)
uId = id;



这是sqlMap中的userinfo.xml配置文件:
<!-- 新增用户 -->
<insert id="insertUserinfo" parameterClass="MWWeb.bbs.po.UserinfoPo">
<![CDATA[
INSERT INTO userinfo(
uId,
uName,
uNickname,
uPass,
uEmail,
uBirth,
uSex,
uAddress
)
values (
#uId:VARCHAR#,
#uName:VARCHAR#,
#uNickname:VARCHAR#,
#uPass:VARCHAR#,
#uEmail:VARCHAR#,
#uBirth:VARCHAR#,
#uSex:INT#,
#uAddress:VARCHAR#,
) ]]>
</insert>

我部署好了启动tomcat时出现了这样的错误:
There is no READABLE property named 'uId' in class 'MWWeb.bbs.po.UserinfoPo'

这是什么问题呢,我找了好久都没有解决。
希望各位达人能够给与指教,在下实在是感激不尽

问题补充:
我又重新部署了,不是没有编译,部署了旧的.class文件
我把get和set又重新设置了一下,但还是报同样的错误,好像和get,set没有关系

你要注意javabean的规范,首字母不要大写,第二个字母也不要大写

为 JavaBean 创建属性时,必须牢记:缩略语通常被视为一个独立的单词,而不是单个字母。例如,URL 对应的属性名应该用 url,相应的 getUrl()/setUrl(),所以 ID 还是用 id 作为属性吧,相应的 getId()/setId()。

规范中另一个特别的地方就是,第二个字母为大写的属性名要区别对待。如果属性名的第二个字母是大写的,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。

楼主注意看一下。第二个字母不要大写!
参考技术A 你把所有的
uId,uXxx....
全都改为
userId,userXxx

然后所有getter/setter都重新生成下

我上面说的命名你也改了么?
参考技术B 个人认为是你在写sqlmap时在#uId:VARCHAR#等这些在冒号左右有空格,你把这些空格去掉就ok了,之前也遇到过这些问题。就是这样解决的 参考技术C public void setUId(String id)
uId = id;


改成
public void setUId(String uId )
this.uId = uId ;

老兄,eclipse有自动生成getter and setter方法的,不要自己写,反而会出错

防止 Ibatis 中的 SQL 注入

【中文标题】防止 Ibatis 中的 SQL 注入【英文标题】:Preventing SQL Injection In Ibatis 【发布时间】:2011-04-25 01:50:59 【问题描述】:

Ibatis 中是否有任何内置功能可以帮助防止 SQL 注入攻击?我不是在寻找 Ibatis 之外的方法列表来执行此操作,我只是想知道 Ibatis 是否有任何东西可以防止 SQL 注入。

【问题讨论】:

【参考方案1】:

IBatis 在后台使用 JDBC 预处理语句,因此是安全的。但是,这只适用于您使用 # 表示法的情况。也可以使用不安全的$ 表示法将变量直接连接到您的查询中(除非您将它们转义)。有关背景信息,请参阅this article。

【讨论】:

【参考方案2】:

我猜 iBatis 使用的是准备好的语句和参数绑定,所以它是安全的。

【讨论】:

-1 - 猜测像 SQL 注入入口点一样敏感的东西 使用 $ 表示法不安全

以上是关于Ibatis中的一个“There is no READABLE property named 'uId' in class 'userinfoPo”错误的主要内容,如果未能解决你的问题,请参考以下文章

Java-iBATIS

ibatis中的参数

Spring与Ibatis整合入门

ibatIS中的isNotNullisEqualisEmpty

使用 ibatis 将字符串列表插入到多列中的表中

Ibatis中的一个“There is no READABLE property named 'uId' in class 'userinfoPo”错误