实例学习Hibernate

Hibernate -annotation 学习笔记 1 马士兵 第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 建立Annotation版本的HellWorld 9 第8课 什么是O/RMapping 11 一、     定义:. 11 二、     Hibernate的创始人:. 11 三 阅读详情
 
实例学习 Hibernate
学习方式,采用做一个小型的留言本,因为要很好的使用Hibernate,在做系统之前,就必须把整个系统要做什么、要做些什么内容、怎么做等处理好,这样才能够在使用的过程中,较少的回去更改配置文件和程序。
1、 整个系统要做什么?
做一个系统留言系统,方便用户留言
2、要做些什么内容?
1)、实现简单的留言功能
2)、可以查看留言
3)、可以删除留言
4)、可以更改留言
5)、可以回复留言
3、怎么做?
       语言是JSP+Hibernate
4、数据表设计
       1)数据库选择:MySQL5.X
       2)数据表设计:
      
      
LeaveMSG(留言表)
字段名
类型
说明
Id
自增型
ID主键
author
Text(50)
留言者
ldate
Text(50)
留言日期
msg
memo
留言内容
 
ReplyMSG(留言回复表)
字段名
类型
说明
Id
自增型
ID主键
lid
LeaveMSG ID
留言表的ID
rauthor
Text(50)
回复人
rdate
Text(50)
回复日期
rmsg
memo
回复内容
       3)建表SQL语句:
       a.建立数据库:Create database msg;
       b.更改数据库:Use msg;
c.建立表LeaveMSG:Create table LeaveMSG(id int AUTO_INCREMENT primary key not null,author varchar(50),ldate varchar(20),msg text);
d.建立表ReplyMSG:Create table ReplyMSG(id int AUTO_INCREMENT primary key not null,lid int not null,rauthor varchar(50),rdate varchar(20),rmsg text);
e.建立外键关系:alter table replymsg add foreign key (lid) references leavemsg(id)       
5、生成“.hbm.xml”配置文件:
       使用Hiddlegen-Hibernate-r5生成配置文件,详细步骤可以参看文章:
       ( 注:最好是用middlegen2.1 ,我现在用的是这个,功能更强大,可以生成好多种的配置文件)
       成功配置运行好,会出现如下界面:
      
       这时可以到build/gen-src看刚刚生成的Leavemsg.hbm.xml和Replymsg.hbm.xml了。
      
6、启动JDeveloper,并建立工程,将Hibernate的包导入到类路径、并MYSQL的JDBC驱动程序导入类路径。 (操作实例的时候出问题了)
注:因为做双表关联的映射出错,但是如果只做单表,不做双表关联,就不会出错,这里我还是把只做一个表操作的详细写下来,也算是宽慰宽慰自己吧:
1)、工程文件图如下:
文件结构图如下:
2)我这里用的是Mysql数据库,需要用的文件内容如下:
 
hibernate.cfg.xml 的内容如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE 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.url">jdbc:mysql://localhost/msg</property>
        <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">admin</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <!-- thread is the short name for
          org.hibernate.context.ThreadLocalSessionContext
          and let Hibernate bind the session automatically to the thread
        -->
        <property name="current_session_context_class">thread</property>
        <mapping resource="msg/hibernate/Leavemsg.hbm.xml" />
    </session-factory>
</hibernate-configuration>
 
Leavemsg.java 的内容如下:
package msg.hibernate;
import java.io.Serializable;
public class Leavemsg implements Serializable {
    public Leavemsg() {
    }
    int id;
    String author;
    String ldate;
String msg;
…//下面都是一些get及set方法,用Eclipse和Jdeveloper都可以自动生成
}
这个很简单,就是一个实实在在的POJO JAVA BEAN,这个只要你定义了变量名,Eclipse和JDeveloper都可以自动为你生成get及set 方法。
 
Leavemsg.hbm.xml 的内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
   
<hibernate-mapping>
<!--
    Created by the Middlegen Hibernate plugin 2.1
 
    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->
 
<class
    name="msg.hibernate.Leavemsg"
    table="leavemsg"
