iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

Spring In Action系列 第 7

Spring Data JDBC

  • 分享至 

  • xImage
  •  

這段在使用Spring Data JDBC來取代JdbcTemplate的設計。若使用JdbcTemplate,我們還是得自己實作repository介面定義的方法,例如findAll, findById, save等等,不過其實Spring Data有提供例如CrudRepository這樣的介面給我們繼承,而其背後就是Spring會直接幫我們實作這些general的方法,不需要在自己寫實作。

這段還提到了CommandLineRunner和ApplicationRunner,這兩個介面都是functional interface,只有一個run方法要實作,用途是Spring會在application context啟動,並且所有component都wire起來後,去跑這兩個介面的run方法內容,而這段提到說可以在這邊寫db table的初始資料,而不用另外寫data.sql放在src/main/resources裡面,除了不用寫sql的好處外,重點是透過repository介面來操作,底層的實作就可以隨時替換掉,例如原本是用relational database (要寫sql),這時我們抽換成NoSql database也可以直接運作。

@Bean
public CommandLineRunner dataLoader(IngredientRepository repo) {
  return args -> {
    repo.save(new Ingredient("KNIGHT", "knight", Type.BLADE));
    repo.save(new Ingredient("SAMURAI", "samurai", Type.BLADE));
    repo.save(new Ingredient("IRON", "iron", Type.MATERIAL));
    repo.save(new Ingredient("VALYRIAN", "valyrian", Type.MATERIAL));
    repo.save(new Ingredient("STRAIGHT", "straight", Type.HOLD));
    repo.save(new Ingredient("BEND", "bend", Type.HOLD));
  };
}

Fun Fact: JPA的repository method naming convention其實不會管你method name的主詞是什麼,因為背地裡是根據你implements的介面中所給的generic type來決定,例如:

public interface ManRepository extends CrudRepository<Man, Long>{
		Man findDogsByName(String name);
}

JPA一樣會幫你找出Man物件,而不會是Dog物件,其實通常主詞連寫也不會寫。


上一篇
JdbcTemplate
下一篇
No Sql Database
系列文
Spring In Action30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言