Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jdbcTemplate更新整个对象而不指定列名?_Java_Mysql_Spring_Spring Jdbc - Fatal编程技术网

Java 如何使用jdbcTemplate更新整个对象而不指定列名?

Java 如何使用jdbcTemplate更新整个对象而不指定列名?,java,mysql,spring,spring-jdbc,Java,Mysql,Spring,Spring Jdbc,我在看参考资料。我们可以做到- String orderSql=“从id=?”的顺序中选择*; jdbcTemplate.query(orderSql、新BeanPropertyRowMapper(Order.class)、orderId) 这将从数据库中读取数据,并可以直接反序列化到Order对象中。这很好 我想做的是- String updateSql=“更新顺序?其中id=?”; 保存(更新SQL,新BeanPropertyRowMapper(Order.class),Order,orde

我在看参考资料。我们可以做到-

String orderSql=“从id=?”的顺序中选择*;
jdbcTemplate.query(orderSql、新BeanPropertyRowMapper(Order.class)、orderId)

这将从数据库中读取数据,并可以直接反序列化到
Order
对象中。这很好

我想做的是-

String updateSql=“更新顺序?其中id=?”;
保存(更新SQL,新BeanPropertyRowMapper(Order.class),Order,orderId)


有办法吗?

不,不可能
JdbcTemplate
具有使用
query
映射对象的能力,正如您所说,无需定义列/属性,但是
update
没有等效用法。您必须传入SQL和相关参数。正如有人提到的,如果你真的想这样做,你可以考虑使用Hibernate。

< P>不!你只能这样做

jdbcTemplate.update("update ordertable set order = ? where id = ?", order, orderId);

使用此查询进行更新:-

String updateSql = "update <table_name> set order= ? where id = ?";

jdbcTemplate.update(updateSql, new Object[]{order, orderId});
String updateSql=“更新集顺序=?其中id=?”;
update(updateSql,新对象[]{order,orderId});

它将返回受影响的行更新计数。

为什么不编写一个方法,首先基于列信息构建查询,然后返回该查询以在jdbcTemplate.update(…)中使用方法。这是一种方法,但如果只传入一个对象,让它决定哪些列已更改并更新相应的列,不是更方便吗?您不是在传递对象,如果您愿意,我建议使用hibernate,它知道对象的状态。这称为JPA。。。Spring现在有了一种知道要保留哪些列的方法。行映射器是最好的工具,仅当名称完全匹配时才起作用。如果你想做这样的更新,用JPA代替。我以前用过JPA,它是这样工作的。出于某种原因,我们决定将原始查询与jdbctemplate一起使用。这就是问题所在!