> 
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        table="leavemsg"
    </meta>
 
    <id
        name="id"
        type="java.lang.Integer"
        column="id"
    >
        <meta attribute="field-description">
           @hibernate.id
            generator-class="assigned"
            type="java.lang.Integer"
            column="id"
 
        </meta>
        <generator class="assigned" />
    </id>
 
    <property
        name="author"
        type="java.lang.String"
        column="author"
        length="50"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="author"
            length="50"
        </meta>   
    </property>
    <property
        name="ldate"
        type="java.lang.String"
        column="ldate"
        length="20"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="ldate"
            length="20"
        </meta>   
    </property>
    <property
        name="msg"
        type="java.lang.String"
        column="msg"
        length="65535"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="msg"
            length="65535"
        </meta>   
</property>
    <!-- Associations -->
 
    <!-- bi-directional one-to-many association to Replymsg -->
    <set
        name="replymsgs"
        lazy="true"
        inverse="true"
              cascade="none"
    >
        <meta attribute="field-description">
           @hibernate.set
            lazy="true"
            inverse="true"
            cascade="none"
 
           @hibernate.collection-key
            column="lid"
 
           @hibernate.collection-one-to-many
            class="msg.hibernate.Replymsg"
        </meta>
        <key>
            <column name="lid" />
        </key>
        <one-to-many
            class="msg.hibernate.Replymsg"
        />
    </set>
</class>
</hibernate-mapping>
因为做这里只做单表测试,所以,我把绿色部分去掉了,即去掉和replymsg 之间的映射,因为现在做映射还会出错。
 
显然, 为了能对实体对象进行ORM, 我们需要的到一个Session 对象, Session 从哪里
来呢? 由SessionFactory 创建, SessionFactory 呢? 除了直接使用Hibernate 自带的之外,
MyEclipse 可以生成如下的包装代码:
HSFactory.java:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
public class HSFactory {
    static ThreadLocal threadLocal = new ThreadLocal();
    static Configuration configuration = new Configuration();
    static SessionFactory sessionFactory;
    static String configFile = "/hibernate.cfg.xml";
    //返回本地线程的Session实例。对SessionFactory采用lazy初始化
 
    public static Session getCurrentSession() {
        Session session = (Session)threadLocal.get();
        if (session == null || !session.isOpen()) {
            if (sessionFactory == null)
                rebuildSessionFactory();
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }
        return session;
    }
    //关闭本地线程的Session实例
    public static void closeCurrentSession() {
        Session session = (Session)threadLocal.get();
        session.close();
    }
   
    //重新构建SessionFactory对象
    public static void rebuildSessionFactory() {
        configuration.configure(configFile);
        sessionFactory = configuration.buildSessionFactory();
    }
}
 
下面这段代码一并演示了单表的CRUD, 包括全查和全删 :
MsgDAO.java:
import java.util.List;
import msg.hibernate.Leavemsg;
import org.hibernate.*;
public class MsgDAO {
    private Session session;
 
    public Session getSession() {
        return HSFactory.getCurrentSession();
    }
 
    public void setSession(Session session) {
        this.session = session;
    }
 
    public void save(Leavemsg obj) {
        getSession().save(obj);
    }
 
    public void delete(Leavemsg obj) {
        getSession().delete(obj);
    }
 
    public void update(Leavemsg obj) {
        getSession().update(obj);
    }
 
    public Leavemsg findByPK(Integer id) {
        return (Leavemsg)getSession().get(Leavemsg.class, id);
    }
 
    public List findAll() {
        Query query = getSession().createQuery("from Leavemsg");
        return query.list();
    }
 
    public int deleteAll() {
        Query query = getSession().createQuery("delete from Leavemsg");
        return query.executeUpdate();
    }
}
 
测试类,直接运行该类就可以:
Test.java:
import msg.hibernate.Leavemsg;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Test {
    public static void main(String[] args) {
        Session session = HSFactory.getCurrentSession();
        Leavemsg msg = new Leavemsg();
        msg.setAuthor("FLB");
        msg.setLdate("2007-09-12");
        msg.setMsg("A first hibernate!");
        MsgDAO dao = new MsgDAO();
        dao.setSession(session);
        Transaction tx = null;
        try {
            //开始事务
            tx = session.beginTransaction();
            dao.save(msg);
            //提交事务
            tx.commit();
        } catch (Exception e) {
            //回滚事务
            if (tx != null)
                tx.rollback();
        } finally {
            HSFactory.closeCurrentSession();
        }
    }
}
 
 
IOPaint模型部署教程 IOPaint是一款功能全面且强大的AI图像处理工具,它不仅免费开源,还由SOTA(State-of-the-Art,即最先进)AI模型驱动,为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍: 阅读详情

