需要完成整合的总体目的:
- 将SSH框架中的Hibernate托管给Spring,获取SessionFactory对象并使用SessionFactory对象创建与数据库的会话。
- 为了达到使用Hibernate的目的,还需要配置 数据源、事务管理器、持久化类映射等。
达到以上目的,步骤如下:
1. 引入依赖
在POM文件中添加 Hibernate、Spring、JDBC、数据源等依赖。可以参考如下代码示例:
<dependencies>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.3</version>
</dependency>
<!-- JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.3</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
2. 数据源配置
在Spring的配置文件(如 applicationContext.xml)中,配置数据源信息。可以参考如下代码示例:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
<!-- 配置连接池 -->
<property name="initialSize" value="5"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 1 FROM DUAL" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<property name="filters" value="stat" />
</bean>
3. 配置事务管理器和SessionFactory
在Spring的配置文件中,配置事务管理器和SessionFactory。可以参考如下代码示例:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.example.entity" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
4. UserService类示例
编写 UserService 类,用于演示通过Spring获取SessionFactory对象,创建与数据库的会话,进行数据操作。可以参考如下代码示例:
@Service
@Transactional
public class UserService {
@Autowired
private SessionFactory sessionFactory;
public void addUser(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
public User getUserById(int id) {
Session session = sessionFactory.getCurrentSession();
User user = session.get(User.class, id);
return user;
}
}
5. UserController类示例
编写 UserController 类,用于演示在Controller层使用UserService类完成数据操作。可以参考如下代码示例:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/add")
public String addUser(@RequestBody User user) {
userService.addUser(user);
return "添加成功!";
}
@GetMapping("/{id}")
public User getUserById(@PathVariable int id) {
User user = userService.getUserById(id);
return user;
}
}
上述示例代码中:
- UserService中的 sessionFactory 对象是使用 @Autowired 注解实现自动注入的。
- Session session = sessionFactory.getCurrentSession(); 代码通过获取SessionFactory对象创建与数据库的会话。
- UserService中的 addUser() 方法和 getUserById() 方法,都是通过获取与数据库的会话完成对数据库的操作。
- UserController中可以直接使用 UserService 完成对数据库的操作。而UserService中的SessionFactory对象是通过Spring自动注入的,不需要手动创建和管理。
综上所述,通过以上步骤,就可以实现将SSH框架中的Hibernate托管给Spring,获取SessionFactory对象并使用SessionFactory对象创建与数据库的会话。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SSH整合中 hibernate托管给Spring得到SessionFactory - Python技术站