Hibernate实现CRUD(附项目源码)

亦凉 2021-08-30 14:01 539阅读 0赞

本文主要讲解hibernate框架,ORM的概念和hibernate入门,相信大家看了之后就会使用hibernate了。

一、基本概念

hibernate是一种ORM框架,全称为Object_Relative Database-Mapping,在java对象与关系数据库之间建立某种映射,以实现直接存取java对象。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70

二、为什么要使用hibernate?

既然hibernate是关于java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层DAO层。

首先,先来回顾一下编写DAO层的的经历:

在DAO层操作XML,将数据封装到XML文件上,读写XML文件数据实现CRUD。
在DAO层使用原生JDBC连接数据库,实现CRUD。
嫌弃JDBC的connection、statement、resultset等对象太繁琐,使用对原生JDBC的封装组件—>DbUtils组件
我们来看看使用DbUtils之后,程序的代码是怎么样的:

  1. public class CategoryDAOImpl implements zhongfucheng.dao.CategoryDao{
  2. @Override
  3. publicvoidaddCategory(Category category) {
  4. QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
  5. String sql = "INSERT INTO category (id, name, description) VALUES(?,?,?)";
  6. try {
  7. queryRunner.update(sql, new Object[]{category.getId(), category.getName(), category.getDescription()});
  8. } catch (SQLException e) {
  9. throw new RuntimeException(e);
  10. }
  11. }
  12. @Override
  13. public Category findCategory(String id) {
  14. QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
  15. String sql = "SELECT * FROM category WHERE id=?";
  16. try {
  17. Category category = (Category) queryRunner.query(sql, id, new BeanHandler(Category.class));
  18. return category;
  19. } catch (SQLException e) {
  20. throw new RuntimeException(e);
  21. }
  22. }
  23. @Override
  24. public List<Category> getAllCategory() {
  25. QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
  26. String sql = "SELECT * FROM category";
  27. try {
  28. List<Category> categories = (List<Category>) queryRunner.query(sql, new BeanListHandler(Category.class));
  29. return categories;
  30. } catch (SQLException e) {
  31. throw new RuntimeException(e);
  32. }
  33. }
  34. }

其实使用DbUtils时,DAO层中的代码编写是很有规律的。

当插入数据的时候,就将Javabean对象拆分,拼装成SQL语句
当查询数据的时候,用SQL把数据库表中的列组合,拼装成Javabean对象
Javabean对象和数据库表中的列存在映射关系!如果程序能够自动生成SQL就好了,hibernate应运而生。

三、hibernate快速入门

学习一个框架无非就是三步:

  • 引入jar包
  • 配置XML文件
  • 熟悉API

1、引入jar包

我们使用的是Hibernate5.4的版本

hibernate5.jar核心 + required 必须引入的(6个) + jpa 目录 + 数据库驱动包

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70 1

2、配置XML文件

(1)编写一个Entity对象->Employee.java

编写对象映射->Employee.hbm.xml。一般它和JavaBean对象放在同一目录下

20200618100015458.jpg

在上面的模板上修改~下面会具体讲解这个配置文件!

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2020??1??9?? ????9:08:43 by Hibernate Tools 3.5.0.Final -->
  5. <hibernate-mapping>
  6. <class name="com.ssh.entities.Employee" table="SSH_EMPLOYEE">
  7. <id name="id" type="java.lang.Integer">
  8. <column name="ID" />
  9. <generator class="native" />
  10. </id>
  11. <property name="lastName" type="java.lang.String">
  12. <column name="LASTNAME" />
  13. </property>
  14. <property name="email" type="java.lang.String">
  15. <column name="EMAIL" />
  16. </property>
  17. <property name="birth" type="java.util.Date">
  18. <column name="BIRTH" />
  19. </property>
  20. <property name="createTime" type="java.util.Date">
  21. <column name="CREATE_TIME" />
  22. </property>
  23. <many-to-one name="department" class="com.ssh.entities.Department">
  24. <column name="DEPARTMENT_ID" />
  25. </many-to-one>
  26. </class>
  27. </hibernate-mapping>

