【SSH】SSH框架(四)——Hibernate

一、前言

      在上一篇博客中向大家介绍了《【SSH】SSH框架(三)——Spring》,Spring解决企业应用开发的复杂性,使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。接下来向大家介绍的是Hibernate。

二、Hibernate是什么?

      在学习Hibernate之前呢,小编曾经在.Net中接触过“EF框架”,它是一种ORM(Object Relational Mapping)映射工具,能够建立面向对象的域模型和关系数据库之间的映射。在学习了Hibernate之后,发现他们两个非常的相似,下面小编一点一点的告诉您,什么是Hibernate~

      用比较通俗点来解释,Hibernate核心就是:

Java应用和数据库之间的桥梁。它能够进行Java对象和关系数据之间的映射。

      除了这些,Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。可以看出Hibernate起了中间件的作用,可以为任何一个需要访问关系数据库的Java应用服务。中间件有透明性,作为Hibernate的使用者,无须关系它是如何实现的,只需要知道如何访问它的接口就行了。


Hibernate

                                                    图一 Hibernate的中间件特性

三、Hibernate优点

  • 开源的,允许开发人员在需要的时候研究源代码,改写源代码,定制客户化功能
  • 具有详细的参考文档
  • 对JDBC仅做了轻量级的封装,如果有必要,用户可以绕过Hibernate,直接访问JDBC API。
  • 具有可拓展性。
  • 使用方便,容易上手。
  • 适用于独立的Java程序,也适用于Java Web应用,而且还可以在J2EE架构中取代CMP(Container-managered Presistence ,由容器管理持久化),完成对象持久化的重任,Hibernate能集成到会话EJB和集成BMP(由实体EJB本身管理持久化)的实体EJB中。

四、Hibernate怎么使用?

      在Java应用中使用Hibernate包含以下几个步骤:

      (1)创建Hibernate的配置文件

      (2)创建持久化类

      (3)创建对象-关系映射文件

      (4)通过Hibernate API编写访问数据库的代码

      下面小编通过一个简单的例子,向大家依次介绍如何使用Hibernate:

【jar包】

      小编的项目是在MyEclipse中的,所以需要导入Hibernate的jar包。jar包中包含了我们Hibernate需要的一些信息。在导入关于Hibernate的jar包后,为了连接数据库,我们需要导入数据库的驱动jar包,小编使用的是MySQL,所以导入MySQL 的jar包。

  • hibernate-distribution-3.6.10.Final\hibernate3.jar
  • hibernate-distribution-3.6.10.Final\lib\required*.jar
  • hibernate-distribution-3.6.10.Final\lib\jpa*.jar
  • mysql-connector-java-5.0.4-bin.jar

【配置文件】

      Hibernate从其配置文件中读取和数据库连接有关的信息,下面是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <!-- 配置连接池: -->
    <!-- 引入外部属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 配置C3P0连接池: -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>


    <!-- Hibernate的相关信息 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- 注入连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置Hibernate的其他的属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <!-- 配置Hibernate的映射文件 -->
        <property name="mappingResources">
            <list>
                <value>cn/itcast/shop/user/vo/User.hbm.xml</value>
                <value>cn/itcast/shop/category/vo/Category.hbm.xml</value>
                <value>cn/itcast/shop/product/vo/Product.hbm.xml</value>
                <value>cn/itcast/shop/categorysecond/vo/CategorySecond.hbm.xml</value>
            </list>
        </property>
    </bean>

【UI层】

//登录-Ares-2016年9月26日11:37:44
    public String login(){

        User existUser = userService.login(user);
        //判断
        if(existUser== null){
            //登录失败
            this.addActionMessage("登录失败:用户名或密码错误或用户未激活!");
            return LOGIN;
        }else{
            //登录成功
            //将用户信息存人Session中
            ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
            //页面跳转
            return "loginSuccess";
        }
    }

【持久层】

//登录-Ares-2016年9月26日11:37:44
    public User login(User user) {

        return userDao.login(user);
    }

【数据层】

//登录-Ares-2016年9月26日11:37:44
    public User login(User user) {
        String hql ="from User where username = ? and password =? and state =?";
        List<User> list = this.getHibernateTemplate().find(hql,user.getUsername() ,user.getPassword(),1);
        if(list!=null && list.size()>0){
            return list.get(0);
        }
        return null;
    }

五、小结

      这次学习Hibernate算是对Java有了一个新的理解,其中的一些不足也是由了了解,算是对其中的一些的知识有是更加扎实的了解,不过还是要多多的跟项目,多多的学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值