MyBatis与Mysql字段映射的三种方式

来源:互联网 发布:咏春拳可以自学吗 知乎 编辑:程序博客网 时间:2024/06/15 10:06

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@AllArgsConstructorpublic 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实际的操作是去掉了下划线,并把大写字母转换成小写字母。

0 0