Hibernate

Hibernate的概述

是一个标准ORM框架
操作对象就相当于操作表结构
通过映射文件吧对象与表关联到一起

对jdbc的一个封装

优点:简化了jdbc的繁琐代码
对面向对象特性的良好支持

缺点:不支持动态sql,灵活性较低
不适合大规模的数据处理

Hibernate 开发环境搭建

1.导入jar包 lib下required包下的所有jar包,还有log4j.jar及数据库连接

project-etc下找约束

配置映射文件User.hbm.xml
a.列名子标签形式存在
b.列名可以不写,默认和实体类名字段一样
c.type可以不写,默认和实体字段属性一致

主键生成策略:native(根据本地数据支持主键生成方式)
uuid(根据uuid算法生成一个32位16进制的字符串,推荐使用,使用此算法,主键必须为字符串)

<?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>
    <class name="com.hemi.bean.User" table="tb_user">
    <id name="id" column="id">
    <generator class="native"></generator></id>
    <property name="name" column="name"></property>
    <property name="age" column="age"></property>
    </class>    
    </hibernate-mapping>

主配置文件hibernate.cfg.xml

<?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>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///bank</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>

        <!-- 配置方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        
        <!-- 选配 -->
        <!-- 自动生成表 -->
        <property name="hbm2ddl.auto">update</property>
        <!--显示hibernate执行的sql语句  -->
        <property name="show_sql">true</property>
        <!-- 格式化sql输出 -->
        <property name="format_sql">true</property>
        
        <!-- 引入映射文件 -->
        <mapping resource="com/hemi/bean/User.hbm.xml" />
    
    </session-factory>


</hibernate-configuration>

测试类

Configuration con=new Configuration();
     con.configure();//加载配置文件
     SessionFactory factory = con.buildSessionFactory();//得到 SessionFactory对象
     System.out.println(factory);

crud操作

a.得到工厂对象
b.打开session
c.开启事物
d.crud操作
e.提交事务
f.关闭资源

2.png

快照机制
从数据库查询出的额数据会在缓存和快照区各一个 当调用flush或者close方法刷新缓存,来和快照区数据比对,有更新就推入数据库

对象的三种状态

a.瞬时态 (1)new出来的,不和 Session 实例关联(2) 在数据库中没有和瞬时对象关联的记录

b.持久态 瞬时对象转为持久对象:
(1) 通过 Session 的 save() 和 saveOrUpdate() 方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。
(2) 使用get(),load() 待方法查询到的数据对象,将成为持久化对象。
持久化对象的特点:
(1) 和 Session 实例关联
(2) 在数据库中有和持久对象关联的记录

c.游离态:数据库有记录,但是脱离了session,缓存中没有

  1. 本质上和瞬时对象相同
    (2) 只是比瞬时对象多了一个数据库记录标识值 id.
    持久对象转为游离对象:
    当执行 close() 或 clear(),evict() 之后,持久对象会变为游离对象。
    瞬时对象转为持久对象:
    通过 Session 的 update(),saveOrUpdate() 和 lock() 等方法,把游离对象变为持久对象。

要先查后改

修改方法:

1.update
2.saveOrUpdate
当没设置存入数据的主键时执行save
设置了就执行update,主键在数据库找不到时,就会报状态异常
3.merge
当没有主键时,执行插入,当有主键时,先查询,判断是否存在,存在就修改,不存在就执行插入
瞬时态的数据被merge操作后变成游离态,返回的数据为持久态

查询方法

         Session session = HibernateUtil.getsession();
        Transaction transaction = session.beginTransaction();
        User user = new User();
        user.setAge(208);
        user.setName("ewjj");
    User user2 = session.get(User.class, 5);
    //一发送就执行sql语句
    User load = session.load(User.class, 1);
    //使用结果时,才执行sql语句,推荐
     session.saveOrUpdate(user);
        transaction.commit();
        session.close();
        Configuration con = new Configuration();
       con.configure();// 加载配置文件
       SessionFactory factory = con.buildSessionFactory();// 得到
                                                           // SessionFactory对象
       System.out.println(factory);
       Session session = factory.openSession();
       Transaction transaction = session.beginTransaction();
       User user = new User();
       try {
           user.setAge(20);
           user.setName("ew");
           session.save(user);
           transaction.commit();
       } catch (Exception e) {
           if (transaction != null) {
               transaction.rollback();
           }
       } finally {
           session.close();
       }


工具类

       private HibernateUtil() {
   }
   static SessionFactory factory;
   static {
       Configuration con = new Configuration();
       factory = con.configure().buildSessionFactory();
   }
   public static Session getsession(){
   return factory.openSession();
   }
   ```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 1.主键生成策略 1.1 主键的两种类型 自然主键:把数据表中的某一业务字段作为表的主键。如一张用户表中,把用户的...
    Wizey阅读 532评论 0 3
  • web service 相关 什么是Web Service? 答:从表面上看,Web Service就是一个应用程...
    niuben阅读 890评论 0 3
  • 本文包括:1、Hibernate的持久化类2、Hibernate 持久化对象的三个状态(难点)3、Hibernat...
    廖少少阅读 1,429评论 0 13
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,948评论 0 27
  • 这篇文章送给差劲的你和我。 前些天,英语老师向全班问到“What's your dream”其实老师是想锻炼我们用...
    Zeson周彬昱阅读 251评论 1 4