Hibernate

Hibernate介绍

Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 
在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。 


Hibernate的优点

1)Hibernate功能强大,是java应用与关系数据库之间的桥梁,较之JDBC方式操作数据库,代码量大大减少,提高了持久化代码的开发速度,降低了维护成本。

2)Hibernate支持许多面向对象的特性,如组合、继承、多态等,使得开发人员不必在面向业务领域的对象模型和面型数据库的关系数据模型之间来回切换,方便开发人员进行领域驱动的面向对象的设计和开发。

3)可移植性好。系统不会绑定在某个特定的关系型数据库上,对于系统更换数据库,通常只需要修改Hibernate配置文件即可正常运行。

4)Hibernate框架开源免费,可以在需要时研究源代码,改写源代码,进行功能的定制,具有可扩展性。

Hibernate的缺点

1)不适合以数据为中心大量使用存储过程的应用。
2)大规模的批量插入,修改和删除不适合用Hibernate。

Hibernate体系架构


Hibernate的环境搭建

1.下载jar文件
2.部署jar文件
3.创建配置文件  hibernate.cfg.xml
4.创建持久化类和映射文件




创建配置文件hibernat.cfg.xml

此文件主要用于配置数据库连接和Hibernate运行时所需要的各种特性。

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- mysql连接数据库 -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>		
		 <property name="connection.url">jdbc:mysql://localhost:3306/news<![CDATA[?useUnicode=true&characterEncoding=utf8]]></property>
                <!-- <property name="connection.url">jdbc:mysql://localhost:3306/news?useUnicode=true&characterEncoding=utf8</property> -->
		<property name="connection.username">root</property>
		<property name="connection.password">11</property>

		<!-- JDBC connection pool (use the built-in) -->
		<!-- <property name="connection.pool_size">1</property> -->

		<!-- SQL dialect每个数据库都有其对应的方言以匹配其平台特性 -->
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

		<!-- 指定当前session范围和上下文 -->
		<!-- <property name="current_session_context_class">thread</property> -->

		<!-- Disable the second-level cache -->
		<!-- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> -->

		<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
		<property name="show_sql">true</property>
		<property name="format_sql">true</property> <!-- 是否格式化SQL-->
		<!-- Drop and re-create the database schema on startup -->
		<!-- <property name="hbm2ddl.auto">update</property> -->
		<mapping resource="cn/happy/entity/NewsDetail.hbm.xml" />
	</session-factory>
</hibernate-configuration>


Oracle连接数据的代码

        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">happy</property>
        <property name="connection.password">happy</property>
        <property name="dialect">org.hibernate.dialect.Oracle8iDialect</property>


持久化类:Student

public class Student{

    private Integer sid;
    private String sname;
    private String pwd;
    省略get和set..
}

映射文件:student.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 package="cn.hibernate01.entity">
    <class name="Student" table="student">
        <id name="sid" type="int" column="sid">
            <generator class="native"/>
        </id>
        <property name="sname" type="string" column="sname"/>
        <property name="pwd" type="string" column="pwd"/>
    </class>
</hibernate-mapping>


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

编程步骤

  1. 获取Configuration对象
  2. 获取SessionFactory对象
  3. 获取Session,打开事务
  4. 用面向对象的方式操作数据库
  5. 关闭事务,关闭Session

由于是Hibernate入门,所以我不会搞得很复杂,就只是简单的向数据库中的student表中插入一条记录,然后再取出来而已。

这里我用的是orcal数据库!!!所以主键自动生成用的是序列(sequence), 如果是mysql就用identity

测试类:

保存数据

 @Test
    public void test01() {
        Student student=new Student();
        student.setSname("xxx22");
        student.setPwd("123");
        Configuration conf=new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sf=conf.buildSessionFactory();
        Session session = sf.getCurrentSession();
        Transaction tx=session.beginTransaction();
        session.save(student);
        tx.commit();
    }



结果显示:



查询数据

  @Test
    public void test03() {
        Configuration conf=new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sf=conf.buildSessionFactory();
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        Student student = session.get(Student.class, 1);
        System.out.println(student.getSname());
    }
结果显示:



Configuration 加载配置文件  property 、加载hbm映射配置

SessionFactory线程安全,保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。在SessionFactory中内置了连接池。其有两个常用方法:

openSession()  --从连接池中随机获取一个连接

getCurrentSession()  --SessionThreadLocal绑定,确保在一次请求中,

只有一个Session对象。


getCurrentSession()openSession()的区别?

* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会

* 采用getCurrentSession()创建的sessioncommitrollback时会自动关闭,而采用openSession()创建的session必须手动关闭

使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

* 如果使用的是本地事务(jdbc事务)

<property name="hibernate.current_session_context_class">thread</property>

* 如果使用的是全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值