zoukankan      html  css  js  c++  java
  • Hibernate-1

    hibernate框架是什么

    1、框架是用来提高开发效率的;2、封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动实现;3、所以框架可以理解成是一个半成品的项目,只要懂得如何驾驭这些功能即可。

    web层(jsp,structs2框架)——service层(JavaBean)——dao层(hibernate框架,帮我们完成数据库操作)。

    优点:操作数据库的时候,可以以面向对象的方式来完成,不需要书写SQL语句。

    hibernate是一款orm框架(对象关系映射)

    orm分4级:hibernate属于4级:完全面向对象操作数据库;mybatis属于2级;dbutils属于1级。

    hibernate框架的搭建

    1、导包(必须包和驱动包)

    2、创建数据库,准备表

    3、书写orm元数据(对象与表的映射配置文件)

    4、书写主配置文件(src下,文件名字为hibernate.cfg.xml)

    5、书写代码测试

    配置文件详解

    orm元数据:

    根元素:

    <!--配置表与实体对象的关系-->
    <!--package属性:填写一个报名。在元素内凡是需要书写完整类名的属性,可以直接写简单类名了-->
    <hibernate-mapping package="cn.itheima.domain">
    

    class元素:

    <!--
        class元素:配置实体与表的对应关系的
        name:完整类名
        table:数据库表名
    -->
    
    <class name="customer" table="cst_customer">

    id元素:

    <!--id元素:配置主键映射的属性
        name:填写主键对应属性名
        column(可选):填写表中主键列名。默认值:列名会默认使用属性名
        type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型。每个类型有三种填法:Java类型|hibernate类型|数据库类型
        not-null(可选):配置该属性(列)是否不能为空,默认值:false
        length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度
    -->
    
    <id name="cst_id">

    property元素:

    <!--
        property元素:除id之外的普通属性映射
        name:填写属性名
        column(可选):填写列名
        type(可选):填写列(属性)的类型,hibernate会自动检测实体的属性类型。每个类型有三种填法:Java类型|hibernate类型|数据库类型
        not-null(可选):配置该属性(列)是否不能为空,默认值是:false
        length(可选):配置数据库中列的长度,默认值:使用数据库类型的最大长度
    -->
    
    <property name="cust_name" column="cust_name">
    <!--<column name="cust_name" sql-type="varchar" ></column> -->
    </property>
    

    hibernnate主配置

    必选属性配置(5个):

      

    <!--数据库驱动-->
    <property name="hibername.connection.driver_class">com.mysql.jdbc.Driver</property>
    <!--数据库url-->
    <property name="hibernate.connection.url">jdbc:mysql://hibernate_32</property>
    <!--数据库连接用户名-->
    <property name="hibernate.connection.username">root</property>
    <!--数据库连接密码-->
    <property name="hibernate.connection.password">1234</property>
    <!--
        数据库方言
        不同的数据库中,sql语法略有区别。指定方言可以让hibernate框架在生成sql语句时,针对数据库的方言生成
        sql99标准:DDL 定义语言 库表的增删改查
                  DCL 控制语言 事务 权限
                  DML 操纵语言 增删改查
        注意:MYSQL在选择方言时,请选择最短的方言
    -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

     可选属性设置

    <!--
        #hibernate.show_sql true
        #hibernate.format_sql true
    -->
    <!--将hibernate生成的sql语句打印到控制台-->
    <property name="hibernate.show_sql">true</property>
    <!--将hibernate生成的语句格式化(语法缩进)-->
    <property name="hibernate.format_sql">true</property>
    <!--
    ## auto schema export 自动导出表结构,自动建表
    #hibernate.hbm2ddl.auto create 自动建表,每次框架运行都会创建新的表,以前的表将会被覆盖,表数据会丢失。(开发环境中测试使用)
    #hibernate.hbm2ddl.auto create-drop 自动建表,每次框架运行结束都会将所有表删除(开发环境中测试使用)
    #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表,如果已经存在不会再生成,如果表有变动自动更新表(不会删除任何数据)
    #hibernate.hbmddl2.auto validate 校验。不自动生成表,每次启动会校验数据库中表是否正确,校验失败 
    -->
    <property name="hibernate.hbmddl2.auto">validate</property>

    元数据引入入配置

    <!--
        引入orm元数据
        路径书写:填写src下的路径
    -->
    <mapping resource="cn/itheima/domain/Customer.hbm.xml">

    hibernateAPI详解

    configuration:创建——加载主配置——加载orm元数据(扩展)——创建sessionFactory

    //1 创建,调用空参构造
    Configuration conf = new Configuration();
    //2 读取指定主配置文件-->空参加载方法,加载src下的hibernate.cfg.xml文件
    conf.configure();
    //3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载
    //conf.addResource(resourceName)
    //conf.addClass(persistentClass)
    //4 根据配置信息,创建SessionFactory对象
    SessionFactory sf = conf.buildSessionFactory();

    SessionFactory

    //学习SessionFactory对象
    //SessionFactory功能:用于创建操作数据库核心对象session 对象的工厂,简单说功能就一个——创建session对象
    //注意:1.SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大
           2.SessionFactory属于线程安全的对象设计
    //结论:保证在web项目中只创建一个SessionFactory。
    //打开一个新的session对象
    sf.openSession();
    //获得一个与线程绑定的session对象
    sf.getCurrentSession();

    Session

    //学习session对象
    //session对象功能:表达hibernate框架与数据库之间的连接(会话)。session类似于JDBC年代的connection对象,还可以完成对数据库中数据的增删改查操作。session是hibernate操作数据库的核心对象
    
    获得事务
    //session获得操作事务的Transaction对象
    //获得操作事务的tx对象
    //Transaction tx = session.getTransaction();
    //开启事务并获得操作事务的tx对象
    //Transaction tx2 = session.beginTransaction();
    
    //增
    Customer c = new Customer();
    c.setCust_name("传智播客");
    session.save(c);
    
    //查
    Customer customer = session.get(Customer.class,1l);
    System.out.println(customer);
    
    //改
    Customer c = session.get(Customer.class,1l);
    c.setCust_name("黑马程序员");
    session.update(c);
    
    //删
    Customer c = session.get(Customer.class,1l);
    session.delete(c);

    Transaction

    封装了事务的操作
    打开事务
    //方式1
    Transaction tx = session.getTransaction();
    tx.begin();
    //方式2:推荐
    Transaction tx2 = session.beginTransaction();
    
    提交事务
    tx2.commit();
    
    回滚事务
    tx2.rollback();

    CRM练习:保存客户

    crm:customer relation manager 客户关系管理系统

    准备:

    1、创建web项目

    2、导包(hibernate包,数据库驱动包,标签库包,BeanUtil包)

    3、引入静态页面

    4、搭建hibernate框架

    5、思路分析

             AddCustomerServlet(获得表单提交的数据并封装到Customer对象中-调用servlet保存Customer对象-重定向到Customer列表)

            CustomerService:调用dao保存Customer

            CustomerDao:hibernate框架完成保存操作

    6、开发

    7、测试

  • 相关阅读:
    【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)
    【Luogu1879】玉米田(状态压缩,动态规划)
    【BZOJ1911】【APIO2010】特别行动队(斜率优化,动态规划)
    蒟蒻关于斜率优化DP简单的总结
    【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
    【BZOJ4196】【NOI2015】软件包管理器(树链剖分,线段树)
    【BZOJ1483】【HNOI2009】梦幻布丁(启发式合并,平衡树)
    【BZOJ1058】【ZJOI2007】报表统计(链表,堆,Splay)
    【BZOJ1012】【JSOI2008】最大数(线段树)
    【SHOI2012】魔法树(树链剖分,线段树)
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602204.html
Copyright © 2011-2022 走看看