码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis学习(四、解决属性名和字段不一致)

时间:2021-03-02 12:37:44      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:三范式   设计   第三范式   null   文件中   优秀   新建   lang   sql   

四、解决属性名和字段名不一致

1.问题

新建一个项目,使数据库与实体类字段名称不一致

public class User {
    private int id;
    private String name;
    private String password;//数据库中为pwd

查询出来初选问题:

User{id=3, name=‘王二‘, password=‘null‘}
select * from mybatis.user where id=#{id}
//类型处理器:如果实体类中有同名字段,直接将数据库查询与实体类属性匹配
select id,name,pwd from mybatis.user where id=#{id}

在这里显然类型处理器找不到实体类中的‘pwd’

解决方法:

  • 起别名

    select id,name,pwd as password from mybatis.user where id=#{id}
    
  • resultMap(重点)

2.resultMap(结果集映射)

mapper配置文件中resultMap

id	name	pwd
id	name	password

mapper配置文件中改为:

<!--结果集映射-->
<resultMap id="UserMap" type="User">
    <!--column:数据库中的字段 ; property:实体类中的属性-->
    <result column="id" property="id"/><!--一样可以不写-->
    <result column="name" property="name"/>
    <result column="pwd" property="password"/>
</resultMap>
<!--resultMap中定义一个自己取得名字-->
<select id="getUserById" parameterType="int" resultMap="UserMap">
    select * from mybatis.user where id=#{id}
</select>
  • resultMap 元素是 MyBatis 中最重要最强大的元素。
  • ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。
  • ResultMap 最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地用到他们。 (数据库字段和实体类属性不一样才用)
  • 如果世界总是这么简单就好了。(官方吐槽 (〃′皿`)q)
  • MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们不总都是这样。 如果能有一种完美的数据库映射模式,所有应用程序都可以使用它,那就太好了,但可惜也没有。 而 ResultMap 就是 MyBatis 对这个问题的答案。

mybatis学习(四、解决属性名和字段不一致)

标签:三范式   设计   第三范式   null   文件中   优秀   新建   lang   sql   

原文地址:https://www.cnblogs.com/LiuOneZero/p/14467167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!