前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis自动封装问题

MyBatis自动封装问题

作者头像
Cikian.
发布2023-02-23 19:27:29
4480
发布2023-02-23 19:27:29
举报
文章被收录于专栏:Cikian技术站

问题描述

在数据库建表时,更习惯于使用下滑线连接不同单词,如某字段名称user_name,而在写代码时,却习惯于使用驼峰命名法定义变量,用Java举例,某个实体类的属性String userName;

当使用MyBatis时,定义SQL语句 :

代码语言:javascript
复制
<mapper namespace="com.mapper.UserMapper">
    <select id="selectAll" resultType="com.pojo.User">
        SELECT * FROM user
    </select>
</mapper>

当程序执行后,MyBatis自动封装结果为null;

解决办法

起别名:在定义SQL语句时,使用as给字段起别名,如上面举例的SQL语句可更改为:

代码语言:javascript
复制
<mapper namespace="com.mapper.UserMapper">
    <select id="selectAll" resultType="com.pojo.User">
        SELECE user_name as userName FROM user
    </select>
</mapper>

这样做的缺点显而易见:当字段数量较多以及SQL语句较多时,这样做非常麻烦。

为了解决此问题,可以定义SQL片段,以上例子使用SQL片段后修改为:

代码语言:javascript
复制
<mapper namespace="com.mapper.UserMapper">
    <sql id="user_column">
        user_name as userName
    </sql>
    <select id="selectAll" resultType="com.pojo.User">
        select
            <include refid="user_column" />
        from tb_brand
    </select>
</mapper>

这样做同样有缺点:当查询字段不同时,要定义新的SQL片段,依然麻烦。

resultMap:使用resultMap将数据库字段名映射到实体类属性名,如:

代码语言:javascript
复制
<mapper namespace="com.mapper.UserMapper">
    <resultMap id="userResultMap" type="com.pojo.User">
        <result column="user_name" property="userName" />
    </resultMap>
    
    <select id="selectAll" resultMap="userResultMap">
        select * from tb_brand
    </select>
</mapper>

这样做也存在一定局限性,同时需要特别注意:select标签中的resultType属性要修改为resultMap,属性值为resultMap标签的id。

修改配置文件:在mybatis-config.xml配置文件中加入以下内容:

代码语言:javascript
复制
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

修改过后,MyBatis会将查询到的结果自动转换成驼峰命名。

以上便是解决MyBatis查询字段含下划线不能自动封装问题的全部内容,如有问题或者更好的解决办法,欢迎留言讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决办法
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档