zoukankan      html  css  js  c++  java
  • hibernate Day1


    1 Web内容回顾
    (1) JavaEE三层架构
    web层(struts2框架)
    service层(spring框架)
    dao层(hibernate框架):负责对数据库进行CRUD操作
    (2) MVC模式(这是不Java独有的,是所有开发语言共有的)
    Model--模块
    View--视图
    Controller--控制器
    2 Hibernate概述
    (1) 什么是框架
    框架( Framework )是整个或部分系统的可重用设计,表现为一组抽象 构件 及构件实例间交互的方法 ;
    另一种定义认为,框架是可被应用开发者定制的应用骨架。
    前者是从应用方面而后者是从目的方面给出的定义。
    通俗理解:写我们自己的程序,使用框架后,它会帮助我们实现一部分的功能,使用框架的好处,少写一部分代码实现
    功能。
    (2) 什么是Hibernate(重点)
    > Hibernate:冬眠,我们可以理解为持久化
    > Hibernate框架应用在JavaEE三层结构中的dao层
    > 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是
    jdbc,hibernate对jdbc进行了封装
    > 使用hibernate的最大好处是不需要写复杂jdbc代码,不需要写sql语句
    > hibernate是开源的轻量级的框架(不依赖于其他的框架,jar也很小)
    > hibernate版本:
    hibernate 3.x
    hibernate 4.x:这是一个过渡版本,没有人使用
    hibernate 5.x:我们要使用的版本
    (3) 什么是ORM
    > Hibernate使用orm思想对数据库进行crud操作
    > 学习过JavaBean,更加正确的叫法 实体类
    > ORM( Object Relational Mapping ): 对象关系映射 , 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数
    据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的 --“ 虚拟对象数据库 ” 。
    ORM 说明:
    > 让实体类和数据库表进行一一对应关系
    让实体类首先和数据库的表对应
    让实体类中的属性与表中的字段相对应
    > 不需要直接操作数据库表,而操作表对应的实体类对象
    3 Hibernate入门
    (1) 开发环境搭建
    创建项目,MyEclispse中引入Hibernate框架
    注意,hibernate框架上并不包含jdbc连接jar包,这个要自己导入
    第二步 创建实体类 Person .java
    package com.huza.domain;
    public class Person {
    /*hibernate要求实体类有一个唯一标识对象的属性,这个类中使用uid*/
    private int uid;
    private String uname;
    private String pword;
    private String addr;
    public int getUid() {
    return uid;
    }
    public void setUid(int uid) {
    this.uid = uid;
    }
    public String getUname() {
    return uname;
    }
    public void setUname(String uname) {
    this.uname = uname;
    }
    public String getPword() {
    return pword;
    }
    public void setPword(String pword) {
    this.pword = pword;
    }
    public String getAddr() {
    return addr;
    }
    public void setAddr(String addr) {
    this.addr = addr;
    }
    }
    创建实体类后,我们要创建该实体类对应的表,所以我们先创建一个数据库,再创建表,
    其实我们在使用hibernate时,不需要自己手动创建表,hibernate可以帮助我们到数据库中去创建表的
    第三步 配置实体类和数据库表的一一对应关系(映射关系)
    >> 创建一个xml格式的配置文件
    -- 映射配置文件名称和位置淌有固定要求
    --建议:在实体类所在包里面创建,实体类名称.hbm.xml
    >>在xml文件中引用相应的dtd约束
    映射配置文件
    第四步 创建hibernate的核心配置文件
    >> 核心配置文件格式是xml,但是核心配置文件的名称和位置是固定的
    -- 位置 : 必须在src目录下
    -- 名称:必须是hibernate.cfg.xml
    >> 创建 hibernate.cfg.xml 核心配置文件,并引入dtd约束
    >> hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
    --配置数据库信息(hibernate.properties文件中定义了配置的标准)
    连接mysql数据库的配置详情
    --配置hibernate信息
    -- 把映射文件放到核心配置文件中
    文件全部内容:hibernetate.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://127.0.0.1:3306/hibernate_day01</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123456</property>
    <!-- 配置数据库方言,就是针对不同的数据库有不同sql标准 -->
    <property name="hibernate.dialect">hibernate.dialect</property>
    <!-- 配置hibernate信息 可选 -->
    <!-- 输出底层sql语句 -->
    <property name="show_sql">true</property>
    <!-- 输出底层sql语句 并格式化显示,方便开发人员查看 -->
    <property name="format_sql">true</property>
    <!-- hibernate帮助我们创建表,他不会自动创建,而是我们进行配置
    create:如果没有该表则创建该表,注意每次都会重新创建(删除后再重新创建),因为每启动都会重新加载该文件
    update:如果没有该表则创建该表,如果已经存在该表,则会看瞧一瞧表结构有没有变化,如果有变化则会创建新的表,如果没有保
    留原来的表,且会保留其中的记录
    create-drop:在显 式关闭sessionFactory时,则会删除对应的表,慎用。注意是显式关闭的是SessionFactory,不是Session噢
    validate:每次加载时,都验证表与对象是否一致
    使用注意:这几个配置只做一次,配置好后,生成数据库后,就取消这个配置
    -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- 把映射文件加载过来 -->
    <mapping resource="com/huza/domain/person.hbm.xml" />
    </session-factory>
    </hibernate-configuration>
    (2) 添加功能实现(创建一个测试类)
    第一步 加载hibernate核心配置文件
    第二步 创建SessionFactory对象
    第三步 使用SessionFactory创建session对象
    第四步 开启事务
    第五步 写具体逻辑crud操作
    第六步 提交事务
    第七步 关闭资源
    效果:
    > 是否在数据库中生成表
    > 看表中是否有记录
    package com.huza.test;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    import com.huza.domain.Person;
    public class HibernateDemoTest {
    @Test
    public void addPerson () {
    // 第一步 加载hibernate核心配置文件
    // 获取hibernate配置对象
    Configuration cfg = new Configuration();
    // 通过配置对象加载hibernate默认配置
    cfg.configure();
    // 第二步 创建SessionFactory对象
    // 读取核心配置文件hibernate.cfg.xml,创建sessionFactory
    // 在这个过程中,会根据映射关系,在数据库中把相应的表生成
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    // 第三步 使用SessionFactory创建session对象
    // 类似于jdbc连接,只是这个地方hibernate做了封装
    Session session=sessionFactory.openSession();
    // 第四步 开启事务
    Transaction tx=session.beginTransaction();
    // 第五步 写具体逻辑crud操作
    Person person=new Person();
    person.setUname("王小小");
    person.setPword("wangxiaoxiao");
    person.setAddr("中国上海");
    // 调用session对象的实现方法,完成添加
    session.save(person);
    // 第六步 提交事务
    tx.commit();
    // 第七步 关闭资源
    session.close();
    sessionFactory.close();
    }
    }
    4 Hibernate配置文件详解
    (1) 映射配置文件
    >映射配置文件名称和位置没法有固定要求
    >映射配置文件中的name属性值写实体类相关内容
    -- class 标签name属性值实体类全路径
    -- id标签和property标签name属性值 实体类的属性名称(注意要完全一样)
    -- id标签和property标签中的column属性是可以省略的,如果不写则,生成的字段名与属性名一样,建议写
    出,这样比较清析。
    -- property标签中 还有一个属性type属性,用于设定字段的类型,我们可以不用使用,这时hibernate会自动
    生成相应的类型
    (2) 核心配置文件
    > 配置写位置要求
    > 配置的三部分要求
    -- 数据库配置部分是必须的
    -- hibernate部分可选的
    -- 映射文件必须的
    > 核心配置文件名称和位置是固定的
    -- 位置src
    -- 名称hibernate.cfg.xml
    5 Hibernate的核心API
    (1) Configuration
    org.hibernate.cfg.Configuration;// 所在包
    Configuration cfg = new Configuration();
    cfg.configure();
    作用:到src目录下找到名称为hibernate.cfg.xml 配置文件,创建对象,把配置文件放到对象里(加载核心配置
    文件)
    当然我们如果不把配置文件放到指定src目录下,我们可以通过cfg的configure(path);重载来完成也可以加
    载(基本不用)。
    (2) SessionFactory (重点对象)
    > 使用Configuration对象创建SessionFactory对象
    -- 创建SessionFactory对象过程中做的事情
    根据核心配置文件中的数据库配置信息,同时还有类与表的映射,到数据库里创建相应的表,但要根据
    <property name="hibernate.hbm2ddl.auto">update</property>
    > 因为我们在创建SessionFactory过程中,这个过程特别耗资源(因为要创建表)
    -- 在hibernate操作中,建议一个项目一般创建一个SessionFactory对象(单例模式)
    HibernateUtils.java
    package com.huza.utils;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    /**
    * HibernateUtils工具类
    * @author Huza
    *
    */
    public class HibernateUtils {
    private static SessionFactory sessionFactory = null;
    private HibernateUtils() {
    }
    public static SessionFactory getSessionFactory() {
    if (sessionFactory == null) {
    Configuration cfg = new Configuration();
    cfg.configure();
    sessionFactory = cfg.buildSessionFactory();
    }
    return sessionFactory;
    }
    }
    (3) Session(重点对象)
    > session可以理解为jdbc中的连接connection
    > 调用session里面不同的方法实现crud操作
    -- 添加 save 方法
    -- 修改 update 方法
    -- 删除 delete 方法
    -- 根据id查询 get 方法
    > 一个项目中我们一般只有一个SessionFactory,是单例的,Session对象是单线程对象
    -- Session对象不能共用,只能自己使用
    (4) Transaction
    > 事务对象
    > 事务概念
    -- 事务四个特性
    原子性、一致性、隔离性、持久性

  • 相关阅读:
    Python基本语法_输入/输出语句详解
    集成骨骼动画Spine的几点经验
    标量 ,数组,hash 引用
    阿里RDS中插入emoji 表情插入失败的解决方案
    Target runtime Apache Tomcat v7.0 is not defined.
    销售行业ERP数据统计分析都有哪些维度?
    mysql 基于时间点恢复
    perl 闭包
    房地产企业营销分析系统建设中的关键性指标是什么?
    Python基本语法_运算符详解
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/7417987.html
Copyright © 2011-2022 走看看