MyBatis中使用ResultMap映射实体类

8 篇文章 0 订阅
8 篇文章 0 订阅

MyBatis中使用ResultMap映射实体类

本文阐述了在MyBatis中使用ResultMap映射实体类的具体操作步骤,并包含详细的代码,

主要是学习过程中的笔记,版权所有,转载请注明出处

示例工程:mybatis-demo2

1、背景

1)我们在实际开发的过程中,往往会经常遇到实体类的属性和数据库表字段名称不一致的情况,

​ 例如:数据库字段是下划线方式的,而实体类一般是驼峰命名法

2)这时就需要使用ResultMap将数据库的字段与实体类进行映射

2、具体步骤

2.1、数据库表-使用MySql数据库

1)我们使用之前的订单信息表tb_order_info作为演示,数据库的字段采用下划线的方式进行命名,具体的建表语句如下

-- 订单信息表
create table tb_order_info(
	order_id			varchar(10)						not null comment '订单id',
	payment				decimal(18,2)	default 0.00		comment '支付金额',
	goods_name			varchar(256)	default ''			comment '商品名称',
	payment_type		char(1)			default	'1'			comment '支付类型 : 1-在线支付,2-货到付款',
	post_fee			decimal(18,2)	default 0.00		comment '邮费',
	status				char(1)			default '1'			comment '订单状态:1-未付款,2-已付款,3-未发货,4-已发货,5-交易成功,6-交易关闭',
	create_time			date comment '订单创建时间',
	constraint pk_order_id primary key(order_id)
) engine=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 comment '订单信息表';

2.2、新建数据库实体-OrderInfo

1)新建数据库实体类OrderInfo,将实体类的属性字段采用驼峰命名法,用以区别

  • OrderInfo
package com.iambest.study.entity;

import java.math.BigDecimal;
import java.util.Date;

/**
 *
 * 订单信息表的实体类<br/>
 *
 * @author zhangwei
 * @since 1.0.0
 * @version 1.0.0
 */
public class OrderInfo {

    private String orderId;
    private BigDecimal payment;
    private String goodsName;
    private String paymentType;
    private BigDecimal postFee;
    private String status;
    private Date createTime;

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public BigDecimal getPayment() {
        return payment;
    }

    public void setPayment(BigDecimal payment) {
        this.payment = payment;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getPaymentType() {
        return paymentType;
    }

    public void setPaymentType(String paymentType) {
        this.paymentType = paymentType;
    }

    public BigDecimal getPostFee() {
        return postFee;
    }

    public void setPostFee(BigDecimal postFee) {
        this.postFee = postFee;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "OrderInfo [orderId=" + orderId + ", payment=" + payment
                + ", goodsName=" + goodsName + ", paymentType=" + paymentType
                + ", postFee=" + postFee + ", status=" + status
                + ", createTime=" + createTime + "]";
    }
}

2.3、调整SqlMapper的配置

1)首先使用<resultMap>标签定义数据库字段和实体类的属性之间的映射关系

2)然后在执行sql查询时将返回结果指定为该resultMap即可

3)如下示例:

  • OrderInfoMapper.xml

    <!-- 定义基本映射 -->
    <resultMap id="baseResultMap" type="com.iambest.study.entity.OrderInfo">
        <result property="orderId" column="order_id" jdbcType="VARCHAR" javaType="string"></result>
        <result property="payment" column="payment" jdbcType="DECIMAL" javaType="java.math.BigDecimal"></result>
        <result property="goodsName" column="goods_name" jdbcType="VARCHAR" javaType="string"></result>
        <result property="paymentType" column="payment_type" jdbcType="VARCHAR" javaType="string"></result>
        <result property="postFee" column="post_fee" jdbcType="DECIMAL" javaType="java.math.BigDecimal"></result>
        <result property="status" column="status" jdbcType="VARCHAR" javaType="string"></result>
        <result property="createTime" column="create_time" jdbcType="DATE"></result>
    </resultMap>

    <!-- 定义所有的列 -->
    <sql id="baseColumn">order_id,payment,goods_name,payment_type,post_fee,status,create_time</sql>

    <!-- 根据id查询订单信息 -->
    <select id="selectOne" resultMap="baseResultMap" parameterType="string">
        select
        <include refid="baseColumn"/>
        from tb_order_info
        where order_id=#{order_id}
    </select>

2.4、Mapper接口

1)在Mapper接口中新增selectOne方法,返回结果为OrderInfo实体类

   /**
     *
     * 根据订单的ID查询订单的信息
     *
     * @param order_id
     * @return
     */
    public OrderInfo selectOne(String order_id);

