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

今天在搓接口的时候,遇到一个奇怪的现象,先看看我是怎么写的,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\n"
}
每次修改完xml文件执行一下clean,xml文件就能及时更新了,以上代码的作用是将
src/main/java/com/z/dao/mapper    

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值