zoukankan      html  css  js  c++  java
  • MyBatis数据库字段和实体对象属性名不一致的解决方案

    数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案。

    1. 开启驼峰转换

    如果数据库中的字段名与对象只是简单的不一致的话,比如名字是一样的,只是分隔方式不一样,在数据库中使用了下划线分隔,而在对象中使用了驼峰分隔,如果都是这样子的话倒不是特别麻烦,只需要在mybatis的配置文件中开启驼峰转换即可。

    <setting name="mapUnderscoreToCamelCase" value="true"/>

    2. 在SQL查询语句中使用别名来适配

    还有一种情况就是绝大部分情况下都是可以适配得上的,但是只有几列适配不上,这个时候定义单独的ResultMap感觉有点不值当(事实上,从可维护性上来考虑定义ResultMap绝对是首选),所以我们就在查询数据的时候在SQL语句中使用别名来使数据库列名能够适配得上对象的属性名。

    比如在数据库中用户名列叫做username,在对象中用户名叫做name,由于种种原因我们不能去修改这两个名字了但是还要让它们能够对应得起来,下面是一种可能的解决方案:

    <select id="loadById" parameterType="string" resultType="user">
    	SELECT id, username AS name, passwd FROM t_user WHERE id=#{id}
    </select>

    甚至在指定别名的时候还可以在别名中包含点符号来导航,比如使用role.name来指定注入到user对象的role属性的name属性中,下面是一个简单的例子:

    <select id="load" parameterType="long" resultType="org.cc11001100.mybatis.domain.User">
        SELECT
            t1.id, username, passwd,
            t3.id AS 'role.id',
            t3.name AS 'role.name'
        FROM
            t_user AS t1
            JOIN t_user_role AS t2 ON t1.id=t2.user_id
            JOIN t_role AS t3 ON t3.id=t2.role_id
        WHERE
          t1.id=#{id};
    </select>

    3. 自定义ResultMap

    最后,实在是不一致得比较离谱,基本上大部分的数据库字段和对象的名字都是不对应的,这种情况下定义一个ResultMap来解决这个问题绝对是上策。

    <select id="loadById" parameterType="string" resultMap="userResultMap">
    	SELECT * FROM t_user WHERE id=#{id}
    </select>

    然后在resultMap标签中配置不同字段的映射:

    <resultMap id="userMap" type="org.cc11001100.mybatis.domain.User" autoMapping="true">
        <id column="id" property="id"/>
        <result column="username" property="name"/>
    </resultMap>
    resultMap标签有个属性叫做autoMapping,当指定为true的时候表示没有手动使用id或者result标签指定映射的属性就自动映射,这样将这个属性置为true,就可以只指定表字段名称与对象属性名不匹配的字段,大大减少了工作量。

    .

  • 相关阅读:
    [转]tensorflow提示:No module named ''tensorflow.python.eager"
    mac使用pip3安装tensorflow(不用conda)
    不限速、没广告的迅雷(旧版迅雷)
    python从国内镜像安装第三方库
    Jupyter 安装并配置工作路径[转]
    VS2013只显示会附加到进程,无法启动调试
    电脑磁盘空间占用高于文件夹大小
    Latex基础
    C#/.Net 部分缩写
    texstudio设置外部浏览器及右侧预览不能使用问题
  • 原文地址:https://www.cnblogs.com/cc11001100/p/7815904.html
Copyright © 2011-2022 走看看