相关推荐

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 278

test和je指令的组合用法

0x00 指令介绍 test 指令用于两个操作数的按位AND运算,并根据结果设置标志寄存器,结果本身不会写回到目的操作数。 要点: 1. AND 运算结果为0时, ZF(zero flag)置位; 2. test可以影响CF,OF,PF,SF,ZF标志位; 3. 两个操作数相等,同时为0时,AND 结果为0, 此时ZF置位。 je 指令【Jump if Equals】在ZF被置位时跳转。...

counsellor的专栏 2万+

Hibernate学习

hibernate

迷路剑客个人博客 801

生成式引擎优化(GEO):启动GEO优化的5个有效策略

随着生成式AI的普及,传统SEO正被GEO(生成式引擎优化)取代。本文提出GEO五大核心策略:用户意图解析、结构化内容设计、语义关键词优化、对话式内容创作和权威信源建设。研究表明,优化后的内容在AI答案中的引用率提升300%,点击率增长27%。文章还介绍了BERT模型、Schema标记等关键技术工具,并指出未来GEO将向多模态优化、实时数据更新方向发展。企业需避免简单堆砌关键词,应建立长期内容策略,通过结构化、权威性内容在AI时代保持竞争优势。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2785

CarPlay无线连接背后的‘握手’秘密:深入解读iAP2协议与蓝牙/Wi-Fi协同

本文深入解析了CarPlay无线连接背后的技术细节,重点探讨了iAP2协议与蓝牙/Wi-Fi的协同工作原理。从蓝牙层的UUID识别到iAP2协议的握手过程,再到Wi-Fi热点的建立与优化,详细揭示了CarPlay无线连接的安全机制和调试方法,为开发者提供了实用的技术参考。

weixin_42520573的博客 475

Hibernate3 学习(十一)

14.从映像文件生成数据表在您撰写好*.hbm.xml映射文件之后,您可以使用org.hibernate.tool.hbm2ddl.SchemaExport来自动建立数据库表格,假设您的User.hbm.xml如下:User.hbm.xml     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"     "http:/

1052

LPDDR4 JEDEC标准测试实例解析--写操作

LPDDR4的JEDEC标准一致性测试项详解以及实例分享,满满干货!感兴趣的小伙伴可以持续关注!!

一只豌豆象的博客 7774

使用Middlegen简化Hibernate开发

使用Hibernate的一个不便之处就是要维护数据库schema,hbm文件和java文件的一致性,而Middlegen可以帮助你完成这些。Middlegen是一个基于Xdoclet的代码,配置文件自动生成工具。它支持目前流行的大部分的技术,例如EJB,JDO,Hibernate,Torque,JSP/Struts等。Middlegen主要根据你已有的数据库Schema根据你的要求来自动的生成你所

Think &amp; Tech 1224

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2674

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码)

AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋)

淘淘小窝 1万+

Hibernate学习笔记(一)——简单的Hibernate实例入门

一、Hibernate简介 Hibernate是一个开源的对象/关系映射(ORM)框架,它对JDBC进行了轻量级的封装。所谓ORM就是Object/Relationship Mapping,为什么要使用对象/关系映射呢?因为使用面向对象思想编写的数据库应用程序都是要把信息存储到关系型数据库中的,使用Hibernate就可以使用面向对象的方法来操作和使用数据库了。 二、Hibernate简单实例

记录只为更好地前行 5467

Coffin-Manson模型的详细讲解

