Spring-Boot-JPA hibernate 實例

JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。

Sun引入新的JPA ORM規範出於兩個原因:其一,簡化現有Java EE和Java SE應用開發工作;其二,Sun希望整合ORM技術,實現天下歸一。

用spring boot創建一個JPA實例需要以下幾個步驟:
  •  創建配置文件,默認在src/main/resource下
  •  創建實體類
  •  創建jpa repository類操作持久化(CrudRepository)
  •  創建service類
  •  創建controller
  •  測試
 首先建一個maven項目,pom代碼如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ziyu.springboot</groupId>
  <artifactId>boot3</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  	
  	<!-- spring boot 必須引入的 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
	</parent>
	
	<dependencies>
		<!-- spring boot devtools熱部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional><!-- optional=true,依賴不會傳遞,該項目依賴devtools;之後依賴myboot項目的項目如果想要使用devtools,需要重新引入 -->
		</dependency>
		<!-- spring boot 必須依賴的 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 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>
	</dependencies>
	
	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<!-- 資源文件拷貝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java編譯插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<!-- 配置Tomcat插件 -->
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<version>2.2</version>
				</plugin>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
  
</project>

然後在src/main/resource目錄下創建一個配置文件application.properties,代碼如下:

######  mysql連接池    #######
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#####   spring jpa #######
spring.jpa.database=MYSQL
#  顯示mysql語句
spring.jpa.show-sql=true
#  對應的mysql操作
spring.jpa.hibernate.ddl-auto=update
#  命名策略,創建實體類後悔自動在表中創建表結構
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
 之後在src/main/java目錄下創建一個包,包名隨便,比如com.ziyu.hibernate,然後在該包下創建四個包,包名分別是: bean,controller,repository,service

在bean包下創建一個實體類Cat.java,代碼如下:
package com.ziyu.hibernate.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/*
 * @Entity  會在數據庫中產生對應的表結構信息
 * 
 * @id      指定主鍵
 * 
 * GeneratedValue(strategy=GenerationType.AUTO)指定主鍵的生成策略 ,mysqk默認是自增長
*/
@Entity
public class Cat {

	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	private String catName;
	
	private int catAge;

	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;
	}
	
	
	
}
 在com.ziyu.hibernate目錄下創建一個啓動類HelloApplication.java,代碼如下:

package com.ziyu.hibernate;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
@Configuration
@EnableAutoConfiguration
public class HelloApplication {

	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(HelloApplication.class);
		app.setBannerMode(org.springframework.boot.Banner.Mode.OFF);
		app.run(args);

		
	}
}
 啓動spring boot,在HelloApplication右鍵Run As > Java Application
如果在test數據庫裏生成了一個cat表如下圖,那麼就到這裏就已經初步完成了!


接下來在respository包下新建一個接口CatRepository,該接口繼承了CrudRepository<Cat, Integer>,代碼如下:

package com.ziyu.hibernate.repository;

import org.springframework.data.repository.CrudRepository;

import com.ziyu.hibernate.bean.Cat;

public interface CatRepository extends CrudRepository<Cat, Integer>{

}
 之後在service層創建一個類CatService,代碼如下:
package com.ziyu.hibernate.service;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.repository.CatRepository;

@Service
public class CatService {
	
	@Resource
	private CatRepository catRepository;
	/*	
	 * 
	 * update,save,delete都方法需要綁定事務
	 * 
	 * 用@Transactional進行事務綁定
	*/
	@Transactional
	public void save(Cat cat) {
		catRepository.save(cat);
	}
	
	@Transactional
	public void delete(int id) {
		catRepository.delete(id);
	}
	
	public Iterable<Cat> getAll() {
		return catRepository.findAll();
	}
}

最後在controller層創建CatController,代碼如下:
package com.ziyu.hibernate.controller;

import java.util.Iterator;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.service.CatService;

@RequestMapping("/cat")
@RestController
public class CatController {

	@Resource
	private CatService catService;
	
	@RequestMapping("/save")
	public String save() {
		Cat cat = new Cat();
		cat.setCatName("peety");
		cat.setCatAge(18);
		catService.save(cat);
		return "save ok";
	}
	
	@RequestMapping("/del")
	public String del() {
		catService.delete(1);
		return "del ok";
	}
	
	@RequestMapping("/getAll")
	public Iterator<Cat> getAll() {
		return catService.getAll().iterator();
	}
}
做到這裏代碼就已經全部完成了,接下來啓動HelloApplication測試:
瀏覽器輸入地址:http://localhost:8080/cat/save 看到如下結果:


接着輸入地址:http://localhost:8080/cat/getAll,結果如下:


再測試delete,http://localhost:8080/cat/del ,結果如下:


OK,測試成功!!
有問題的可以再下面留言。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章