Mybatis + Spring 引导:@Update 不工作

Mybatis + Spring Boot : @Update is not working

我正在尝试使用@update 批注进行更新。查询触发正常,没有任何异常,但方法 returns 0 每次(更新 0 行)。数据库中没有发生更新。并且相同的查询在 SQLdeveloper 工具中运行良好。 使用 Oracle 数据库。

 @Update(
     "UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS}, CASE_STATUS_TimeStmp = #{updateBean.CASE_STATUS_TimeStmp} WHERE T_TimeStmp >= #{updateBean.LAST_T_TimeStmp} AND T_TimeStmp <= #{updateBean.T_TimeStmp} AND T_NO = #{updateBean.T_NO} AND EM_NO =  #{updateBean.EM_NO}"
     )

public long update(@Param("updateBean") EMMT updateBean);

“EMMT updateBean”是 class 与 table EMMT 的列具有相同的成员。

我还尝试创建两个不同的会话,一个用于更新,另一个用于插入,但没有太大帮助。

会话配置。

@Bean(name = "updatesession")
public SqlSessionFactory sqlSessionFactoryupdate() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource);
    
    
    SqlSessionFactory sqlSessionFactory = factoryBean.getObject();
    sqlSessionFactory.getConfiguration().setJdbcTypeForNull(JdbcType.NULL);
    sqlSessionFactory.getConfiguration().setDefaultStatementTimeout(15);
    sqlSessionFactory.getConfiguration().addMappers("com.xyz.myapp.mapper");
    
    return sqlSessionFactory;
}

使用Mybatis-spring - 2.2.0

<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

如有帮助,我们将不胜感激。 谢谢。

示例 - 上面给出了 sqlSession 的配置。

豆子class.

 class justForUpdate {
     String CASE_STATUS;
     String EM_NO ;
     Timestamp T_TimeStmp;
     Long T_NO ;
     Timestamp CASE_STATUS_TimeStmp;
     Timestamp LAST_T_TimeStmp;
     
}

服务class

    updateservice {


@Autowired
private SqlSessionFactory sessions;

        public void work() {
    
          //obj of justForUpdate = auth
         //or can pass list of justForUpdate objs.
                
            try(SqlSession session = sessions.openSession(true)){
                
                Update_mapper upd = session.getMapper(Update_mapper.class);
                
                long val = upd.update(auth);
                System.out.print(">>>>>>>>>  "+val);
                
            }
            
            }
        
        
        }

Update_Mapper

@Mapper
public interface Update_mapper {

@Update(
         "UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS}, CASE_STATUS_TimeStmp = #{updateBean.CASE_STATUS_TimeStmp} WHERE T_TimeStmp >= #{updateBean.LAST_T_TimeStmp} AND T_TimeStmp <= #{updateBean.T_TimeStmp} AND T_NO = #{updateBean.T_NO} AND EM_NO =  #{updateBean.EM_NO}"
         )
    
    public long update(@Param("updateBean") EMMT updateBean);

}

对于可能遇到同样愚蠢问题的任何其他人。

快速修复是在我的列名查询中使用“TRIM()”。 某些列被定义为 40 个字节。因此包含空格数。

@Update(
"UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS}, CASE_STATUS_TimeStmp = #{updateBean.CASE_STATUS_TimeStmp} WHERE T_TimeStmp >= #{updateBean.LAST_T_TimeStmp} AND T_TimeStmp <= #{updateBean.T_TimeStmp} AND TRIM(T_NO) = #{updateBean.T_NO} AND TRIM(EM_NO) =  #{updateBean.EM_NO}")
        
    public long update(@Param("updateBean") EMMT updateBean);
    
}