MyBatis與Mysql字段映射的三種方式

Java中屬性命名一般使用駝峯命名法,mysql中的字段一般使用“_”來連接兩個單詞。這樣就需要中間有一層轉換,使兩邊能夠對應起來。下面是三種不同的實現方式,根據情況做出合理的選擇。

場景

數據庫中表結構:

CREATE TABLE `t_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(20) DEFAULT NULL,
  `user_age` tinyint(3) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

項目中的Model,使用了lombok,省去了屬性的get、set:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description:
 * @Author: ZhOu
 * @Date: 2017/2/14
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private int id;
    private String userName;
    private int userAge;

}


解決方式

1、方式一:設置resultMap,使返回列和Model中的屬性匹配

<?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.mapper.UserMapper">

    <resultMap id="userMap" type="com.model.User">
        <id property="id" column="id" />
        <result property="userName" column="user_name"/>
        <result property="userAge" column="user_age"/>
    </resultMap>


    <select id="getOne" parameterType="Integer" resultMap="userMap">
        select id,user_name,user_age from t_user where id=#{id}
    </select>
</mapper>



2、方式二:設置別名,返回列的別名和Model中的屬性一致,所以可以映射。

   <select id="getTwo" parameterType="Integer" resultType="User">
        select id,user_name userName,user_age userAge from t_user where id=#{id}
    </select>



3、方式三:設置MybatisProperties ——>Configuration——>mapUnderscoreToCamelCase的屬性值,這個屬性的含義就是自動轉換mysql中的字段,去掉下劃線並轉換成駝峯命名字段。源碼中默認設置爲false,所以想要MyBatis自動轉換就需要配置一下,只需要在mybatis配置文件中加上如下代碼即可。

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>



mapUnderscoreToCamelCase字面意思是轉換下劃線爲駝峯命名,實際上真的如此嗎?實驗得出的結論是,被忽悠了。假如Model在的屬性名不便,把mysql中的user_name改爲use_rname、use_r_name,把user_age改爲userag_e、uSerAge,實驗的結果得出依然自動映射了。所以mapUnderscoreToCamelCase實際的操作是去掉了下劃線,並把大寫字母轉換成小寫字母。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章