激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Spring boot中使用Spring-data-jpa方便快捷的訪問數據庫(推薦)

Spring boot中使用Spring-data-jpa方便快捷的訪問數據庫(推薦)

2021-04-26 15:28fengcl Java教程

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 規范的基礎上封裝的一套JPA應用框架,可使開發者用極簡的代碼即可實現對數據的訪問和操作。這篇文章主要介紹了Spring-boot中使用Spring-data-jpa方便快捷的訪問數據庫,需要的朋友可以參考下

什么是jpa

jpa(java persistence api)是sun官方提出的java持久化規范。它為java開發人員提供了一種對象/關聯映射工具來管理java應用中的關系數據。他的出現主要是為了簡化現有的持久化開發工作和整合orm技術

spring data jpa 是 spring 基于 orm 框架、jpa 規范的基礎上封裝的一套jpa應用框架,可使開發者用極簡的代碼即可實現對數據的訪問和操作。它提供了包括增刪改查等在內的常用功能,且易于擴展!學習并使用 spring data jpa 可以極大提高開發效率!

spring boot中使用jdbctemplate訪問數據庫

數據源配置

首先,為了連接數據庫需要引入jdbc支持,在pom.xml中引入如下配置

?
1
2
3
4
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>

嵌入式數據庫支持

嵌入式數據庫通常用于開發和測試環境。spring-boot提供自動配置的嵌入式數據庫有h2、hsql、derby,你不需要提供任何連接配置就能使用。

如h2的依賴

?
1
2
3
4
5
<dependency>
 <groupid>com.h2database</groupid>
 <artifactid>h2</artifactid>
 <scope>runtime</scope>
</dependency>

mysql數據庫支持

?
1
2
3
4
5
<dependency>
 <groupid>mysql</groupid>
 <artifactid>mysql-connector-java</artifactid>
 <version>5.1.38</version>
</dependency>

編輯配置信息

在 src/main/resources/application.properties 中配置數據源信息

?
1
2
3
4
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.driver

使用jdbctemplate操作數據庫

spring的jdbctemplate是自動配置的,你可以直接使用@autowired來注入到你自己的bean中來使用。

通過jdbctemplate實現demoservice中定義的數據訪問操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@service
public class demoserivce {
 @autowired
 private jdbctemplate jdbctemplate;
 public void create(string name, integer age) {
  jdbctemplate.update("insert into demo(name, age) values(?, ?)", name, age);
 }
 public void deletebyname(string name) {
  jdbctemplate.update("delete from demowhere name = ?", name);
 }
 public integer getalldemo() {
  return jdbctemplate.queryforobject("select count(1) from demo", integer.class);
 }
 public void deletealldemo() {
  jdbctemplate.update("delete from demo");
 }
}

創建對userservice的單元測試用例,通過創建、刪除和查詢來驗證數據庫操作的正確性。

測試用例要增加依賴

?
1
2
3
4
5
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-test</artifactid>
 <scope>test</scope>
</dependency>

測試代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@runwith(springjunit4classrunner.class)
@springapplicationconfiguration(main.class)
public class applicationtests {
 @autowired
 private demoserivce demoserivce;
 @before
 public void setup() {
 // 準備,清空表
 demoserivce.deletealldemo();
 }
 @test
 public void test() throws exception {
 // 插入5個
 demoserivce.create("a", 1);
 demoserivce.create("b", 2);
 demoserivce.create("c", 3);
 demoserivce.create("d", 4);
 demoserivce.create("e", 5);
 assert.assertequals(5, demoserivce.getalldemo().intvalue());
 demoserivce.deletebyname("a");
 demoserivce.deletebyname("e");
 // 查數據庫,應該有5個
 assert.assertequals(3, demoserivce.getalldemo().intvalue());
 }
}

spring boot中使用spring-data-jpa

為了解決這些大量枯燥的數據操作語句,我們第一個想到的是使用orm框架,比如:hibernate。通過整合hibernate之后,我們以操作java實體的方式最終將數據改變映射到數據庫表中。

為了解決抽象各個java實體基本的“增刪改查”操作,我們通常會以泛型的方式封裝一個模板dao來進行抽象簡化,但是這樣依然不是很方便,我們需要針對每個實體編寫一個繼承自泛型模板dao的接口,再編寫該接口的實現。雖然一些基礎的數據訪問已經可以得到很好的復用,但是在代碼結構上針對每個實體都會有一堆dao的接口和實現。

