在使用mybaits编写sql映射文件的时候,报这两个错误,下面来解决一下
1、argument type mismatch 类型不匹配
在进行查询的时候,没有将子类型放入父类型中和在两个实体类中加入无参构造
//父类
@ApiModel(description = "ss.person")
@Schema
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person implements Serializable {
@ApiModelProperty(value = "")
@Schema(description = "用户Id")
@NotNull(message = "不能为null")
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "")
@Schema(description = "姓名")
@Size(max = 20, message = "最大长度要小于 20")
private String name;
@ApiModelProperty(value = "")
@Schema(description = "年龄")
private Integer age;
//子类型
private Card card;
private static final long serialVersionUID = 1L;
}
在两个实体类中加入无参构造
@NoArgsConstructor
2、Expected one result (or null) to be returned by selectOne(), but found:2
在编写sql语句的时候,没有将查询的数据匹配上去。
第一种情况,当数据库中只有一条数据的时候,不管有没有条件,都会查到
第二种情况,就是报这个错
解决方法
修改之前代码
<resultMap id="OneToOne1" type="com.ey.model.Person">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<result column="page" property="age"/>
<association property="card" javaType="com.ey.model.Card">
<id column="cid" property="id"/>
<result column="cidcard" property="idcard"/>
<result column="pid" property="pid"/>
</association>
</resultMap>
<select id="selectOne" resultMap="OneToOne1">
select p.id pid, p.name pname, p.age page, c.idcard cidcard, c.id cid
from person p,
card c
where p.id = c.pid
</select>
修改之后代码
主要就是缺少一个占位符
<mapper namespace="com.ey.mapper.OneToOneMapper">
<resultMap id="OneToOne1" type="com.ey.model.Person">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<result column="page" property="age"/>
<association property="card" javaType="com.ey.model.Card">
<id column="cid" property="id"/>
<result column="cidcard" property="idcard"/>
<result column="pid" property="pid"/>
</association>
</resultMap>
<select id="selectOne" resultMap="OneToOne1">
select p.id pid, p.name pname, p.age page, c.idcard cidcard, c.id cid
from person p,
card c
where p.id = #{id}
and p.id = c.pid
</select>