Spring Hibernate整合
在Java Web开发中,Spring和Hibernate是两个非常流行的框架,它们各自具有强大的功能,但同时也存在一些限制,整合这两个框架可以充分发挥它们的优势,提高开发效率,本文将介绍如何在Spring和Hibernate之间进行整合,并提供相关问题的解答。
Spring配置文件
1、1 配置数据源
在Spring中,我们需要配置一个数据源(DataSource)来连接数据库,需要在项目的pom.xml文件中添加相关依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.10</version> </dependency>
在Spring的配置文件(如applicationContext.xml)中配置数据源:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean>
1、2 配置事务管理器
Spring支持通过XML或注解的方式配置事务管理器,这里我们使用XML方式配置:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
Hibernate配置文件
2、1 配置hibernate-configuration.xml
在项目的src/main/resources目录下创建hibernate-configuration.xml文件,用于配置Hibernate的相关参数:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-... --> </session-factory> </hibernate-configuration>
2、2 配置实体类映射文件(EntityMapping.hbm.xml)
在src/main/resources目录下创建实体类映射文件,用于定义实体类与数据库表之间的映射关系:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="com.example.entity.User" table="user"> <id name="id" type="int"> <generator class="native"/> </id> <property name="username" type="string"/> <property name="password" type="string"/> <property name="email" type="string"/> </class> </hibernate-mapping>
整合示例代码
下面是一个简单的整合示例,展示了如何在Spring和Hibernate之间进行整合:
import org.hibernate.SessionFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import com.example.entity.User; import com.example.service.UserService; import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.concurrent.locks.ReentrantLock; import javax.sql.DataSource; // 注意引入这个包,因为在Spring的事务管理器中使用了DataSource接口,所以需要引入对应的包,但是在实际项目中,我们通常会使用Spring的@Autowired注解来自动注入DataSource对象,这里为了演示方便,我们直接使用DataSource接口,由于@Autowired注解不能用在这里,所以我们需要手动实现getDataSource方法来获取DataSource对象,由于Hibernate的SessionFactory对象不能被Spring容器管理,所以我们需要手动获取SessionFactory对象,由于事务管理器不能被Spring容器管理,所以我们需要手动提交事务,我们需要在UserService类中添加以下代码: public class UserServiceImpl implements UserService{ // 注意实现接口时要加上public关键字 public void addUser(User user){ // ... getDataSource().getConnection().setAutoCommit(false); // ... getSessionFactory().openSession().save(user); // ... getDataSource().getConnection().commit(); // ... getDataSource().getConnection().setAutoCommit(true); // ... getSessionFactory().close(); // ...}
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/210831.html