步驟:
- 在pom.xml文件中添加mysql,spring-data-jpa的依賴。
<!-- 添加mysql數據庫驅動依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加spring-data-jpa依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2在application.properties文件中配置mysql鏈接屬性。
在res/main/resources下創建一個application.properties文件:
- 在application.propertices文件中配置JPA配置信息;
##########################################
###datasource--指定mysql數據庫連接信息
###spring.datasource.url:mysql地址
###spring.datasource.user:數據庫用戶名
###spring.datasource.password:數據庫密碼
###spring.datasource.driverClassName:對應數據庫驅動
###spring.datasource.max-active:指定連接池中最大的活躍連接數
###spring.datasource.max-idle:指定連接池最大的空閑連接數量.
###spring.datasource.min-idle:指定必須保持連接的最小值(For DBCP and Tomcat connection pools)
###spring.datasource.initial-size:指定啟動連接池時,初始建立的連接數量
###
###其他信息總結:
###spring.dao.exceptiontranslation.enabled是否開啟PersistenceExceptionTranslationPostProcessor,默認為true
###spring.datasource.abandon-when-percentage-full設定超時被廢棄的連接占到多少比例時要被關閉或上報
###spring.datasource.allow-pool-suspension使用Hikari pool時,是否允許連接池暫停,默認為: false
###spring.datasource.alternate-username-allowed是否允許替代的用戶名.
###spring.datasource.auto-commit指定updates是否自動提交.
###spring.datasource.catalog指定默認的catalog.
###spring.datasource.commit-on-return設置當連接被歸還時,是否要提交所有還未完成的事務
###spring.datasource.connection-init-sql指定連接被創建,再被添加到連接池之前執行的sql.
###spring.datasource.connection-init-sqls使用DBCP connection pool時,指定初始化時要執行的sql
###spring.datasource.connection-properties.[key]在使用DBCP connection pool時指定要配置的屬性
###spring.datasource.connection-test-query指定校驗連接合法性執行的sql語句
###spring.datasource.connection-timeout指定連接的超時時間,毫秒單位.
###spring.datasource.continue-on-error在初始化數據庫時,遇到錯誤是否繼續,默認false
###spring.datasource.data指定Data (DML)腳本
###spring.datasource.data-source-class-name指定數據源的全限定名.
###spring.datasource.data-source-jndi指定jndi的地址
###spring.datasource.data-source-properties.[key]使用Hikari connection pool時,指定要設置的屬性
###spring.datasource.db-properties使用Tomcat connection pool,指定要設置的屬性
###spring.datasource.default-auto-commit是否自動提交.
###spring.datasource.default-catalog指定連接默認的catalog.
###spring.datasource.default-read-only是否設置默認連接只讀.
###spring.datasource.default-transaction-isolation指定連接的事務的默認隔離級別.
###spring.datasource.driver-class-name指定driver的類名,默認從jdbc url中自動探測.
###spring.datasource.fair-queue是否采用FIFO返回連接.
###spring.datasource.health-check-properties.[key]使用Hikari connection pool時,在心跳檢查時傳遞的屬性
###spring.datasource.idle-timeout指定連接多久沒被使用時,被設置為空閑,默認為10ms
###spring.datasource.ignore-exception-on-pre-load當初始化連接池時,是否忽略異常.
###spring.datasource.init-sql當連接創建時,執行的sql
###spring.datasource.initial-size指定啟動連接池時,初始建立的連接數量
###spring.datasource.initialization-fail-fast當創建連接池時,沒法創建指定最小連接數量是否拋異常
###spring.datasource.initialize指定初始化數據源,是否用data.sql來初始化,默認: true
###spring.datasource.isolate-internal-queries指定內部查詢是否要被隔離,默認為false
###spring.datasource.jdbc-interceptors使用Tomcat connection pool時,指定jdbc攔截器,分號分隔
###spring.datasource.jdbc-url指定JDBC URL.
###spring.datasource.jmx-enabled是否開啟JMX,默認為: false
###spring.datasource.jndi-name指定jndi的名稱.
###spring.datasource.leak-detection-threshold使用Hikari connection pool時,多少毫秒檢測一次連接泄露.
###spring.datasource.log-abandoned使用DBCP connection pool,是否追蹤廢棄statement或連接,默認為: false
###spring.datasource.log-validation-errors當使用Tomcat connection pool是否打印校驗錯誤.
###spring.datasource.login-timeout指定連接數據庫的超時時間.
###spring.datasource.max-age指定連接池中連接的最大年齡
###spring.datasource.max-lifetime指定連接池中連接的最大生存時間,毫秒單位.
###spring.datasource.max-open-prepared-statements指定最大的打開的prepared statements數量.
###spring.datasource.max-wait指定連接池等待連接返回的最大等待時間,毫秒單位.
###spring.datasource.maximum-pool-size指定連接池最大的連接數,包括使用中的和空閑的連接.
###spring.datasource.min-evictable-idle-time-millis指定一個空閑連接最少空閑多久后可被清除.
###spring.datasource.min-idle指定必須保持連接的最小值(For DBCP and Tomcat connection pools)
###spring.datasource.minimum-idle指定連接維護的最小空閑連接數,當使用HikariCP時指定.
###spring.datasource.name指定數據源名.
###spring.datasource.num-tests-per-eviction-run指定運行每個idle object evictor線程時的對象數量
###spring.datasource.password指定數據庫密碼.
###spring.datasource.platform指定schema要使用的Platform(schema-${platform}.sql),默認為: all
###spring.datasource.pool-name指定連接池名字.
###spring.datasource.pool-prepared-statements指定是否池化statements.
###spring.datasource.propagate-interrupt-state在等待連接時,如果線程被中斷,是否傳播中斷狀態.
###spring.datasource.read-only當使用Hikari connection pool時,是否標記數據源只讀
###spring.datasource.register-mbeans指定Hikari connection pool是否注冊JMX MBeans.
###spring.datasource.remove-abandoned指定當連接超過廢棄超時時間時,是否立刻刪除該連接.
###spring.datasource.remove-abandoned-timeout指定連接應該被廢棄的時間.
###spring.datasource.rollback-on-return在歸還連接時,是否回滾等待中的事務.
###spring.datasource.schema指定Schema (DDL)腳本.
###spring.datasource.separator指定初始化腳本的語句分隔符,默認: ;
###spring.datasource.sql-script-encoding指定SQL scripts編碼.
###spring.datasource.suspect-timeout指定打印廢棄連接前的超時時間.
###spring.datasource.test-on-borrow當從連接池借用連接時,是否測試該連接.
###spring.datasource.test-on-connect創建時,是否測試連接
###spring.datasource.test-on-return在連接歸還到連接池時是否測試該連接.
###spring.datasource.test-while-idle當連接空閑時,是否執行連接測試.
###spring.datasource.time-between-eviction-runs-millis指定空閑連接檢查、廢棄連接清理、空閑連接池大小調整之間的操作時間間隔
###spring.datasource.transaction-isolation指定事務隔離級別,使用Hikari connection pool時指定
###spring.datasource.url指定JDBC URL.
###spring.datasource.use-disposable-connection-facade是否對連接進行包裝,防止連接關閉之后被使用.
###spring.datasource.use-equals比較方法名時是否使用String.equals()替換==.
###spring.datasource.use-lock是否對連接操作加鎖
###spring.datasource.username指定數據庫名.
###spring.datasource.validation-interval指定多少ms執行一次連接校驗.
###spring.datasource.validation-query指定獲取連接時連接校驗的sql查詢語句.
###spring.datasource.validation-query-timeout指定連接校驗查詢的超時時間.
###spring.datasource.validation-timeout設定連接校驗的超時時間,當使用Hikari connection pool時指定
###spring.datasource.validator-class-name用來測試查詢的validator全限定名.
###spring.datasource.xa.data-source-class-name指定數據源的全限定名.
###spring.datasource.xa.properties指定傳遞給XA data source的屬性
###spring.datasource.url=jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF8
##########################################
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
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
##########################################
##SPring JPA配置信息
###spring.jpa.database指定目標數據庫.
###spring.jps.show-sq:是否顯示sql語句
###spring.jpa.hibernate.ddl-auto指定DDL mode (none, validate, update, create, create-drop). 當使用內嵌數據庫時,默認是create-drop,否則為none.
###spring.jpa.hibernate.naming-strategy指定命名策略.
###其他:
###spring.jpa.database-platform指定目標數據庫的類型.
###spring.jpa.generate-ddl是否在啟動時初始化schema,默認為false
###spring.jpa.hibernate.ddl-auto指定DDL mode (none, validate, update, create, create-drop). 當使用內嵌數據庫時,默認是create-drop,否則為none.
###spring.jpa.hibernate.naming-strategy指定命名策略.
###spring.jpa.open-in-view是否注冊OpenEntityManagerInViewInterceptor,綁定JPA EntityManager到請求線程中,默認為: true
###spring.jpa.properties添加額外的屬性到JPA provider.
###spring.jpa.show-sql是否開啟sql的log,默認為: false
##########################################
spring.jpa.database = MYSQL
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
spring.freemarker.charset=UTF-8
- 編寫測試案例;
(1). 創建實體類Demo
package com.zhaolixiang.spring_boot1.demo.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 創建了一個實體類。
*
* 如何持久化呢?
*
* 1、使用@Entity進行實體類的持久化操作,當JPA檢測到我們的實體類當中有
*
* @Entity 注解的時候,會在數據庫中生成對應的表結構信息。
*
*
* 如何指定主鍵以及主鍵的生成策略?
*
* 2、使用@Id指定主鍵.
*
*
*
* @author Angel -- 守護天使
* @version v.0.1
* @date 2016年12月17日
*/
@Entity
@Table(name="cat")
public class Cat {
/**
* 使用@Id指定主鍵.
*
* 使用代碼@GeneratedValue(strategy=GenerationType.AUTO)
* 指定主鍵的生成策略,mysql默認的是自增長。
*
*/
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;//主鍵.
private String catName;//姓名. cat_name
private int catAge;//年齡. cat_age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
public int getCatAge() {
return catAge;
}
public void setCatAge(int catAge) {
this.catAge = catAge;
}
}
(2). 創建jpa repository接口操作持久化(CrudREpository)
package com.zhaolixiang.spring_boot1.demo.repository;
import org.springframework.data.repository.CrudRepository;
import com.zhaolixiang.spring_boot1.demo.bean.Cat;
public interface CatRepository extends CrudRepository<Cat, Integer>{
}
(3). 創建service類
package com.zhaolixiang.spring_boot1.demo.service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.zhaolixiang.spring_boot1.demo.bean.Cat;
import com.zhaolixiang.spring_boot1.demo.repository.CatRepository;
@Service
public class CatService {
@Resource
private CatRepository catRepository;
/**
* save,update,delete方法需要綁定事物
* 使用@Transactional進行事物綁定
*/
//保存數據
@Transactional
public void save(Cat cat) {
catRepository.save(cat);
}
//刪除數據
@Transactional
public void delete(int id) {
catRepository.delete(id);
}
//查詢數據
@Transactional
public Iterable<Cat> getAll() {
return catRepository.findAll();
}
}
(4). 創建restfil請求類
package com.zhaolixiang.spring_boot1.demo.controller;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zhaolixiang.spring_boot1.demo.bean.Cat;
import com.zhaolixiang.spring_boot1.demo.service.CatService;
@RestController
@RequestMapping("/cat")
public class CatController {
@Resource
private CatService catService;
@RequestMapping("/save")
public String save(){
Cat cat = new Cat();
cat.setCatName("jack");
cat.setCatAge(3);
catService.save(cat);
return "save ok.";
}
@RequestMapping("/delete")
public String delete(){
catService.delete(1);
return "delete ok";
}
@RequestMapping("/getAll")
public Iterable<Cat> getAll(){
return catService.getAll();
}
}
(5). 測試
- 總結;
個人在按照上面步驟操作時,demo並沒有在數據庫中定義表結構,最后發現,Demo類文件不在App.class最在的文件目錄中!!!
個人在按照上面步驟操作時,突然讀取不到數據庫的信息,也不報錯,到后來才發現數據庫調用錯了,本來調用服務器來測試的,不知道什么時候調用本地數據庫了,本地數據庫對應表里沒有信息,所有一直調用不到,大一呀!!!
數據庫test不會自動生成,需要首先自己創建。
作者:AiPuff
鏈接:http://www.jianshu.com/p/4d1844a5680c
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。