关于mybatis:MyBatis-使用resultMap-以及-一对一和一对多

记录一下从hibernate 改成 mybatis 遇到的一些问题

小问题一

运行的时候忽然发现的报错:

查看过几遍之后才发现起因: 之前的时候不小心在前面减少了一个斜杠

因为编译器不会对 sql 语句进行查看, 所以运行后盾的时候并没有报错。所以过后没发现。

而过几天之后,当运行到这条sql 语句的时候, 后盾才报了错。

所以,咱们写sql 语句的时候要小心。

以防咱们写的不对, 还能够进入mysql 执行一下这条语句看看后果。

发现问题

背景: 分页的时候发现这三列数据为空

效果图:

排查问题:

外部编号这一列的问题很快就排查了进去:

后盾与数据库字段名不统一

数据库:

后盾实体:

所以在咱们执行上面这条语句时,在进行实体映射的时候对应不上, 所以为null

 <select id="findAll" resultType="equipmentManagementSystem.entity.Equipment">
        select * from equipment
  </select>

以往的解决办法

我想起了以前 前后台字段不对应时 的解决办法:

@JsonProperty("internal_number")
private String internalNumber;

然而这个正文并没有用。

因为这个注解是json序列化时,序列化为另一个名称。 前后台就是通过 json 传递数据信息。

而目前状况是后盾与数据库的交互, ORM 把数据库映射成对象, 用不到Json。

所以此时咱们须要用到myBatis的另一个标签 resultMap

resultMap

resultMap属于mybatis返回操作后果的一个标签,能够用来映射select查问进去后果的汇合。

次要作用是将实体类中的字段与数据库表中的字段进行关联映射

resultMap 属性:

属性 形容
id 以后命名空间中的一个惟一标识,用于标识一个后果映射。
type 类的齐全限定名
extends 能够继承其余resultMap的一些写好的属性

result属性:

属性 形容
id 一个 ID 后果;标记出作为 ID 的后果能够帮忙进步整体性能
result 注入到字段或 JavaBean 属性的一般后果
association 一个简单类型的关联;许多后果将包装成这种类型
collection 一个简单类型的汇合

例子:

<mapper namespace="equipmentManagementSystem.Mybatis.EquipmentMapper">
    <!--type指向javabean类,id可自定义 -->
        <resultMap id="equipmentMap" type="equipmentManagementSystem.entity.Equipment">
            <id column="id" property="id"></id>
             <!-- property对应实体类的属性名称,column为数据库字段名 -->
            <result column="name" property="name"/>
            <result column="model" property="model"/>
            <result column="place" property="place"/>
            <result column="states" property="states"/>
            <result column="sale_time" property="saleTime"/>
            <result column="internal_number" property="internalNumber"/>
        </resultMap>
    <select id="findAll" resultMap="equipmentMap">
        select * from equipment
    </select>
</mapper>

这个时候, 咱们就能够在 column 属性写上 实体名,在 property 属性写上数据库名。
最初就映射胜利。在列表中能够看到这列。

一对一,一对多

剩下两列还为空。 起因是: 剩下两个属性都是对象

这时候就须要用到下面提到过的 association 标签了。

association

它其实就相当于: 一对一OneToOne

用法有两种:

  1. resultMap
 <association property="type" column="type_id" resultMap="equipmentManagementSystem.Mybatis.TypeMapper.typeResultMap"/>

  1. select
<association property="user" column="user_id" select="equipmentManagementSystem.Mybatis.UserMapper.findById"/>

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据