跳转至

Spring JDBC 與 Spring Data JPA

Spring JDBC Spring Data JPA
以SQL為中心 以java object 為中心
需要自己寫sql 語法去操作資料庫 不需要寫sql語法 ,hibernate 會自動生成sql語法去操作資料庫
開發效率低 開發效率高
效能較好 效能較差
可以寫出複雜的sql語法 很難寫出複雜的查詢

Spring JDBC + java object

是以SQL為中心

對Spring JDBC來 student class 他其實沒甚麼用 ,他就只是幫忙儲存 id 還有name 的值而已

public void insert(){
    // 創建 Student Object
    Student student = new Student();
    student.setId(1);
    student.setName("Bob");

    // 執行 insert sql ,在student table中插入數據
    String SqlStr = "insert into student(id ,name) value (:studentId ,:studentName)";

    Map<String ,Object> map = new HashMap<>();
    map.put("studentId"   ,student.getId());
    map.put("studentName" ,student.getName());
    namedParameterJdbcTemplate.update(SqlStr ,map);

}

用這種方式也是可以在student table 裡面去新增一筆數據出來

public void insert2(){
    Integer id = 1;
    String name = "Bob";

    // 執行 insert sql ,在student table中插入數據
    String SqlStr = "insert into student(id ,name) value (:studentId ,:studentName)";

    Map<String ,Object> map = new HashMap<>();
    map.put("studentId"   ,id);
    map.put("studentName" ,name);
    namedParameterJdbcTemplate.update(SqlStr ,map);
}

Spring Data JPA + java object

Spring Data JPA 是以java object 為中心

我們不會再把透過getId ,getName 一個一個取出來然後分別地去寫到sql裡面 ,而是直接去儲存這整個Student Object

public void insert(){
    // 創建 Student Object
    Student student = new Student();
    student.setId(1);
    student.setName("Bob");

    // 儲存這個 Student Object
    save(student);
    // ORM 為 Student class 和 資料庫的student table 建立對應關係
}