Coffin-Manson模型是一个简单而强大的工具,用于预测低循环疲劳寿命,尤其在半导体功率循环中评估热机械可靠性。其核心是通过应变(或温度变化)与循环次数的对数关系,实现加速测试和寿命外推。尽管有局限性,通过改进版本(如加入激活能),它在电子封装、焊点疲劳和器件设计中仍广泛应用。实际使用时,建议结合实验数据拟合参数,并验证模型预测。如果需要特定材料的参数值、代码实现或进一步计算示例,请提供更多细节!

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 2144

Hibernate学习实例

一 Hibernate简介   Hibernate是一种Java语言下的对象关系映射(ORM)解决方案。为面向对象的领域模型到传统的关系型数据库的映射提供了一个使用方便的框架。 二 Hibernate设计目标   1.将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。   2.Hibernate不仅负...

weixin_30593261的博客 126

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hibernate 实例学习笔记

                               学习Hibernate的一些体会              学习Hibernate有一段时间了,但是一些心生余悸的担心还是会留在脑海中,生怕有一天,她又开始耍脾气,不好好工作了。也不知道为什么,开源的东西,有利就有弊.那些版本问题经常困扰着我.         一开始,接触Hibernate,总要从网上找些例子来熟悉一下基本的应用方法和

bohemia的专栏 1393

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

这篇博客是hibernate学习的第一篇,主要简单介绍hibernate框架,之后简单说一下hibernate的目录结构,最后写一个简单的hibernate实例。通过这三步来简单的认识一下hibernate。 废话不多说,步入正题。首先简单介绍一下hibernate框架,它是一种基于JDBC的主流持久化框架,是一个优秀的orm实现;它对JDBC进行了轻量级的封装,大大简化了数据访问层繁杂的重复代码

Q 3万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Hibernate学习之使用实例

Hibernate使用实例

strongyoung的专栏 650

学习JPA——Hibernate Annotation使用实例

  目前,JPA(Java Persistence API)的使用范围越来越广,作为Java EE 5.0平台标准的ORM规范,得到了诸如:Hibernate、TopLink、OpenJpa等ORM框架的支持,同时还是EJB 3.0的重要组成部分。JPA的宗旨是为POJO提供持久化标准规范。它能够脱离容器独立运行,方便开发和测试。本文将通过一个小实例来说明如...

闲云野鹤 88

Follow Me:深入浅出学习Hibernate二:Hibernate第一实例

首先来说我个人感觉这篇博客写的没有丝毫的技术可言,只是代码占据了我博文相当长的篇幅,这样是空间的极大浪费,我个人感觉假如我是一个读者的话我也不会去认真的看这些代码去,但是还是会有一种人会看这些代码,那就是真心想通过我的博客学习Hibernate的人。为了我亲爱的读者们,我做一次无聊的事情,那就是详细解析代码构造和Hibernate运行机制。  Hibernate的第一个实例来了解Hibernat

用心构筑文章 2091

【HIbernate学习】HIbernate实例的三种状态(三)

Session 的主要功能是为映射实体类的实例提供创建,读取和删除操作。这些实例可能在给定时间点时存在于以下三种状态之一: 瞬时状态: 一种新的持久性实例,被 Hibernate 认为是瞬时的,它不与 Session 相关联,在数据库中没有与之关联的记录且无标识符值。临时状态对象是通过实例化的方式注入到内存中,也就是通过New的方式来开辟内存。临时对象是孤立在内存上的,它不与数据库中的数据有任何...

wz1989love的专栏 272

hibernate学习之二——部署(简单实例)

对象关系映射(Object Relational Mapping,简称 ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 一,ORM概念 简单的说, ORM 是通过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化到关系数据库中。 二,实例 hibernate的部署: 1、导入hibernate的jar包 2、创建Hib

AC_coding 665

学习Hibernate Annotation使用实例

目前,JPA(Java Persistence API)的使用范围越来越广,作为Java EE 5.0平台标准的ORM规范,得到了诸如:Hibernate、TopLink、OpenJpa等ORM框架的支持,同时还是EJB 3.0的重要组成部分。JPA的宗旨是为POJO提供持久化标准规范。它能够脱离容器独立运行,方便开发和测试。本文将通过一个小实例来说明如何在Hibernate中使用JPA,来达到简

China盼盼 787
上一篇: JAVA操作属性文件,可进行读、写、更改
下一篇: 一键清理系统垃圾
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值