(2)主配置文件hibernate.cfg.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
  8. <property name="hibernate.connection.driverClass">oracle.jdbc.driver.OracleDriver</property>
  9. <property name="hibernate.connection.username">mine</property>
  10. <property name="hibernate.connection.password">mine</property>
  11. <property name="hibernate.connection.jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
  12. <property name="hibernate.show_sql">true</property>
  13. <property name="hibernate.hbm2ddl.auto">update</property>
  14. <mapping resource="com/ssh/entities/Department.hbm.xml"/>
  15. <mapping resource="com/ssh/entities/Employee.hbm.xml"/>
  16. </session-factory>
  17. </hibernate-configuration>

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  11. <!-- 导入资源文件 -->
  12. <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true"/>
  13. <!-- 配置c3p0数据源 -->
  14. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  15. <property name="user" value="${jdbc.username}"></property>
  16. <property name="password" value="${jdbc.password}"></property>
  17. <property name="driverClass" value="${jdbc.driverClass}"></property>
  18. <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
  19. <property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
  20. <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
  21. </bean>
  22. <!-- 定义Hibernate的SessionFactory LocalSessionFactoryBean-->
  23. <bean id="sessionFactory"
  24. class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  25. <!-- 依赖注入数据源,注入上面定义的dataSource -->
  26. <property name="dataSource" ref="dataSource"/>
  27. <!-- mappingResouces属性用来列出全部映射文件 -->
  28. <property name="mappingResources">
  29. <list>
  30. <!-- 以下用来列出Hibernate映射文件 -->
  31. <value>com/ssh/entities/Department.hbm.xml</value>
  32. <value>com/ssh/entities/Employee.hbm.xml</value>
  33. <value>hibernate.cfg.xml</value>
  34. </list>
  35. </property>
  36. <!-- 定义Hibernate的SessionFactory的属性 -->
  37. <property name="hibernateProperties">
  38. <props>
  39. <!-- 指定数据库方言 -->
  40. <prop key="hibernate.dialect">
  41. org.hibernate.dialect.OracleDialect</prop>
  42. <!-- 是否根据需要每次自动创建数据库 -->
  43. <prop key="hibernate.hbm2ddl.auto">update</prop>
  44. <!-- 显示Hibernate持久化操作所生成的SQL -->
  45. <prop key="hibernate.show_sql">true</prop>
  46. <!-- 将SQL脚本进行格式化后再输出 -->
  47. <prop key="hibernate.format_sql">true</prop>
  48. </props>
  49. </property>
  50. </bean>
  51. <!-- 配置spring的声明式事务
  52. 1.配置hibernate的事务管理器 -->
  53. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  54. <property name="sessionFactory" ref="sessionFactory"></property>
  55. </bean>
  56. <tx:annotation-driven transaction-manager="transactionManager"/>
  57. <!-- <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"></bean>
  58. 2.配置事务属性
  59. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  60. <tx:attributes>
  61. <tx:method name="get" read-only="true"/>
  62. <tx:method name="*"/>
  63. </tx:attributes>
  64. </tx:advice> -->
  65. <!-- 3.配置事务切入点,再把事务属性和事务切入点关联起来 -->
  66. <!-- <aop:config>
  67. <aop:pointcut expression="execution(* com.guor.ssh.service.*.*(..))" id="txPointcut"/>
  68. <aop:advisor advice-ref="exAdvice" pointcut-ref="txPointcut"/>
  69. </aop:config> -->
  70. </beans>

applicationContext-beans.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <bean id="employeeDao" class="com.ssh.dao.EmployeeDao">
  6. <property name="sessionFactory" ref="sessionFactory"></property>
  7. </bean>
  8. <bean id="departmentDao" class="com.ssh.dao.DepartmentDao">
  9. <property name="sessionFactory" ref="sessionFactory"></property>
  10. </bean>
  11. <bean id="employeeService" class="com.ssh.service.EmployeeService">
  12. <property name="employeeDao" ref="employeeDao"></property>
  13. </bean>
  14. <bean id="departmentService" class="com.ssh.service.DepartmentService">
  15. <property name="departmentDao" ref="departmentDao"></property>
  16. </bean>
  17. <bean id="employeeAction" class="com.ssh.actions.EmployeeAction" scope="prototype">
  18. <property name="employeeService" ref="employeeService"></property>
  19. <property name="departmentService" ref="departmentService"></property>
  20. </bean>
  21. </beans>

struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  7. <constant name="struts.devMode" value="true" />
  8. <package name="default" namespace="/" extends="struts-default">
  9. <!-- 定义新的拦截器栈, 配置prepare拦截器栈的alwaysInvokePrepare参数值为false-->
  10. <interceptors>
  11. <interceptor-stack name="sshStack">
  12. <interceptor-ref name="paramsPrepareParamsStack">
  13. <param name="prepare.alwaysInvokePrepare">false</param>
  14. </interceptor-ref>
  15. </interceptor-stack>
  16. </interceptors>
  17. <!-- 使用新的拦截器栈-->
  18. <default-interceptor-ref name="sshStack"></default-interceptor-ref>
  19. <action name="emp-*" class="employeeAction" method="{1}">
  20. <result name="list">/WEB-INF/views/emp-list.jsp</result>
  21. <result type="stream" name="delete">
  22. <param name="contentType">text/html</param>
  23. <param name="inputName">inputStream</param>
  24. </result>
  25. <result name="input">/WEB-INF/views/emp-input.jsp</result>
  26. <result name="success" type="redirect">/emp-list</result>
  27. </action>
  28. </package>
  29. </struts>

3、类文件

EmployeeAction

  1. package com.ssh.actions;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.InputStream;
  4. import java.io.UnsupportedEncodingException;
  5. import java.util.Date;
  6. import java.util.Map;
  7. import org.apache.struts2.interceptor.RequestAware;
  8. import com.opensymphony.xwork2.ActionSupport;
  9. import com.opensymphony.xwork2.ModelDriven;
  10. import com.opensymphony.xwork2.Preparable;
  11. import com.ssh.entities.Employee;
  12. import com.ssh.service.DepartmentService;
  13. import com.ssh.service.EmployeeService;
  14. public class EmployeeAction extends ActionSupport implements RequestAware,
  15. ModelDriven<Employee>,Preparable{
  16. private static final long serialVersionUID = 1L;
  17. private EmployeeService employeeService;
  18. public void setEmployeeService(EmployeeService employeeService) {
  19. this.employeeService = employeeService;
  20. }
  21. private DepartmentService departmentService;
  22. public void setDepartmentService(DepartmentService departmentService) {
  23. this.departmentService = departmentService;
  24. }
  25. public String list() {
  26. request.put("employees",employeeService.getAll());
  27. return "list";
  28. }
  29. private Integer id;
  30. public void setId(Integer id) {
  31. this.id = id;
  32. }
  33. public InputStream inputStream;
  34. public InputStream getInputStream() {
  35. return inputStream;
  36. }
  37. public String delete() {
  38. try {
  39. employeeService.delete(id);
  40. inputStream = new ByteArrayInputStream("1".getBytes("UTF-8"));
  41. } catch (UnsupportedEncodingException e) {
  42. e.printStackTrace();
  43. }
  44. return SUCCESS;
  45. }
  46. public String input() {
  47. request.put("departments", departmentService.getAll());
  48. return INPUT;
  49. }
  50. public void prepareInput() {
  51. if(id!=null) {
  52. model = employeeService.get(id);
  53. }
  54. }
  55. public String save() {
  56. if(id == null) {
  57. model.setCreateTime(new Date());
  58. }
  59. employeeService.saveOrUpdate(model);
  60. System.out.println("model");
  61. return SUCCESS;
  62. }
  63. public void prepareSave() {
  64. if(id == null) {
  65. model = new Employee();
  66. }else {
  67. model = employeeService.get(id);
  68. }
  69. }
  70. private Map<String,Object> request;
  71. @Override
  72. public void setRequest(Map<String, Object> arg0) {
  73. this.request = arg0;
  74. }
  75. @Override
  76. public void prepare() throws Exception {}
  77. private Employee model;
  78. @Override
  79. public Employee getModel() {
  80. return model;
  81. }
  82. }

