摘要:最常用的屬性,第一次加載時根據類會自動建立起表的結構前提是先建立好數據庫,以后加載時根據類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。
添加依賴
新建項目選擇web,JPA,MySQL三個依賴
對于已存在的項目可以在bulid.gradle加入,spring boot將會幫你自動配置好
compile("org.springframework.boot:spring-boot-starter-data-jpa") compile("org.springframework.boot:spring-boot-starter-web") runtime("mysql:mysql-connector-java")配置基本信息
然后在src/main/resources/application.properties下添加基本配置
#數據庫連接地址 spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false #數據庫賬號 spring.datasource.username=root #數據庫密碼 spring.datasource.password=123456zxc #數據庫驅動 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #jpa設置 spring.jpa.hibernate.ddl-auto=create #是否在控制臺顯示數據庫語句 spring.jpa.show-sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto 其作用是:自動創建、更新、驗證數據庫表結構。該參數的幾種配置如下:
create:每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。
create-drop:每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。
update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以后加載hibernate時根據model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等應用第一次運行起來后才會。
validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。
none:什么都不做
至此基本配置完成
創建實體創建一個User實體,包含id(主鍵)、name(姓名)、age(年齡)屬性,通過ORM框架其會被映射到數據庫表中,由于配置了hibernate.hbm2ddl.auto,在應用啟動的時候框架會自動去數據庫中創建對應的表。
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity//這是一個和數據庫表相關聯的類 public class User { @Id//主鍵 @GeneratedValue//自增長 private Long id;//id @Column(length = 30)//長度30 private String name;//名稱 @Column(nullable = false)//不可空 private Integer age;//年齡 public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long 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; } }創建數據訪問接口
創建一個userRepository接口,進行數據庫操作
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserRepository extends JpaRepository單元測試//JpaRepository<實體類型,主鍵類型> { // 通過名稱找到用戶 User findByName(String name); // 通過名稱和年齡找到用戶 User findByNameAndAge(String name, Integer age); // 通過名稱模糊查詢 List findByNameLike(String name); // 使用hql查詢 @Query("from User u where u.name=:name")//:name對應@Param里的name User findByHQL(@Param("name") String name); // 使用sql查詢 @Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一個參數,?2表示第二個參數 User findBySQL(String name, Integer age); }
在src/test/java/你的包名/你的項目名ApplicationTests編寫對應的單元測試來驗證編寫的內容是否正確
import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class JpaLearnApplicationTests { // 注入userRepository @Autowired private UserRepository userRepository; @Test public void contextLoads() { // 添加10個測試用例 userRepository.save(new User("QQQ",1)); userRepository.save(new User("WWW",2)); userRepository.save(new User("EEE",3)); userRepository.save(new User("AAA",4)); userRepository.save(new User("SSS",5)); userRepository.save(new User("DDD",6)); userRepository.save(new User("ZZZ",7)); userRepository.save(new User("XXX",8)); userRepository.save(new User("CCC",9)); userRepository.save(new User("QQQ2",10)); // 測試findAll, 查詢所有記錄 Assert.assertEquals(10, userRepository.findAll().size()); // 測試findByName, 查詢姓名為AAA的User Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue()); // 測試findByHQL, 查詢姓名為AAA的User Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue()); // 測試findByNameAndAge, 查詢姓名為SSS并且年齡為5的User Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName()); // 測試findBySQL, 查詢姓名為SSS并且年齡為5的User Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName()); // 測試刪除姓名為AAA的User userRepository.delete(userRepository.findByName("AAA")); // 測試findAll, 查詢所有記錄, 驗證上面的刪除是否成功 Assert.assertEquals(9, userRepository.findAll().size()); // 測試findAll, 查詢名字有Q的有幾個 Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size()); } }
點擊運行測試用例
源碼地址:https://github.com/LieRabbit/...
原文地址:https://lierabbit.cn/2018/01/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68288.html
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
摘要:文章系列從零入門系列之從零入門系列之程序結構設計說明前言本篇文章開始代碼實踐,系統設計從底向上展開,因此本篇先介紹如何實現數據庫表實體類的設計實現。主鍵由數據庫自動生成主要是自動增長型主鍵由程序控制。 文章系列 【從零入門系列-0】Sprint Boot 之 Hello World 【從零入門系列-1】Sprint Boot 之 程序結構設計說明 前言 本篇文章開始代碼實踐,系統...
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:入門簡介是一種全新的框架,目的是簡化應用的初始搭建和開發過程,讓開發者寫更少的配置,程序更快的啟動和運行,致力于成為快速開發應用領域的領導者。并且可以內嵌,這樣我們無需以包的形式部署項目。 SpringBoot入門 SpringBoot簡介 spring boot是一種全新的Java web框架,目的是簡化Spring應用的初始搭建和開發過程,讓開發者寫更少的配置,程序更快的啟動和運行...
摘要:的默認配置文件位置為。比如,我們需要自定義模塊的服務端口號,可以在中添加來指定服務端口為,也可以通過來指定應用名該名字在應用中會被注冊為服務名。同時,配置內容都對開發人員可見,本身這也是一種安全隱患。 在快速入門一節中,我們輕松的實現了一個簡單的RESTful API應用,體驗了一下Spring Boot給我們帶來的諸多優點,我們用非常少的代碼量就成功的實現了一個Web應用,這是傳統的...
閱讀 2106·2021-11-05 09:42
閱讀 2851·2021-09-23 11:21
閱讀 2841·2019-08-30 14:00
閱讀 3314·2019-08-30 13:15
閱讀 465·2019-08-29 17:18
閱讀 3547·2019-08-29 16:29
閱讀 2749·2019-08-29 14:06
閱讀 2794·2019-08-23 14:41