【MyBatis从入门到入土】3 - 字段和属性不一致的问题

6 字段和属性不一致的问题

6.1 问题展示

在JDBC中,我们遇到过数据库表名和Java的类的属性不一致问题,接下来我们修改一下项目,重现这个问题:
我们知道我们数据库表user字段为:idnamepwd

mysql> SHOW COLUMNS FROM user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| pwd   | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

接下来我们来修改对应类User的属性,将pwd改为password

public class User {
    private int id;
    private String name;
    private String password;
}

执行我们的测试方法

public class UserMappingTest {
    @Test
    public void test() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapping mapper = sqlSession.getMapper(UserMapping.class);

        User user = mapper.getUserById(1);

        System.out.println(user);

        sqlSession.close();
    }
}

结果为

User{id=1, name='狂神', password=null}

可以看到password这一列的值为null,那么我们该如何解决这个问题呢?
执行SQL语句的时候利用别名

<select id="getUserById" resultType="com.cap.pojo.User" parameterType="int">
    SELECT id, name, pwd password FROM mybatis.user
    WHERE id = #{id};
</select>

这种方式相信你在学习JDBC的时候也用过,那么接下来来介绍MyBatis中的另外种方式!

6.2 结果映射 ResultMap

  • ResultMap在MyBatis是一种很强大而且十分好用的元素。它的设计理念是:

The design of the ResultMaps is such that simple statements don’t require explicit result mappings at all, and more complex statements require no more than is absolutely necessary to describe the relationships. ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

下面我们来使用ResultMap来解决字段和属性不一致的问题
首先创建resultMap

    <resultMap id="userResultMap" type="user">
        <!-- column对应数据库表中字段,property对应实体类中属性 -->
        <result column="id" property="id"></result>
        <result column="name" property="name"></result>
        <result column="pwd" property="password"></result>
    </resultMap>
  • id:当前命名空间的唯一标识符,可以用来引用当前的resultMap
  • type:一个Java类的全限定类名,或者一个类的别称

创建resultMap后就在<select>中直接引用了,并且去掉原来的resultType

    <select id="getUserById"  resultMap="userResultMap" parameterType="int">
        SELECT id, name, pwd FROM mybatis.user
        WHERE id = #{id};
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值