一、数据库中表的设计
|
|
二、实体类
public
class
User {
private
int
id;
private
String
name;
private
String
password
;
public
int
getId() {
return
id;
}
public
void
setId(int
id) {
this.id
=
id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this.name
=
name;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String
password) {
this.password
=
password;
}
@Override
public
String toString() {
return
"User [id="
+ id
+ ", name="
+ name
+ ", password="
+ password
+
"]";
}
}
三、mapper映射文件
<!-- 查询单个用户 -->
<select
id="selectUser"
resultType="User">
select * from user where id = #{id}
</select>
四、问题:密码没有获取到
原因:mybatis会根据查询的列名(会将列名转为小写)去进行设值(列名setter方法)。
五、解决列名和属性名不一致的办法
- 为列名指定别名,别名和Java实体类的属性名一致
<select
id="selectUser"
resultType="User">
select id,
Name, pwd
password from user where id = #{id}
</select>
|
这里实际上是根据实体类中的setter方法名来判断是否一致的,属性名可以随便取。如:setPassword(String password),对应的
属性名可以是sex或者其他都可以。
|
- 设置结果映射类型
<select
id="selectUser"
resultMap="UserMap">
select id, Name, pwd from user where id = #{id}
</select>
<resultMap
type="User"
id="UserMap">
<!-- id标签为主键 -->
<id
column="id"
property="id"/>
<!-- column是数据库中表的列名,property是对应实体类的属性名 -->
<result
column="name"
property="name"/>
<result
column="pwd"
property="password"/>
</resultMap>
本文介绍了一个关于MyBatis在处理数据库查询时遇到的密码字段无法正确映射到Java实体类的问题,并提供了两种解决方案:一是通过SQL查询时为字段指定别名;二是使用resultMap元素进行自定义映射。

被折叠的 条评论
为什么被折叠?



