使用mybatis 时候,发现result map 中 ,有一些异常,就是数据返回的时候无法得到正常的映射,是因为实体类当中没有写全要获取的get方法,导致返回错误
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘siId’ not found.
这个的原因是我没有加上注解,在我的mapper层加上注解即可
int insertPublicationDto(@Param(
"record") SiEditPublicationDto record,@Param("siId")Long siId);
然后发现我的代码中没有映射,好办!在xml里面加上我的#{record.属性名}
**<insert id="insertPublicationDto" parameterType = "com.wile.simt.dto.SiEditPublicationDto" useGeneratedKeys="true">
insert into t_si_publication
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="siId != null">
si_id,
</if>
<if test="#{record.volume} != null">
volume,
</if>
<if test="#{record.issue} != null">
issue,
</if>
<if test="#{record.issuePublicationLink} != null">
issue_publication_link,
</if>
<if test="#{record.actualPublicationDate} != null">
actual_publication_date,
</if>
<if test="#{record.numberOfOOArticle} != null">
number_of_oo_article,
</if>
<if test="#{record.numberOfOAArticle} != null">
number_of_oa_article,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="siId != null">
#{siId,jdbcType=BIGINT},
</if>
<if test="#{record.volume} != null">
#{record.volume,jdbcType=VARCHAR},
</if>
<if test="#{record.issue} != null">
#{record.issue,jdbcType=VARCHAR},
</if>
<if test="#{record.issuePublicationLink} != null">
#{record.issuePublicationLink,jdbcType=VARCHAR},
</if>
<if test="#{record.actualPublicationDate} != null">
#{record.actualPublicationDate,jdbcType=TIMESTAMP},
</if>
<if test="#{record.numberOfOOArticle} != null">
#{record.numberOfOOArticle,jdbcType=BIGINT},
</if>
<if test="#{record.numberOfOAArticle} != null">
#{record.numberOfOAArticle,jdbcType=BIGINT},
</if>
</trim>
</insert>**
ok,搞定,edit successfully ,但是又有问题了,如果之前有一个呢,那我再更改不就错误了,
这时看看user story 看看是什么情况捏
1 unsupported conversion from long to java.sql.Timestamp
**检查一下实体类是否有无参构造方法!!!!!!!,导致mybatis 无法new 这个实体类,也就无法通过set 来做映射
**
Insert into t_si_previous_handling_ce (si_id,user_id)
select 22000031,1827
from DUAL
where not exists(select si_id,user_id from t_si_previous_handling_ce
where si_id=22000031 and user_id=1827);