牛骨文教育服务平台(让学习变的简单)
博文笔记

SSM框架查询到的结果对象不包含某些字段

创建时间:2018-04-08 投稿人: 浏览次数:135

今天在搓接口的时候,遇到一个奇怪的现象,先看看我是怎么写的,xml文件中:↓

<!--根据用户ID查询当前存在的订单-->
<select id="checkRunningOrder" resultType="com.z.pojo.UseRecord">
  SELECT *
  FROM userecord
  WHERE u_id=#{userId}
  AND state=0
</select>

表结构:↓


这样子查出来的结果中,不包含u_id和x_id两个字段

查到的订单详细信息为:UseRecord{id=59, startsite="27.52998,109.942777", stopsite="null", starttime="2018-04-08 09:37:29", stoptime="null", duration="null", price=54.0, totalmoney=null, uId=null, xId=null, state=0}

但是在数据库中直接查询,结果是正常的:↓


网上找到了解决办法:↓

ssm框架查询结果为空

解决办法是:↓

将<select>标签中的  resultType改成resultMap,一般来说,resultMap在SSM自动自动生成的xml文件中都已经定义好了,实体类与表中的列相对应:↓

<mapper namespace="com.z.dao.mapper.UseRecordMapper">
  <resultMap id="BaseResultMap" type="com.z.pojo.UseRecord">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Wed Apr 04 10:43:47 CST 2018.
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="startSite" jdbcType="VARCHAR" property="startsite" />
    <result column="stopSite" jdbcType="VARCHAR" property="stopsite" />
    <result column="startTime" jdbcType="VARCHAR" property="starttime" />
    <result column="stopTime" jdbcType="VARCHAR" property="stoptime" />
    <result column="duration" jdbcType="VARCHAR" property="duration" />
    <result column="price" jdbcType="DOUBLE" property="price" />
    <result column="totalMoney" jdbcType="DOUBLE" property="totalmoney" />
    <result column="u_id" jdbcType="INTEGER" property="uId" />
    <result column="x_id" jdbcType="INTEGER" property="xId" />
    <result column="state" jdbcType="INTEGER" property="state" />
  </resultMap>

之所以结果为null的原因就在这里了,数据库中的字段是u_id,而实体类中对应的是uId,之前写resultType的时候,mybatis去数据库中查到了这一条数据,然后与实体类对应,发现没有u_id这个属性,结果就为null了,而resultMap已经与字段对应好了,查询到的列名u_id赋值给uId,这样就能正常显示了。

tips:附带idea的一个坑,xml文件是不会随着重新部署而自动部署到tomcat中的,我的解决办法是在build.gradle文件中加一个task:↓

task mapperXmlCopy(type: Copy) {
    copy {
        from("src/main/java/com/z/dao/mapper") {
            include ("*Mapper.xml")
        }
        into("classes/artifacts/SharedPPX_war_exploded/WEB-INF/classes/com/z/dao/mapper")
    }
    print "Copy Success
"
}
每次修改完xml文件执行一下clean,xml文件就能及时更新了,以上代码的作用是将
src/main/java/com/z/dao/mapper    

这个文件夹下所有后缀为"Mapper.xml"的文件复制到部署到tomcat的classes文件夹对应的目录下

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。