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、PagingAndSortingRepository:繼承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);
}
到此,與資料庫的互動最基本的操作就是如此,大家可以深入自行研究,比如級聯操作,多對多關係,複雜查詢等。。。