環境:
**Dependenies:
實體類別
@Getter
@Setter
@ToString
public class AuthorityEntity extends Base{
private int id;
private String name;
}
繼承類別
@Getter
@Setter
public class Base {
private String crUser;
private LocalDateTime crDateTime;
private String upUser;
private LocalDateTime upDateTime;
}
持久層
public interface AuthorityDao {
public int updateAuthority(AuthorityEntity authority);
}
實作代碼
@Repository
public class AuthorityImp implements AuthorityDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private JdbcTemplate jdbcNameTemplate;
public int updateAuthority(AuthorityEntity authority) {
String sql = " UPDATE deploy_authority "
+ " SET NAME = :name, UPDATE_TIME = :upDateTime ,UPDATE_USER = :upUser"
+ " WHERE ID = :id ";
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(authority);
return jdbcNameTemplate.update(sql, paramSource);
}
測試代碼
@SpringBootTest
class AuthorityDaoTest {
@Autowired
AuthorityDao authorityDao;
@Test
public void updateAuthority() {
try {
AuthorityEntity authority = new AuthorityEntity();
authority.setId(1);
authority.setName("newname");
authority.setUpDateTime(LocalDateTime.now());
authority.setUpUser("upuser");
Integer result = authorityDao.updateAuthority(authority);
System.out.println("更新成功:id為" + result);
} catch (Exception e) {
System.out.println("更新失敗");
System.out.println(e);
}
}
}
代碼有些雜,首次po這類問題,有需要改進地方請見諒。
在做Junit5測試時,會通過CRUD測試,但Insert,Update資料時卻會報錯
org.springframework.dao.TransientDataAccessResourceException:PreparedStatementCallback;
導致資料庫實際不會有Insert,Update的資料,檢查其他類別也是同樣結構卻不報錯。
找了一段時間實在沒辦法,來版上求助各位大神....ORZ
不知道您這邊指的CRUD沒問題是指什麼.. 如果Insert/Update都能通過測試 應該不會有這邊的Update問題呀XD
簡單試了一下您提供的程式, 不知道您遇到的錯誤訊息是不是
Parameter index out of range (1 > number of parameters, which is 0)
簡單查一下就會發現這個問題其實是來自於SQL的Template, 在系統要幫您代換變數時發現找不到可以代換用的"?", 譬如說像這篇就有簡單的說明
您可能會疑問這邊用的明明是Spring要自動幫您代換變數名稱才對, 但實際上是, 您變數的宣告並不與您要的功能相匹配
將
@Autowired
private JdbcTemplate jdbcNameTemplate;
宣告改為
@Autowired
private NamedParameterJdbcTemplate jdbcNameTemplate;
應該就能正確的往後走
另外, Spring有提供Spring data JPA可以使用, 也有更好用的"魔法", 可以參考看看其他的教學文章, 資料操作起來會更簡單