今天在搓接口的时候,遇到一个奇怪的现象,先看看我是怎么写的,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}
但是在数据库中直接查询,结果是正常的:↓
网上找到了解决办法:↓
解决办法是:↓
将<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文件夹对应的目录下