Mybatis+Spring Boot:@Update不起作用



我正在尝试使用@update annotation进行更新。查询触发良好,没有任何异常,但方法每次返回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";is类具有与表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弹簧-2.2.0

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

任何帮助都是先决条件。谢谢

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

bean类。

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

}

服务等级

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);

}

}


}

更新映射

@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);

}

相关内容

最新更新