本篇文章主要介紹了spring boot jpa訪問mysql示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
上篇演示了通過Maven構建Spring Boot 項目,引用web模塊啟動應用,完成簡單的web 應用訪問,本章內容在此基礎上面加入數據訪問與端口修改,下文代碼與演例(本用例純手工測試通過,放心入坑)。
修改默認端口
在srcmainresources下加入application.properties內容如下
server.port=8888
項目mysql
啟動應用,日志顯示:
端口已經由默認的8080 變更為8888
JPA訪問mysql
1、POM中加入
??<!-- Spring Boot JPA --> ??<dependency> ????<groupid>org.springframework.boot</groupid> ????<artifactid>spring-boot-starter-data-jpa</artifactid> ????<version>RELEASE</version> ??</dependency> ??<!-- MYSQL --> ??<dependency> ????<groupid>mysql</groupid> ????<artifactid>mysql-connector-java</artifactid> ??</dependency>
2、在srctestresources下加入application.properties內容如下(正式應用中請把配置加入至srcmainresources下application.properties中):
server.port=8888 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
-
create : 會根據你的mysql類來生成表,但是每次運行都會刪除上一次的表,重新生成表,哪怕2次沒有任何改變 (生產禁用,不小心用了會哭的。。)
-
create-drop : 根據model類生成表,但是sessionFactory一關閉,表就自動刪除 (生產禁用)
-
update : 最常用的屬性,也根據model類生成表,即使表結構改變了,表中的行仍然存在,不會刪除以前的行
-
validate : 只會和數據庫中的表進行比較,不會創建新表,但是會插入新值
3、新建實體
srcmainjavacomentityUser.java
package?com.entity; import?javax.persistence.Entity; import?javax.persistence.Id; import?javax.persistence.Table; import?java.io.Serializable; @Entity @Table(name="t_user") public?class?User?implements?Serializable?{ private?static?final?long?serialVersionUID?=?-3258839839160856613L; ??@Id ??@GeneratedValue ??private?Long?id; ??private?String?name; ??private?String?moblie; ??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?String?getMoblie()?{ ????return?moblie; ??} ??public?void?setMoblie(String?moblie)?{ ????this.moblie?=?moblie; ??} }
新建數據訪問mysql(JPA)
srcmainjavacomdaoUserRepository .java
package?com.dao; import?entity.User; import?org.springframework.data.jpa.repository.JpaRepository; /** ?*?Description: ?*?date:?2017/3/15?16:28 ?*/ public?interface?UserRepository?extends?JpaRepository<user>?{ ??User?findByName(String?name); }</user>
從源碼上面可以看出,JpaRepository已經實現了save(更新與保存)、delete、getOne、findAll等方法,所以對于基礎數據的操作,接口上不需要再定義,直接使用就好。
// //?Source?code?recreated?from?a?.class?file?by?IntelliJ?IDEA //?(powered?by?Fernflower?decompiler) // package?org.springframework.data.jpa.repository; import?java.io.Serializable; import?java.util.List; import?org.springframework.data.domain.Example; import?org.springframework.data.domain.Sort; import?org.springframework.data.repository.NoRepositoryBean; import?org.springframework.data.repository.PagingAndSortingRepository; import?org.springframework.data.repository.query.QueryByExampleExecutor; @NoRepositoryBean public?interface?JpaRepository<t>?extends?PagingAndSortingRepository<t>,?QueryByExampleExecutor<t>?{ ??List<t>?findAll(); ??List<t>?findAll(Sort?var1); ??List<t>?findAll(Iterable<id>?var1); ??<s>?List<s>?save(Iterable<s>?var1); ??void?flush(); ??<s>?S?saveAndFlush(S?var1); ??void?deleteInBatch(Iterable<t>?var1); ??void?deleteAllInBatch(); ??T?getOne(ID?var1); ??<s>?List<s>?findAll(Example<s>?var1); ??<s>?List<s>?findAll(Example<s>?var1,?Sort?var2); }</s></s></s></s></s></s></t></s></s></s></s></id></t></t></t></t></t></t>
4.編寫對應的mysql來驗證編寫的內容是否正確
POM中加入
???<dependency> ?????<groupid>org.springframework.boot</groupid> ?????<artifactid>spring-boot-starter-test</artifactid> ???</dependency>
創建單元測試用例
srctestjavaUserTest.java
import?com.SampleController; import?com.dao.UserRepository; import?com.entity.User; 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; /** ?*?date:?2017/3/15?17:21 ?*/ @RunWith(SpringRunner.class) @SpringBootTest(classes?=?SampleController.class) public?class?UserTest?{ ??@Autowired ??private?UserRepository?userRepository; ??@Test ??public?void?saveTest()?{ ????User?user?=?new?User(); ????user.setName("王大錘"); ????user.setMoblie("13300000000"); ????userRepository.save(user); ????Assert.assertEquals("13300000000",?userRepository.findByName("王大錘").getMoblie()); ??} }
運行結果示例