2.5、编写单元测试并执行

2.5.1、单元测试代码

1)在单元测试中编写如下的代码:

   @Test
    public void testResultMap() throws IOException{
        String config = "config/SqlMapConfig-insert.xml";
        Reader reader = Resources.getResourceAsReader(config);
        // 创建Builder对象
        SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
        // 创建Factory对象
        SqlSessionFactory factory = sfb.build(reader);
        // 通过factory对象生成session对象
        SqlSession session = factory.openSession();
        // 获取到Mapper接口对象
        OrderInfoMapper mapper = session.getMapper(OrderInfoMapper.class);
        OrderInfo entity = mapper.selectOne("102000000");
        System.out.println(entity);
        session.close();
    }
2.5.2、执行单元测试

1)运行单元测试代码,控制台可以正确的输出查询出的数据,并且数据库的实体对象的各个属性都能争取的赋值,表示成功,如下图所示:

在这里插入图片描述

### 回答1: 使用Mybatis创建resultMap映射是很简单的,你只需要在映射文件使用<resultMap>标签即可。例如: ``` <resultMap id="userMap" type="User"> <id column="id" property="id" /> <result column="username" property="username" /> <result column="password" property="password" /> </resultMap> ``` 这里我们创建了一个名为"userMap"的resultMap,它映射了一个名为"User"的实体类。其,<id>标签表示实体类的主键属性,<result>标签则表示实体类的普通属性。 要创建一个查询语句,使用这个resultMap,你只需要在<select>标签引用这个resultMap即可。例如: ``` <select id="selectUser" resultMap="userMap"> SELECT id, username, password FROM user WHERE id = #{id} </select> ``` 这里我们创建了一个名为"selectUser"的查询语句,它使用了前面定义的"userMap"作为结果集映射。这个查询语句将返回一个id等于指定值的用户对象。 ### 回答2: 使用MyBatis创建resultMap可以通过以下步骤实现: 1. 在MyBatis的配置文件(通常是`mybatis-config.xml`)配置typeAliases,用于将Java类别名映射到SQL结果集的列名。例如: ``` <typeAliases> <typeAlias type="com.example.User" alias="User"/> </typeAliases> ``` 2. 在映射文件(通常是`mapper.xml`)创建resultMap元素。resultMap用于定义Java对象和SQL结果集之间的映射关系。例如: ``` <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> </resultMap> ``` 在上面的例子,`id`属性将Java对象的`id`字段与SQL结果集的`id`列进行映射;`name`和`age`属性分别映射到对应的列。 3. 在映射文件使用resultMap引用已创建的resultMap。例如: ``` <select id="getUserById" resultMap="userMap"> SELECT id, name, age FROM user WHERE id = #{id} </select> ``` 在上面的例子,`getUserById`是一个查询语句,它使用了之前创建的`userMap` resultMap。 通过以上步骤,我们可以使用MyBatis创建resultMap来实现Java对象和SQL结果集之间的映射关系,从而方便地操作数据库。 ### 回答3: 使用MyBatis创建结果映射ResultMap)是为了将查询结果集的列映射Java对象的属性上。通过创建ResultMap,可以方便地将数据库的数据封装到Java对象。 下面是使用MyBatis创建ResultMap的步骤: 1. 在mybatis-config.xml文件配置MyBatis的数据源和其他相关配置。 2. 在映射文件(Mapper编写SQL语句,包括查询语句以及对应的列名。 3. 在映射文件通过<ResultMap>标签创建ResultMap,指定Java对象的类型以及与数据库列的映射关系。 示例代码如下: <resultMap id="userMap" type="com.example.User"> <id property="id" column="user_id"/> <result property="username" column="user_name"/> <result property="age" column="user_age"/> </resultMap> 在上面的代码,id属性指定了Java对象的属性名,column属性指定了数据库对应的列名。 4. 在映射文件使用<select>标签进行查询操作,并在标签内使用<resultMap>指定ResultMap的id。 示例代码如下: <select id="getUser" resultMap="userMap"> SELECT * FROM user WHERE user_id = #{id} </select> 在上面的代码resultMap属性指定了ResultMap的id,即userMap。 通过以上步骤,就成功创建了一个ResultMap映射查询结果集到Java对象。 需要注意的是,这只是最基本的创建ResultMap的示例,实际开发还可以使用其他一些高级特性来处理复杂的映射逻辑,比如使用association和collection等标签来处理一对一和一对多的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_David

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值