04.解决数据库列名与java属性对应关系

04. 解决数据库列名与java属性对应关系

我们在使用mybatis框架的时候,在查询语句中,如果数据库列名与最后接收结构的java对象的属性名不同,就不会把结果值传输进去。

比如:

数据库列名java属性名
idid
user_nameuserName
passwordpassword
reg_timeregTime

下面解决方式都是利用这张表。

解决这种名称不匹配一共有3种方式:

1、方法一:利用列别名

我们在sql的映射文件中,使用select的时候,可以给名称不同的列起一个列别名。

	<select id="findById" parameterType="int" resultMap="userResult">
		select 
			id,
			user_name userName,
			password,
			reg_time regTime
        from t_user 
        where id = #{id}
	</select>

当然,如果每个select都使用这样写法,这样可能会出现很多重复的sql代码。

我们也可以利用sql标签将重复代码提取出来,然后使用include在需要的地方使用,相当于把代码粘贴过去的。

	<!-- 把重复的sql代码可以提炼出来,通过定义别名把sql列名和java属性对应 -->
	<sql id="selectResult">
		id,user_name userName,password,reg_time regTime
	</sql>
	
	<select id="findById" parameterType="int" resultMap="userResult">
		select <include refid="selectResult"></include> from t_user where id = #{id}
	</select>

2、方法二:属性匹配映射

我们在sql映射文件中,利用resultMap标签将数据库列名和java中的属性名进行映射绑定。

	 <resultMap type="UserPo" id="userResult">
	 	<id property="id" column="id"/>
	 	<result property="userName"  column="user_name"/>
	 	<result property="password"  column="password"/>
	 	<result property="regTime"  column="reg_time"/>
	 </resultMap>

然后需要在查询语句中,将结果的接收方式改为resultMap=“userResult”,其中值为上述定义resultMap标签的id。

	<select id="findById" parameterType="int" resultMap="userResult">
		select id,user_name,password,reg_time from t_user where id = #{id}
	</select>

3、方法三:开启类型自动匹配

这种方式需要严格按照命名规范,数据库中的列,应该是单词和单词之间利用下划线连接,java中的属性应该是小驼峰的命名规范。

比如:user_name ----> userName

开启类型自动匹配后,会自动进行转换。

如何开启?

在全局配置文件mybatis-config.xml中,添加

	<!-- 设置类型自动转换 -->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>

注意:

在xml文件中,需要注意标签的位置,因为xml文件中有严格的规范。

settings标签在properties标签的下面,如果没有properties标签,就在configuration标签里面的第一条。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值