MyBatis入門03 解決字段名與實體類屬性名不相同的衝突

1、準備表和數據:

CREATE TABLE orders(
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(20), 
    order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

2、定義實體類

public class Order {
    private int id;
    private String orderNo;
    private float price;
}

3、實現getOrderById(id)的查詢:

方式一: 通過在sql語句中定義別名
<select id="selectOrder" parameterType="int" resultType="_Order">
    select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
</select>

方式二: 通過<resultMap>
<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
    select * from orders where order_id=#{id}
</select>

<resultMap type="_Order" id="orderResultMap">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>

4、定義映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.day03_mybaits.test4.orderMapper">
    <!-- 
        根據id查詢orders表得到一個order對象
     -->
    <select id="getOrder" parameterType="int" resultType="Order">
        SELECT order_id id, order_no orderNo, order_price price FROM orders WHERE order_id=#{id}
    </select>

    <select id="getOrder2" parameterType="int" resultMap="getOrder2Map">
        SELECT * FROM orders WHERE order_id=#{id}
    </select>

    <!-- 
        resultMap : 封裝一些映射關係
            id : 專門針對主鍵
            result : 針對一般字段
    -->
    <resultMap type="Order" id="getOrder2Map">

        <id property="id" column="order_id"/>
        <result property="orderNo" column="order_no"/>
        <result property="price" column="order_price"/>
    </resultMap>
</mapper>

5、編寫測試代碼:

package com.atguigu.day03_mybaits.test4;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.atguigu.day03_mybaits.bean.Order;
import com.atguigu.day03_mybaits.util.MybatisUtils;

/*
 * 測試: 解決字段名與實體類屬性名不相同的衝突
 */
public class Test4 {

    public static void main(String[] args) {
        SqlSessionFactory factory = MybatisUtils.getFactory();
        SqlSession session = factory.openSession();

        String statement = "com.atguigu.day03_mybaits.test4.orderMapper.getOrder";
        statement = "com.atguigu.day03_mybaits.test4.orderMapper.getOrder2";
        Order order = session.selectOne(statement , 2);
        System.out.println(order);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章