MyBatis与Mysql字段映射的三种方式
2017-02-14 20:13
369 查看
Java中属性命名一般使用驼峰命名法,mysql中的字段一般使用“_”来连接两个单词。这样就需要中间有一层转换,使两边能够对应起来。下面是三种不同的实现方式,根据情况做出合理的选择。
项目中的Model,使用了lombok,省去了属性的get、set:
2、方式二:设置别名,返回列的别名和Model中的属性一致,所以可以映射。
3、方式三:设置MybatisProperties ——>Configuration——>mapUnderscoreToCamelCase的属性值,这个属性的含义就是自动转换mysql中的字段,去掉下划线并转换成驼峰命名字段。源码中默认设置为false,所以想要MyBatis自动转换就需要配置一下,只需要在mybatis配置文件中加上如下代码即可。
mapUnderscoreToCamelCase字面意思是转换下划线为驼峰命名,实际上真的如此吗?实验得出的结论是,被忽悠了。假如Model在的属性名不便,把mysql中的user_name改为use_rname、use_r_name,把user_age改为userag_e、uSerAge,实验的结果得出依然自动映射了。所以mapUnderscoreToCamelCase实际的操作是去掉了下划线,并把大写字母转换成小写字母。
场景
数据库中表结构: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实际的操作是去掉了下划线,并把大写字母转换成小写字母。
相关文章推荐
- MyBatis总结——加载mappers映射文件的三种方式
- mybatis的sql中字段两种映射(映射到实体)方式
- 使用MyBatis的默认(数据库字段和属性名忽略大小匹配)映射方式,必须有无惨构造函数。
- 在Mybatis中,解决数据库字段名与java实体类属性名不一致的三种方式
- MyBatis Review——加载mappers映射文件的三种方式
- mybatis中注册映射sql的Mapper的三种方式详解
- mybatis的三种参数传递映射方式总结
- Spring+Mybatis 三种查询映射方式
- MyBatis Review——加载mappers映射文件的三种方式
- otl + mysql 查询时映射字段
- mysql 插入的三种方式
- MySQL 三种关联查询的方式: ON vs USING vs 传统风格
- MySQL substring()用法及其他截取字段方式
- MySQL的三种安装方式
- mybatis 构建SqlSessionFactory的几种方式 以及调用sql映射语句的几种方式
- MySQL 三种关联查询的方式: ON vs USING vs 传统风格
- Hibernate注解映射联合主键的三种主要方式
- myBatis中的语句映射几种特别方式
- 关于Mysql注入过程中的三种报错方式(转)
- Mybatis解决空字符串保存入Mysql数字字段的类型转换问题