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、测试

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602204.html
Copyright © 2011-2022 走看看