JavaWeb——Spring 系列
五、AOP 与 Hibernate 整合操作数据库
- Spring 中提供了 HibernateTemplate 类和 HibernateDaoSupport 类及其子类,使得能够结合 Hibernate 进行编程。
1、配置数据源
- 这一步在 applicationContext.xml 中完成,代码如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8"/> <property name="username" value="root"/> <property name="password" value="*********"/> </bean>
2、配置 Hibernate 配置文件
- 新建一个 .hbm.xml 文件,编辑如下代码:
<?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> <class name="com.myCode.DAOCode.bean.User" table="user"> <id name="id" column="id" type="int"> <generator class="native"/> </id> <property name="name" type="java.lang.String" length="15"> <column name="name"/> </property> <property name="age" type="int"> <column name="age"/> </property> <property name="sex" type="java.lang.String" length="4"> <column name="sex"/> </property> </class> </hibernate-mapping>
3、为项目配置 Hibernate
- 这一步回到 applicationContext.xml 中编辑,如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties"> <props> <!-- 由于目标数据库为 MySQL,所以选择数据库方言为MySQLDialect --> <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/myCode/DAOCode/xml/User.hbm.xml</value> </list> </property> </bean> <bean id="hibernateUserDAO" class="com.myCode.DAOCode.DAO.HibernateUserDAO"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
4、新建一个事务类
- 新建一个 DAO 类作为事务类,代码如下:
package com.myCode.DAOCode.DAO; import javax.annotation.Resource; import com.myCode.DAOCode.bean.User; import org.hibernate.HibernateException; import org.hibernate.Session; import org.springframework.jdbc.core.support.JdbcDaoSupport; import org.springframework.orm.hibernate5.HibernateCallback; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import org.springframework.transaction.annotation.Transactional; @Resource @Transactional(readOnly=false) public class HibernateUserDAO extends HibernateDaoSupport{ public void insert(final User user){ try{ assert getHibernateTemplate() != null; getHibernateTemplate().execute(new HibernateCallback<User>() { @Override public User doInHibernate(Session session) throws HibernateException { session.save(user); return null; } }); }catch (Exception e){ System.out.println("执行失败,原因:"+e.getMessage()); } } }
5、执行配置
- 在执行类里编辑如下代码:
import com.myCode.DAOCode.DAO.HibernateUserDAO; import com.myCode.DAOCode.bean.User; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class HibernateAddUser { public static void main(String[] args) { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); HibernateUserDAO userDAO = (HibernateUserDAO)factory.getBean("hibernateUserDAO"); User user = new User(); user.setName("叶灵"); user.setAge(20); user.setSex("男"); try{ userDAO.insert(user); System.out.println("添加成功"); }catch (Exception e){ System.out.println("添加失败,原因:"+e.getMessage()); } } }
6、执行结果
- 执行代码之后会在控制台输出如下关键信息:
Hibernate: insert into user (name, age, sex) values (?, ?, ?) 添加成功
- 在数据库管理系统的可视化工具中查看 user 表中的数据如下: