SpringBoot集成Hibernate

本文介绍如何在SpringBoot项目中集成Hibernate,包括环境搭建、依赖配置、数据源配置及实体类映射等内容,并通过示例展示了DAO层和Service层的具体实现。

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

SpringBoot集成Hibernate

一、环境搭建

开发工具:Spring Tool Suite v_3.9.3(简称STS)

依赖包管理(pom.xml):

<!-- 添加Web应用程序的典型依赖关系 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- JPA框架 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- Oracle数据库支持 -->
<dependency>
	<groupId>com.oracle</groupId>
	<artifactId>ojdbc6</artifactId>
	<version>11.2.0.1.0</version>
</dependency>

<!-- MySQL数据库支持 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.0.25</version>
</dependency>

配置文件

## 数据库配置
spring.datasource.driver-class-name = oracle.jdbc.driver.OracleDriver
spring.datasource.url = jdbc:oracle:thin:@136.6.161.200:1521:orcl
spring.datasource.username = cath_thinkops
spring.datasource.password = cath_thinkops#2018

# JPA配置参数
spring.jpa.show-sql = true
spring.jpa.generate-ddl = true

# MySQL数据库配置
# spring.jpa.database=MYSQL
# 是否显示sql查询语句
# spring.jpa.show-sql=true
# spring.jpa.generate-ddl=true  
# Hibernate DDL auto (create, create-drop, update)
# spring.jpa.hibernate.ddl-auto=update
# spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy  
# spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

数据源配置类

package com.info.conf;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
@PropertySource("classpath:application.properties") // 选择配置文件的来源
public class DruidDBConfig {

	@Autowired
	private Environment env; // SpringBoot会把扫描过后的值放到Environment中

	@Bean(name = "dataSource")
	public DataSource dataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl(env.getProperty("spring.datasource.url"));
		dataSource.setUsername(env.getProperty("spring.datasource.username")); // 用户名
		dataSource.setPassword(env.getProperty("spring.datasource.password")); // 密码
		dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
		dataSource.setInitialSize(2);
		dataSource.setMaxActive(20);
		dataSource.setMinIdle(0);
		dataSource.setMaxWait(60000);
		dataSource.setValidationQuery("SELECT 'x' from dual");
		dataSource.setTestOnBorrow(false);
		dataSource.setTestWhileIdle(true);
		dataSource.setPoolPreparedStatements(false);
		return dataSource;
	}
}

二、实现

Hibernate映射实体类

package com.info.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

import com.fasterxml.jackson.annotation.JsonFormat;

@Entity
@Table(name = "IDC_ALARM_BORD", schema = "CATH_THINKOPS")
public class AlarmBord {

	@Id
	@GeneratedValue(generator = "paymentableGenerator")
	@GenericGenerator(name = "paymentableGenerator", strategy = "increment")
	@Column(name = "ID", unique = true, nullable = false)
	private Long id;

	@Column(name = "ALARM_ID")
	private String alarmId;

	@Column(name = "ALARM_TITLE")
	@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss", timezone = "GMT+08:00") // 指定时间的格式
	private String alarmTitle;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getAlarmId() {
		return alarmId;
	}

	public void setAlarmId(String alarmId) {
		this.alarmId = alarmId;
	}

	public String getAlarmTitle() {
		return alarmTitle;
	}

	public void setAlarmTitle(String alarmTitle) {
		this.alarmTitle = alarmTitle;
	}

}

DAO

package com.info.dao;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.info.entity.AlarmBord;

/**
 * CrudRepository 接口继承于 Repository 接口,并新增了简单的增、删、查等方法
 * 
 * T save(T entity); // 保存单个实体
 * Iterable<T> save(Iterable<? extends T> entities); // 保存集合
 * T findOne(ID id); // 根据id查找实体
 * boolean exists(ID id); // 根据id判断实体是否存在
 * Iterable<T> findAll(); // 查询所有实体,不用或慎用!
 * long count(); // 查询实体数量
 * void delete(ID id); // 根据Id删除实体
 * void delete(T entity); // 删除一个实体
 * void delete(Iterable<? extends T> entities); // 删除一个实体的集合
 * void deleteAll(); // 删除所有实体,不用或慎用!
 */
