zoukankan      html  css  js  c++  java
  • 17 MyBatis——ResultMap的使用、字段名冲突问题

    字段名与属性名不一致导致无法封装数据的问题

    在数据库的字段命名中,我们使用下划线分隔。

    而在java的属性命名中,我们使用小驼峰命名规则,这会使得某些这些字段的返回值无法与javaBean的属性值对应,使得数据封装为null值。

    为了解决这个问题,我们可以使用两种方法。

    方法一:查询语句中给字段起别名

    我们知道,使用查询语句时可以给字段起别名,例如从t表查询字段A_NAME,起别名示范:

    SELECT A_NAME as AName FROM t;//as可省略
    

      

    我们可以以起别名的方式,将下划线的字段名与javaBean中对应的属性名的名称统一起来。

    这样的方式存在一个弊端,不可以使用select *的方式查询所有,必须写完每一个字段。

    方法二:使用resultMap

    在mapper中(即xxxMapper.xml),我们添加resultMap标签对一个表的字段进行别名配置:

    其中:id独自使用id标签而不是result的标签,是为了在mapper实现缓存时(<cache>标签,前面有提到),能够根据<id>标签找到对应的数据。

    注意:要写好查询语句,不能出现同样的列名

    <resultMap type="cn.tedu.mybatis.User" id="userMap">
    	    <!-- 主键使用id标签配置 -->
    	    <id column="id" property="id"/>
    	    <!-- 名称一致的可以无需配置,比如下面的username -->
    	    <result column="username" property="username"/>
    	    <!-- 不一致的必须配置 -->
    	    <result column="group_id" property="groupId"/>
    </resultMap>
    //如果要配置的属性是集合类型,需要使用标签<collection>如下:

      

    如果要配置的属性是集合类型,需要使用标签<collection>如下(此标签下,即使属性名与字段名相同也不能省略不写):
    <resultMap type="cn.tedu.mybatis.GroupVO" id="userMap">
    	    <!-- 主键使用id标签配置 -->
    	    <id column="id" property="id"/>
    	    <!-- 名称一致的可以无需配置,比如下面的username -->
    	    <result column="name" property="name"/>
    	    <!-- 属性为集合时,使用Collection -->
    	    <collection property="users" ofType="cn.tedu.mybatis.User">
    	        <result column="uid" property="id"/>
    	        <result column="username" property="username"/>
    	        <result column="password" property="password"/>
    	        <result column="age" property="age"/>
    	        <result column="phone" property="phone"/>
    	        <result column="email" property="email"/>
    	        <result column="group_id" property="groupId"/>
    	    </collection>
    </resultMap>
    

      

    然后在单表查询语句中使用 resultMap属性引用上面的resultMap的id即可:

    <select id="findAll" resultMap="userMap">
    	    SELECT * FROM t_user ORDER BY ID
    </select>
    

      

  • 相关阅读:
    35.python之事件驱动模型
    33.python之操作系统,进程,线程
    VRChat之blender2.8版本设置
    VRChat模型制作及上传总篇(201912)
    linux常用指令
    java基础File的简单使用记录
    java 通过实现Comparable接口使用Collections.sort排序 及 利用set的特性对 list 进行去重
    [转发] java字符串-编码转换-工具类
    ssh服务不能远程时,使用telnet远程登录
    java中List遍历删除元素相关做法和注意事项
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12484461.html
Copyright © 2011-2022 走看看