EmployeeService

  1. package com.ssh.service;
  2. import java.util.List;
  3. import com.ssh.dao.EmployeeDao;
  4. import com.ssh.entities.Employee;
  5. public class EmployeeService {
  6. private EmployeeDao employeeDao;
  7. public void setEmployeeDao(EmployeeDao employeeDao) {
  8. this.employeeDao = employeeDao;
  9. }
  10. public void saveOrUpdate(Employee employee) {
  11. employeeDao.saveOrUpdate(employee);
  12. }
  13. public void delete(Integer id) {
  14. employeeDao.delete(id);
  15. }
  16. public List<Employee> getAll(){
  17. List<Employee> employees = employeeDao.getAll();
  18. return employees;
  19. }
  20. public Employee get(Integer id) {
  21. return employeeDao.get(id);
  22. }
  23. }

EmployeeDao

  1. package com.ssh.dao;
  2. import java.util.List;
  3. import com.ssh.entities.Employee;
  4. public class EmployeeDao extends BaseDao{
  5. public void delete(Integer id) {
  6. String hql = "DELETE From Employee e where e.id=?0";
  7. getSession().createQuery(hql).setParameter(0,id).executeUpdate();
  8. }
  9. public List<Employee> getAll() {
  10. //String hql = "From Employee e LEFT OUTER JOIN FETCH e.department";
  11. String hql = "From Employee";
  12. return getSession().createQuery(hql).list();
  13. }
  14. public void saveOrUpdate(Employee employee) {
  15. getSession().saveOrUpdate(employee);
  16. }
  17. public Employee get(Integer id) {
  18. return (Employee)getSession().get(Employee.class,id);
  19. }
  20. }

emp-list.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags"%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title>Insert title here</title>
  9. <script type="text/javascript" src = "js/jquery-2.1.4.min.js"></script>
  10. <script type="text/javascript">
  11. $(function(){
  12. $(".delete").click(function(){
  13. var lastName = $(this).next(":input").val();
  14. var flag = confirm("确定要删除"+lastName+"的信息吗?");
  15. if(flag){
  16. var $tr = $(this).parent().parent();
  17. var url = this.href;
  18. var args = {"time":new Date()}
  19. $.post(url,args,function(data){
  20. if(data=="1"){
  21. alert("删除成功!");
  22. $tr.remove();
  23. }else{
  24. alert("删除失败!");
  25. }
  26. });
  27. }
  28. return false;
  29. })
  30. })
  31. </script>
  32. </head>
  33. <body>
  34. <h4>Employee List Page</h4>
  35. <s:if test="#request.employees == null||#request.employees.size() == 0">
  36. 没有任何员工信息
  37. </s:if>
  38. <s:else>
  39. <table border="1" cellpadding="10" cellspacing="0">
  40. <tr>
  41. <td>ID</td>
  42. <td>LASTNAME</td>
  43. <td>EMAIL</td>
  44. <td>BIRTH</td>
  45. <td>CREATETIME</td>
  46. <td>delete</td>
  47. <td>edit</td>
  48. </tr>
  49. <s:iterator value="#request.employees">
  50. <tr>
  51. <td>${id }</td>
  52. <td>${lastName }</td>
  53. <td>${email }</td>
  54. <td>${birth }</td>
  55. <td>${createTime }</td>
  56. <td>
  57. <a href="emp-delete?id=${id } " class="delete">Delete</a>
  58. <input type="hidden" value="${lastName }"/>
  59. </td>
  60. <td><a href="emp-input?id=${id }">Edit</a></td>
  61. </tr>
  62. </s:iterator>
  63. </table>
  64. </s:else>
  65. </body>
  66. </html>

emp-input.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <!DOCTYPE html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h4>Employee Input Page</h4>
  11. <s:form action="emp-save" method="post">
  12. <s:if test="id != null">
  13. <s:textfield name="lastName" label="LastName" disabled="true"></s:textfield>
  14. <s:hidden name="id"></s:hidden>
  15. </s:if>
  16. <s:else>
  17. <s:textfield name="lastName" label="LastName"></s:textfield>
  18. </s:else>
  19. <s:textfield name="email" label="Email"></s:textfield>
  20. <s:textfield name="birth" label="Birth"></s:textfield>
  21. <s:select list="#request.departments"
  22. listKey="id" listValue="departmentName"
  23. name="department.id" label="Department">
  24. </s:select>
  25. <s:submit></s:submit>
  26. </s:form>
  27. </body>
  28. </html>

四、完成hibernate增删改查

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70 2

