Spring-Boot-JPA hibernate 实例

本文详细介绍如何使用SpringBoot结合JPA实现一个简单的增删查改应用案例,涵盖项目搭建、实体类定义、仓库接口编写及控制器和服务层的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,测试成功!!
有问题的可以再下面留言。








### spring-boot-starter-data-jpa 功能介绍及作用 `spring-boot-starter-data-jpa` 是 Spring Boot 提供的一个 Starter,用于简化 JPA(Java Persistence API)在项目中的集成和配置过程。以下是其主要功能和作用: #### 1. **自动化配置** 通过 `spring-boot-starter-data-jpa`,Spring Boot 可以基于项目的依赖和配置文件自动完成大部分必要的设置。例如,它可以检测到数据库驱动程序并自动配置数据源、事务管理器以及 Hibernate 的相关属性[^2]。 #### 2. **支持声明式数据访问** 该 Starter 基于 Spring Data JPA 实现了一套强大的 Repository 接口机制。开发者只需定义接口继承自 `JpaRepository` 或其他相关接口即可获得丰富的 CRUD 方法,而无需编写具体的实现代码[^2]。 #### 3. **内置常用配置项** `spring-boot-starter-data-jpa` 支持多种常用的配置选项,比如: - 数据库连接字符串 (`url`)。 - 用户名和密码 (`username`, `password`)。 - JDBC 驱动类名称 (`driver-class-name`)。 - 是否启用 SQL 日志打印 (`show-sql`)。 - 表结构同步策略 (`hibernate.ddl-auto`) 等[^2]。 #### 4. **减少样板代码** 借助 Spring Data JPA 的特性,`spring-boot-starter-data-jpa` 大幅减少了传统 DAO 层开发所需的手动编码量。例如,查询方法可以通过命名约定直接定义,而不需要额外书写 JPQL 或原生 SQL 查询语句[^2]。 #### 5. **提供扩展能力** 尽管默认情况下已经提供了许多便利的功能,但如果需要更复杂的定制化需求,则仍然能够轻松覆盖默认行为或添加新的逻辑[^3]。 下面展示如何在一个简单的 Maven 工程里引入此 Starter 并进行基本配置的例子: ```xml <dependencies> <!-- 引入 Spring Boot JPA Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 添加 MySQL 连接器作为示例 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ``` 接着,在 application.yml 文件中指定相应的参数: ```yaml spring: datasource: username: root password: example_password url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true ``` 最后利用 @Entity 注解标记实体类并与数据库表建立映射关系;同时创建对应的 Repository 接口来操作持久层对象实例---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值