@Repository
public interface AlarmBordDao extends CrudRepository<AlarmBord, Long> {

	public List<AlarmBord> findAll();

	// 支持分页查询
	public Page<AlarmBord> findAll(Pageable pageable);

}

CrudRepositoryJpaRepository 区别:

他们存在继承关系:

PagingAndSortingRepository 继承 CrudRepository
JpaRepository 继承 PagingAndSortingRepository

CrudRepository 提供基本的增删改查;PagingAndSortingRepository 提供分页和排序方法;JpaRepository 提供JPA需要的方法
  
在这里插入图片描述

Service

package com.info.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import com.info.dao.AlarmBordDao;
import com.info.entity.AlarmBord;

@Service
public class AlarmBordService {

	@Autowired
	private AlarmBordDao alarmBordDao;

	// 查询所有记录
	public List<AlarmBord> findAll() {
		return alarmBordDao.findAll();
	}

	/*
	 * 分页查询所有记录
	 * page: 当前页数
	 * size: 查询条数
	 * 
	 * Page: 是封装查询结果的对象
	 * List<Class<T> cls> getContent(): 获取查询结果数据
	 * int getTotalPages(): 获取总页数
	 * int getTotalElements(): 获取总数据条数
	 */
	public Page<AlarmBord> findAll(int page, int size) {
		return alarmBordDao.findAll(buildPageRequest(page, size));
	}

	// 获取分页请求
	private PageRequest buildPageRequest(int page, int size) {
		return new PageRequest(page, size);
	}

}

### Spring Boot与Hibernate集成教程 在Spring Boot中集成Hibernate可以通过配置`application.properties`文件以及添加必要的依赖来实现。以下是详细的配置方法和步骤说明。 #### 1. 添加依赖 为了在Spring Boot项目中使用Hibernate,需要在`pom.xml`文件中添加`spring-boot-starter-data-jpa`依赖[^1]。此依赖会自动引入Hibernate作为默认的JPA提供者。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` #### 2. 配置数据源 接下来,在`application.properties`文件中配置数据源和Hibernate属性。以下是一个示例配置,假设使用的是MySQL数据库[^2]: ```properties ## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url = jdbc:mysql://localhost:3306/notes_app?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false spring.datasource.username = root spring.datasource.password = MyNewPass4! ## Hibernate Properties # The SQL dialect makes Hibernate generate better SQL for the chosen database spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto = update ``` - `spring.datasource.url`: 数据库连接URL。 - `spring.datasource.username`: 数据库用户名。 - `spring.datasource.password`: 数据库密码。 - `spring.jpa.properties.hibernate.dialect`: 指定Hibernate使用的SQL方言。 - `spring.jpa.hibernate.ddl-auto`: 定义Hibernate如何处理数据库模式(如创建、更新或验证)。 #### 3. 创建实体类 定义一个实体类,并使用JPA注解进行映射。例如,创建一个名为`User`的实体类[^4]: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters } ``` #### 4. 创建Repository接口 创建一个继承自`JpaRepository`的接口,用于执行CRUD操作: ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { } ``` #### 5. 配置Servlet Listener(如果需要) 对于非Spring Boot项目,可能需要手动配置`SessionFactory`,但Spring Boot已经简化了这一过程[^3]。通常情况下,无需额外配置`SessionFactory`,因为Spring Boot会自动配置。 #### 6. 测试API 可以创建一个控制器来测试数据库操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/users") public class UserController { @Autowired private UserRepository userRepository; @GetMapping public List<User> getAllUsers() { return userRepository.findAll(); } @PostMapping public User createUser(@RequestBody User user) { return userRepository.save(user); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值