数据库字段与Java属性映射关系

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

比如:
下面解决方式都是利用这张表。
在这里插入图片描述

解决这种名称不匹配一共有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、付费专栏及课程。

余额充值