分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

hibernate学习二 ?基本用法

发布时间:2023-09-06 01:46责任编辑:白小东关键词:暂无标签

一  映射文件User.hbm.xml

定义了持久化类实例是如何存储和加载的,这个文件定义了持久化类和表的映射。

根据映射文件,Hibernate可以生成足够的信息以产生所有的SQL语句,也就是类的实例进行插入,更新,删除和查询所需要的SQL语句。

二  配置文件hibernate.cfg.xml(另外一种格式是hibernate.properities)

Hibernate配置文件:配置数据库连接以及Hibernate运行时所需要的各个属性的值。两种格式的文件是等价的,同时存在的的话xml的会覆盖properties的。

xml相比properties的优势:XML格式的文件更易于修改,配置能力更强;当改变底层应用配置时不需要改变和重新编译代码,由hibernate自动加载,而properties就没有这个优势。

常见配置属性:

   (1) Hibernate JDBC属性

        访问DB,要获得JDBC连接,所以需要有JDBC连接属性:    JDBC驱动, URL, 用户名, 密码, 连接池个数(pool_size)

         (2) hibernate.dialect属性

         不同SQL数据库的SQL语言有一定的差异,为了让hibernate对不同的DB产生合适的SQL,需要指定方言。Hibernate会根据JDBC返回的metadata得到正确的方言。

    (3) hibernate.show_sql

         SQL语句输出到控制台,方便调试。

    (4) 映射文件列表

          包含xxx.hbm.xml文件

三: HibernateUtil.java

要启动hibernate需要创建一个SessionFactory对象。SessionFactory是一个线程安全的对象,只能被实例化一次,可以被多个线程共享。使用SessionFactory可以获得Session的一个或多个实例。package cn.jbit.auction.dao;import org.hibernate.Session;import org.hibernate.SessionFactory;

Session是持久化操作的基础,为持久化对象提供CURD操作。

Hibernate在处理session的时候使用延迟加载机制,在真正访问DB的时,才从连接池中获取数据库连接。

Session不是线程安全的,所以这里使用了Thread Local模式。

import org.hibernate.cfg.Configuration;public class HibernateUtil { ???// 初始化一个ThreadLocal对象 ???private static final ThreadLocal sessionTL = new ThreadLocal(); // Session每个线程有一个session的副本,线程之间不影响。

???// configuration 和 SessionFactory都是静态的,只能实例化一次 ???private static Configuration configuration; ???private final static SessionFactory sessionFactory; ???static { ???????try { ???????????configuration = new Configuration().configure(); ???????????sessionFactory = configuration.buildSessionFactory(); ???????} catch (Throwable ex) { ???????????throw new ExceptionInInitializerError(ex); ???????} ???} ???public static Session currentSession() { ???????//sessionTL的get()方法根据当前线程返回其对应的线程内部变量, ???????//也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。 ???????//ThreadLocal保证了每个线程都有自己的Session。 ???????Session session = (Session) sessionTL.get(); ????????// 如果session为null,则打开一个新的session
???????// 如下的标为红色的代码不需要加锁,不需要双重判断,因为session本身是线程局部变量了,不存在多线程的问题。
???????if (session == null) { ???????????????//创建一个数据库连接对象session。 ???????????session = sessionFactory.openSession(); ????????????// 保存该数据库连接session到ThreadLocal中。 ???????????sessionTL.set(session); ????????} ???????//如果当前线程已经访问过数据库了, ???????//则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。 ???????return session; ????} ???/** ????* 关闭Session ????*/ ???public static void closeSession(){ ???????Session session = (Session) sessionTL.get(); ????????sessionTL.set(null); ???????session.close(); ???}}

四 编写Dao(Data Access Object)接口

Dao模式是标准的J2EE模式:

  (1) 一个Dao接口

  (2) 一个实现Dao接口的具体类

  (3) 一个Dao工厂类

  (4) 数据传递对象,主要是POJO

Dao接口定义了所有的CURD操作。Dao实现类实现了接口中定义的方法。

UserDAOImple.java的的一部分代码如下:

public void  save(User user){ ??????Session session = HibernateUtil.getSession(); ??????Transaction ??tx = session.beginTransaction(); ??????try { ??????????session.save(user); ??????????tx.commit(); ?????} catch(Exception e) { ??????????tx.rollback; ??????} ?????finally { ???????????HibernatenateUtil.closeSession(); ??????}}

hibernate学习二 ?基本用法

原文地址:https://www.cnblogs.com/liufei1983/p/8595311.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved