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

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

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

比如:

数据库列名 java属性名
id id
user_name userName
password password
reg_time regTime

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

解决这种名称不匹配一共有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标签里面的第一条。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容