由于模板dao的實現,使得這些具體實體的dao層已經變的非常“薄”,有一些具體實體的dao實現可能完全就是對模板dao的簡單代理,并且往往這樣的實現類可能會出現在很多實體上。spring-data-jpa的出現正可以讓這樣一個已經很“薄”的數據訪問層變成只是一層接口的編寫方式。

使用方法

添加依賴

?
1
2
3
4
<dependency
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>

編輯配置信息

在 src/main/resources/application.properties 中配置數據源信息

?
1
2
3
4
5
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置屬性,其主要作用是:自動創建、更新、驗證數據庫表結構。該參數的幾種配置如下

  • create: 每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表
  • create-drop:每次加載hibernate時根據model類生成表,但是sessionfactory一關閉,表就自動刪除
  • update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據model類自動更新表結構
  • validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值

創建實體

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@entity
public class demoentity {
 @id
 @generatedvalue
 private long id;
 private string title;
 private string content;
 public demoentity() {
 }
 public demoentity(string title, string content) {
 this.title = title;
 this.content = content;
 }
 // get set 略
}

創建dao

?
1
2
3
4
5
6
7
public interface demorepository extends jparepository<demoentity, long> {
 demoentity findbytitle(string title);
 demoentity findbytitleandcontent(string title, string content);
// @query("select u from demoentity u where u.content=:content")
 @query("from demoentity u where u.content=:content")
 demoentity sqlfind(@param("content") string content);
}

sql中不要寫表名,要寫實體名,他會自動轉化為表名的。

通過解析方法名創建查詢

上面 findbytitle(string title) 與 findbytitleandcontent(string title, string content) ,沒有寫sql,但框架會自動按名字對上面的方對創建sql。

單元測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@runwith(springjunit4classrunner.class)
@springapplicationconfiguration(main.class)
public class unittest {
 @autowired
 demorepository demorepository;
 @test
 public void test()
 {
 for(int i=0;i<10;i++)
 {
 demorepository.save(new demoentity("title"+i, "content"+i));
 }
 assert.assertequals(10, demorepository.findall().size());
 }
 @test
 public void testfindbytitle()
 {
 demoentity res = demorepository.findbytitle("title8");
 assert.assertequals("title8", res.gettitle());
 }
 @test
 public void testfindbytitleandcontent()
 {
 demoentity res = demorepository.findbytitleandcontent("title9", "content9");
 assert.assertequals("title9", res.gettitle());
 assert.assertequals("content9", res.getcontent());
 }
 @test
 public void testsqlfind()
 {
 demoentity res = demorepository.sqlfind("content7");
 assert.assertequals("content7", res.getcontent());
 }
}

總結

以上所述是小編給大家介紹的spring boot中使用spring-data-jpa方便快捷的訪問數據庫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://blog.fengcl.com/2018/05/03/spring-data-jpa/

延伸 · 閱讀

精彩推薦
1206
主站蜘蛛池模板: 免费一级毛片在线播放不收费 | 久久99久久99免费视频 | 毛片免费在线视频 | 久章草在线视频 | 久久99国产精品久久 | 一级成人黄色片 | 国产精品久久久不卡 | 精品久久久久久久久久中出 | 国产精品久久久久久久不卡 | 欧美国产一区二区三区 | 亚洲码无人客一区二区三区 | 海角在线观看91一区二区 | 巨根插入 | 三级xxxx| 国产午夜免费福利 | 有兽焉免费动画 | 中文字幕精品一区久久久久 | 国产精品久久久久久久四虎电影 | 久久精品视频免费 | 成人在线精品视频 | 97超级碰碰人国产在线观看 | 黄色片视频在线观看 | 国产精品一区二区免费在线观看 | 性看小视频 | 九九热精品视频在线 | 国产人成精品综合欧美成人 | 成人在线视频一区 | 精品亚洲成a人在线观看 | 亚洲综合精品 | 日韩精品久久久久久久电影99爱 | 成人毛片在线 | 欧美性生交xxxxx免费观看 | 麻豆国产网站 | 色人阁在线视频 | a网在线| 奶子吧naiziba.cc免费午夜片在线观看 | 精品亚洲二区 | 国产午夜精品理论片a级探花 | 成人毛片100部免费观看 | 亚洲视频综合网 | 日本高清在线免费 |