1. 程式人生 > >springboot (5) 與資料庫進行互動

springboot (5) 與資料庫進行互動

  本篇開始講述springboot專案如何與資料庫互動,本篇大致分為兩部分:

  一.與資料庫建立連線

  二.使用spring data  jpa與資料庫進行互動

一、與資料庫建立連線,本文采用MYSQL資料庫

1.首先在pom.xml中新增MYSQL依賴jar

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
 </dependency>

2.在application.properties中新增資料庫配置如下:

spring.datasource.url = jdbc:mysql://192.168.0.88:3306/test       //資料庫地址
spring.datasource.username = root                                                 //使用者名稱
spring.datasource.password = root                                                  //密碼
spring.datasource.driverClassName = com.mysql.jdbc.Driver     //老司機名稱

spring.datasource.max-active=20            //最大活躍數
spring.datasource.max-idle=8           
spring.datasource.min-idle=8
spring.datasource.initial-size=10              //初始連線數     根據自己情況定義

3.專案啟動,如果不報錯,則配置完成

二、與資料庫進行互動,目前大多數公司都使用JPA進行與資料庫互動,好處是在將持久層編寫更加規範,底層使用的是hibernate,因此若想使用mybatis進行開發的話,可

自行百度,本篇講解如何使用JPA。

1.在pom.xml檔案中引入依賴JAR

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>

2.在application.properties中新增JPA配置

//設定資料庫型別
spring.jpa.database = MYSQL
//是否顯示SQL語句
spring.jpa.show-sql = true
//自動更新
spring.jpa.hibernate.ddl-auto = update
//實體對映命名
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
//配置方言
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

3.定義實體,通過JPA生成表結構

@Entity    //實體註解,生成表結構
public class Father {
 
@Id    //主鍵註解,由於本人專案中主鍵一般使用UUID,因此定義String型別,若使用int型別,可以再加一個@GeneratedValue,主鍵可以設定生成策略

private String id;
private String name;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

4.編寫DAO

public interface FatherDao extends CrudRepository<Father, String>{
}

解析:繼承的CrudRepository介面是JPA中常用的一個不含分頁的介面,JPA包含能繼承的介面有一下幾種:

 A、epository:僅僅是一個標識,表明任何繼承它的均為倉庫介面類。

 B、CrudRepository:繼承Repository,實現了一組CRUD操作相關的方法。
 C、PagingAndSortingReposito
ry:繼承CrudRepository,實現了一組分頁排序相關的方法。 D、JpaRepository:繼承PagingAndSortingRepository,實現一組JPA規範的相關方法。 E、自定義的XxxxRepository:需要繼承JpaRepository,這樣的XxxxRepository介面就具備了通用的資料訪問控制層的能力。 F、JpaSpecificationExecutor:不屬於Repository體系,實現一組JPACriteria查詢相關的方法。 可以根據自己的實際需求繼承相應的介面,常用的介面CrudRepository與PagingAndSortingReposito。

到此,就可以直接呼叫DAO層方法了,有人問,不用寫DAO的實現DaoImpl麼,當然不用,不然為什麼那麼多人想使用JPA呢,方便快捷。下面還有更方便的。

如果你僅僅是繼承了這個介面,目前只能使用其中定義的一些方法,比如save(),delete()等一些通用的方法,那就有人問了,我如果有一些根據條件進行的GRUD操作呢?

當然這就是JPA的強大之處,支援命名即方法,簡單的說就是 定義一個方法名,比如說 findByName(),不需要寫實現,JPA即可自動通過名字這個屬性進行查詢,不過命名的規範需要參照JPA的命名規範了。還要注意一點,自定義的介面需要在DAO中宣告,切記不要忘,方法名一定要駝峰命名法,屬性條件一定要與實體中屬性相同。

public interface FatherDao extends CrudRepository<Father, String>{

    public  String findByName(String  name);

}

其實,除了這一種自定義方法外,還有別的方法,大家可以自行百度。

4.Service中呼叫

首先注入Dao,其次呼叫即可

@Autowired
    private FatherDao fatherDao;
    
    @Transactional
    public Father save(Father father){
        return fatherDao.save(father);
    }
   

到此,與資料庫的互動最基本的操作就是如此,大家可以深入自行研究,比如級聯操作,多對多關係,複雜查詢等。。。