avatar

Catalog
Hibernate 的一些简单总结及SSH整合

Hibernate 的一些简单总结及SSH整合

  1. Hibernate 的简述:

    • Hibernate是一个持久化框架。

    • Hibernate是一个ORM(Object Relational Mapping 对象关系映射)框架,它是一个面向Java环境的对象/关系 数据库映射工具。完全采用普通的Java对象而不必继承Hibernate中的某个超类或者实现某个接口。

    • 是一个开源的轻量级(就是不需要依赖其他就可以运行)框架 , 不在写复杂的SQL语句,只需要在配置文件中配置即可。

    • Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,真正实现了采用面向对象的方式操作关系型数据库。 就是实体类和数据库的表一一对应(所以不需要操作数据库表,而是操作实体类对象即可)

    • hibernate运行原理

      运行原理

  1. Hibernate优势

    • Hibernate会处理映射的Java类来使用XML文件,数据库表和无需编写任何一行代码。
    • 尽量减少与智能读取策略数据库的访问。
    • 提供了简单的API,用于直接从数据库中存储和检索Java对象。
  • 提供数据的简单查询。
  1. Hibernate 的使用

    1. 下载并部署jar包
    • 下载hibernate-release-4.3.11.Final
      • maven项目导入依赖
    1
    2
    3
    4
    5

    org.hibernate
    hibernate-core
    3.6.10.Final


    1. 配置Hibernate

      • 配置文件名为hibernate.cfg.xm(如果和spring ,springmvc整合的话配置在application中)

        xml
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28

        hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
        <hibernate-configuration>
        <session-factory>

        <property name="connection.driver_class">com.mysql.jdbc.Driverproperty>
        <property name="connection.url">jdbc:mysql://192.168.1.15:3306/testproperty>
        <property name="connection.username">znsd_testproperty>
        <property name="connection.password">123456property>

        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty>

        <property name="show_sql">trueproperty>

        <property name="format_sql">trueproperty>


        <property name="hibernate.hbm2ddl.auto">updateproperty>


        <mapping resource="com/znsd/hibernate/bean/Student.hbm.xml" />
        session-factory>
        hibernate-configuration>

        hibernate.hbm2ddl.auto 配置

        • create-drop:系统启东时先创建数据库,系统退出时删除数据库
        • create:系统启动时先删除原有数据库,再创建新的数据库
        • update:首先检测数据库是否存在,不存在则创建数据库,存在执行操作。
        • validate:验证表结构,不会创建表
* 创建持久化类和映射文件(*.hbm.xml)(如果和spring ,springmvc整合的话*.hbm.xml不需要配置)

  **创建持久化类**

  
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name="stu") //对应数据库表名 久化类建议实现Serializable接口,不能使用finnal修饰
public class StudentInfo implements Serializable {
@Id //主键
private int studentId; // 学生id
private int classId; // 班级号
private String name;
private String sex;
private int age;
private String classNa;
**配置映射文件**(*.hbm.xml)
xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.znsd.info.StudentInfo" table="stu">
<id name="studentId" column="studentId">
<generator class="assigned"/>
id>
<property name="classId"/>
<property name="name"/>
<property name="sex"/>
<property name="age" />

<property name="classNa"/>
class>
hibernate-mapping>
  1. Hibernate API

    • Configuration类:Configuration类负责管理Hibernate的配置信息并根据配置信息启动Hibernate。

    • SessionFactory接口

      • SessionFactory实例对应一个数据存储源。

      • SessionFactory的特点:

      • 线程安全:一个SessionFactory被多个线程所共享。

      • 重量级的:SessionFactory会缓存SQL语句,映射数据等,所以一个应用程序,如果只访问一个数据库,只需建立一个SessionFactory对象即可。

      • //创建SessionFactory对象
        //hibernate3.0版本所使用的方法
        //SessionFactory factory = cfg.buildSessionFactory();
        
        //hibernate4.0以上的版本才使用的方法
        ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
        SessionFactory factory = cfg.buildSessionFactory(sr);
        
    • Transaction 接口

      Transaction接口是Hibernate中的事务接口。在Hibernate进行持久化操作时,必须进行事务控制。

    • Query和Criteria接口

      • Query和Criteria接口都是Hibernate中的查询接口。

      • Query接口:包装了一个HQL(Hibernate Query Language)查询语句。

      • Criteria接口:擅长执行动态查询。

  2. get 和 load 重点

    方法 说 明
    Object get(Class clazz, Serializable id) 若数据不存在,返回NULL对象
    Object load(Class theClass, Serializable id) 若数据不存在,系统就会抛出异常
  • get和load都是用来根据id来获取单条记录。

  • 区别:

    • get是立即加载,load是延迟加载。
    • get返回实体对象,load返回代理对象。
    • get返回实体对象如果没有该记录,会返回null。load如果没有该记录,会抛出异常。
    • get返回只能使用一级缓存,load可以使用一级和二级缓存。
    • 都是通过id获取对象,如果load只获取id则不执行查询语句。
  • 由于load方式使用时,采用延迟加载机制,性能更高,所以一般情况下推荐使用load方式。

  1. Hibernate中Java对象的三种状态

      1. 瞬时状态(Transient):不曾进行过持久化,未与 session关联,不使用后会被垃圾回收。
      2. 持久状态(Persistent):当前仅与一个session关联。处于持久状态的对象在session关闭时,会将数据同步到数据库。
      3. 游离状态(Detached):也称脱管状态,已经进行过持久化,但当前未与session对象关联。
  2. Spring + SpringMVC + Hibernate 整合

      1. applicationContent.xml 配置

        xml
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60

        <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">


        <context:component-scan base-package="com.znsd.service" />
        <context:component-scan base-package="com.znsd.dao" />
        <context:component-scan base-package="com.znsd.controller">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        context:component-scan>

        <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/studentm"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        bean>


        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

        <property name="dataSource" ref="dataSource"/>

        <property name="hibernateProperties">
        <props>

        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>

        <prop key="hibernate.show_sql">trueprop>
        <prop key="hibernate.format_sql">trueprop>
        <prop key="hibernate.hbm2ddl.auto">updateprop>
        props>
        property>

        <property name="packagesToScan" value="com.znsd.info"/>

        bean>


        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
        bean>
        <tx:annotation-driven transaction-manager="transactionManager" />

        <context:annotation-config/>
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
        bean>
        beans>
2. springMVC.xml  配置

   
xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

<mvc:annotation-driven/>

<context:component-scan base-package="com.znsd.controller"/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"/>
bean>


<mvc:resources mapping="/statics/**" location="/js/"/>
beans>
3. web.xml 配置
xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

<display-name>Archetype Created Web Applicationdisplay-name>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:applicationContext.xmlparam-value>
context-param>


<servlet>
<servlet-name>dispatcherServletservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springMVC.xmlparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>dispatcherServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>



<filter>
<filter-name>SetCharacterEncodingfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>SetCharacterEncodingfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
web-app>
4. UserDaoImp.java 代码
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Repository
public class UserDaoImp implements UserDao {

@Autowired
private SessionFactory sessionFactory;

/**
* 获取Session
*/
private Session currentSession(){
return this.sessionFactory.openSession();
}

/**
* 获取所有的学生信息
* @return
*/
@Override
public List getAllstu() {
List stuList = new ArrayList();
stuList = currentSession().createQuery("from StudentInfo").list();
return stuList;
}
}

有想法的小伙伴可以进入我的Github查看源码

** 在哪里跌倒,就在哪里趴下,休息一会儿你会发现新大陆的哦~ **

Author: ClodSleep666
Link: https://bugger.top/2020/04/27/1010711/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment