亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

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

2024-07-14 08:40:41
字體:
來源:轉載
供稿:網友

什么是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中引入如下配置

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

嵌入式數據庫支持

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

如h2的依賴

<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope></dependency>

mysql數據庫支持

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

編輯配置信息

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

spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用JdbcTemplate操作數據庫

Spring的JdbcTemplate是自動配置的,你可以直接使用@Autowired來注入到你自己的bean中來使用。

通過JdbcTemplate實現DemoService中定義的數據訪問操作

@Servicepublic 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的單元測試用例,通過創建、刪除和查詢來驗證數據庫操作的正確性。

測試用例要增加依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>

測試代碼

@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的出現正可以讓這樣一個已經很“薄”的數據訪問層變成只是一層接口的編寫方式。

使用方法

添加依賴

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

編輯配置信息

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

spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.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時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值

創建實體

@Entitypublic 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

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。

單元測試

@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方便快捷的訪問數據庫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品网| 久久视频在线视频| 国产精品久久久久7777婷婷| 韩国视频理论视频久久| 91精品在线观| 亚洲综合色av| 欧美情侣性视频| 在线观看欧美www| 午夜精品久久久久久99热软件| 亚洲色图国产精品| 亚洲精品美女在线观看播放| 日韩一级裸体免费视频| 成人国产在线激情| 亚洲社区在线观看| 亚洲第一色中文字幕| 日韩在线播放一区| 国产69精品久久久久久| 亚洲国产精品高清久久久| 日韩av快播网址| 成人黄色免费片| 国产精品久久久久999| 色七七影院综合| 国产欧美日韩中文| 亚洲一区av在线播放| 欧美日韩福利在线观看| 日韩成人激情视频| 2019精品视频| www.欧美精品| 亚洲一区二区久久久| 精品久久久免费| 在线精品播放av| 亚洲专区在线视频| 精品久久久999| 国产精品第一视频| 亚洲国产精久久久久久久| 日韩一区二区福利| 亚洲国产精品久久久久| 中文字幕一区电影| 亚洲石原莉奈一区二区在线观看| 久久青草福利网站| 7777免费精品视频| 2020久久国产精品| 在线成人中文字幕| 精品呦交小u女在线| 欧美福利小视频| 欧美日韩黄色大片| 亚洲欧美另类人妖| 色妞一区二区三区| 欧美高清在线视频观看不卡| 91久久国产婷婷一区二区| 日韩视频中文字幕| 国产精品久久久久久久电影| 性夜试看影院91社区| 91久久精品国产91久久| 欧美—级a级欧美特级ar全黄| 欧美一区二区.| 久久精品这里热有精品| 国产综合在线视频| 国产精品第七十二页| 国产精品电影网站| 成人性生交大片免费看视频直播| 亚洲天堂成人在线视频| 国产mv久久久| 在线观看日韩视频| 欧美精品在线播放| 国产精品www网站| 亚洲一区二区精品| 亚洲自拍欧美另类| 国产欧美日韩中文字幕在线| 国产日韩在线播放| 日韩黄在线观看| 久久久久久国产精品| 亚洲有声小说3d| 麻豆一区二区在线观看| 国产99视频精品免视看7| 亚洲精品电影网| 欧美肥臀大乳一区二区免费视频| 国产一区二区三区丝袜| 日韩视频免费在线观看| 92看片淫黄大片欧美看国产片| 成人精品一区二区三区电影免费| 久久天堂av综合合色| 久久精品亚洲国产| 亚洲欧美另类在线观看| 亚洲xxx自由成熟| 亚洲女同性videos| 亚洲欧洲国产精品| 97碰在线观看| 国产一区二区三区在线播放免费观看| 国产69精品久久久久9| 久久精品99久久久香蕉| 亚洲精品一区中文字幕乱码| 日韩电影中文字幕| 亚洲人成在线观看| 日韩电影中文字幕av| 国产视频精品va久久久久久| 欧美性videos高清精品| 亚洲综合在线播放| 欧美最近摘花xxxx摘花| 亚洲成色777777在线观看影院| 在线成人激情黄色| 国产亚洲欧美日韩美女| 亚洲人成在线一二| 国产精品久久久久福利| 欧美激情在线观看| 在线播放亚洲激情| 久久露脸国产精品| 亚洲国产精品99久久| 亚洲国产中文字幕在线观看| 国内精品久久久久久| 亚洲第一福利网| 日av在线播放中文不卡| 亚洲高清色综合| 欧美成aaa人片免费看| 国产精品视频午夜| 另类视频在线观看| 亚洲精品之草原avav久久| 欧美国产日韩一区| 国产精品免费一区豆花| 国产精品一区二区三区久久久| 亚洲成人黄色在线| 亚洲福利在线观看| 精品成人乱色一区二区| 国产精品久久久| 国产日韩欧美在线看| 日韩电影中文 亚洲精品乱码| 精品久久久久久久久久ntr影视| 亚洲精品xxxx| 国产精品国产自产拍高清av水多| 久久人91精品久久久久久不卡| 日韩欧美一区视频| 国产成人一区三区| 久久视频在线视频| 97国产精品视频| 久久久国产精品免费| 91亚洲精品久久久| 国产91精品久久久久久久| 国产成人一区二| 精品久久久久久久久久久久久| www.精品av.com| 亚洲精品成a人在线观看| 久久亚洲影音av资源网| 欧美高清视频在线| 日韩在线播放视频| 91亚洲国产成人久久精品网站| 国产一区二区三区在线播放免费观看| 欧美精品videos| 亚洲精品一区二区三区不| 韩国欧美亚洲国产| 青青草精品毛片| 欧美亚州一区二区三区| 成人久久一区二区| 精品香蕉在线观看视频一| 亚洲午夜av电影| 国产有码在线一区二区视频| 日韩在线一区二区三区免费视频| 92裸体在线视频网站| 亚洲a中文字幕| 亚洲欧美国内爽妇网| 一区二区三区视频免费在线观看| 黑人巨大精品欧美一区二区| 欧美日韩第一视频| 久久精品视频在线播放| 中文字幕在线精品|