您现在的位置是:主页 > news > 店铺推广软文/seo收录查询工具

店铺推广软文/seo收录查询工具

admin2025/6/20 2:59:03news

简介店铺推广软文,seo收录查询工具,三元里网站建设,做网站要偶数问题表现 今天遇到个很诡异的问题,自己写了一个查询sql,发现Order变量只有部分数据有值,其他都是null,对了好久字段是不是命名错了都没发现啥问题,最后才发现是用错resultType的锅。 查询sql: mapper: &l…

店铺推广软文,seo收录查询工具,三元里网站建设,做网站要偶数问题表现 今天遇到个很诡异的问题,自己写了一个查询sql,发现Order变量只有部分数据有值,其他都是null,对了好久字段是不是命名错了都没发现啥问题,最后才发现是用错resultType的锅。 查询sql: mapper: &l…

问题表现

今天遇到个很诡异的问题,自己写了一个查询sql,发现Order变量只有部分数据有值,其他都是null,对了好久字段是不是命名错了都没发现啥问题,最后才发现是用错resultType的锅。
查询sql:
mapper:

<select id="selectByOrderNo" resultType="com.xxx.Order">select<include refid="column_List"/>from t_orderwhere order_no=#{orderNo}
</select>

Do:

public class Order {private Integer executeCount;private Long nextExecuteTime;private Integer status;private String env;private String orderNo;
}

结果:

{"executeCount" = null"nextExecuteTime" = null"status" = 2"env" = "pre""orderNo" = null
}

问题分析

数据库里这条数据都是有值的,但debug过程中只有部分有值。从结果看出Order属性变量名与表字段名一致的字段有值,不相同的为null,这就说明是因为数据间关系没有映射上。

resultType与resultMap

这两种都是mybatis查询数据数据库时的返回类型,那他们在使用上有什么区别呢?

1.如果只是返回一个值,比如说String或者int,那直接用resultType就行了

<select id="getEnv" resultType="java.lang.String">select env from t_order where id=#{id}
</select>

2.如果sql查询结果返回的列名和实体类中的字段名一致,可以使用resultType,MyBatis会自动把查询结果赋值给和字段名一致的字段

public class Urder {private Long id;private String userName;private String sex;
}

3.如果不一致,mapper里的sql语句中可以使用别名的方式使其一致。

<select id="getUserName" resultType="com.xxx.User">select user_name as userName, sex from t_user
</select>

4.当sql的列名和实体类的列名不一致,这时就可以使用resultMap了

<resultMap id="userMap" type="com.xxx.User"><id property="id" column="id"/><result property="userName" column="user_name"/><result property="sex" column="sex"/>
</resultMap>
<select id="getUsers" resultMap="userMap">select id, user_name, sex from t_user
</select>

property是实体类的字段名,column是sql查询的列名

对于简单的映射,resultType和resultMap区别不大。但是resultMap功能更强大,可以通过设置typeHander来自定义实现功能