五、configuration

1、配置管理类:主要管理配置文件的一个类

它拥有一个子类annotationConfiguration,也就是说我们可以使用注解来代替XML配置文件来配置相对应的信息。

20200618100508157.jpg

2、方法

(1)configure方法用于加载配置文件:

如果指定参数,那么加载参数的路径配置文件
如果不指定参数,默认加载src/目录下的hibernate.cfg.xml
(2)buildSessionFactory()用于创建session工厂

(3)sessionFactory方法

SessionFactory—>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有这么一个节点

(4)openSession方法,创建一个session对象

(5)getCurrentSession方法,创建session对象或取出session对象

3、session

session是hibernate最重要的对象,session维护了一个连接(connection),只要使用hibernate操作数据库,都需要使用session对象。

更新操作

使用save方法,调用这个方法把对象保存在数据库中,session对象提供其他方法进行对数据库的更新

  • session.save(obj); 【保存一个对象】
  • session.update(obj); 【更新一个对象】
  • session.saveOrUpdate(obj); 【保存或者更新的方法】
  • 没有设置主键,执行保存;
  • 有设置主键,执行更新操作;
  • 如果设置主键不存在报错!

六、HQL查询

1、HQL

hibernate query language即hibernate提供的面向对象的查询语言

查询的是对象以及对象的属性,区分大小写

2、SQL

strut query language结构化查询语言。不区分大小写

3、本地SQL查询

有的时候,如果SQL是非常复杂的,我们不能靠SQL查询来实现功能的话,我们就需要使用原生的SQL进行复杂查询,但是它有一个缺陷,不能跨平台,因此我们在主配置文件中已经配置了数据库的“方言”了。

  1. //将所有的记录封装成User对象存进List集合中
  2. SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);
  3. List list = sqlQuery.list();
  4. System.out.println(list);

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70 3

六、beginTransaction方法

开启事务,返回的是一个事务对象,hibernate规定所有的数据库都必须在事务环境下进行,否者报错!

1、数据库配置

  1. <session-factory>
  2. <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
  3. <property name="hibernate.connection.driverClass">oracle.jdbc.driver.OracleDriver</property>
  4. <property name="hibernate.connection.username">mine</property>
  5. <property name="hibernate.connection.password">mine</property>
  6. <property name="hibernate.connection.jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
  7. <property name="hibernate.show_sql">true</property>
  8. <property name="hibernate.hbm2ddl.auto">update</property>
  9. <mapping resource="com/ssh/entities/Department.hbm.xml"/>
  10. <mapping resource="com/ssh/entities/Employee.hbm.xml"/>
  11. </session-factory>

2、其它参数配置

  1. <!-- 定义Hibernate的SessionFactory的属性 -->
  2. <property name="hibernateProperties">
  3. <props>
  4. <!-- 指定数据库方言 -->
  5. <prop key="hibernate.dialect">
  6. org.hibernate.dialect.OracleDialect</prop>
  7. <!-- 是否根据需要每次自动创建数据库 -->
  8. <prop key="hibernate.hbm2ddl.auto">update</prop>
  9. <!-- 显示Hibernate持久化操作所生成的SQL -->
  10. <prop key="hibernate.show_sql">true</prop>
  11. <!-- 将SQL脚本进行格式化后再输出 -->
  12. <prop key="hibernate.format_sql">true</prop>
  13. </props>
  14. </property>

3、加载映射文件

  1. <property name="mappingResources">
  2. <list>
  3. <!-- 以下用来列出Hibernate映射文件 -->
  4. <value>com/ssh/entities/Department.hbm.xml</value>
  5. <value>com/ssh/entities/Employee.hbm.xml</value>
  6. <value>hibernate.cfg.xml</value>
  7. </list>
  8. </property>

七、hibernate执行流程图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70 4

尚硅谷Java视频_SSH整合&综合案例 视频教程

SSH项目源码:

链接: https://pan.baidu.com/s/1BK0V1wxA-GQrWco10WEzeg 提取码: 2e3e

发表评论

表情:
评论列表 (有 0 条评论,539人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernate

    先前也看过一些关于Hibernate的书, 就最著名的两本, Gavin King写的大作<<Hibernate In Action>>和<<Java Persistence