zoukankan      html  css  js  c++  java
  • Hibernate知识点小结(一)--快速入门

    一、Hibernate的简介
        1、Hibernate是一个开放源代码的对象关系映射框架
        2、对象关系映射:ORM  Object Relation Mapping
            对象与数据表的映射
            对象的属性与数据表的字段的映射
            
            Customer实体            cust_customer表
              cust_name                    cust_name
              cust_phone                cust_phone
             
            只要操作实体---->ORM框架----->实体的属性映射到表的字段位置

    二、Hibernate的快速入门
        开发步骤:
            1、导入hibernate的jar包
                hibernate-release-5.0.7.Finallib equired*.jar
                日志相关的jar
                数据库驱动
            2、创建实体和表
       
                表结构:
                      cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
                      `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
                      `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
                      `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
                      `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
                      `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
                      `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话'
                      
                实体结构:
                        private Long cust_id;
                        private String cust_name;
                        private String cust_source;
                        private String cust_industry;
                        private String cust_level;
                        private String cust_phone;
                        private String cust_mobile;
                
            3、配置实体与表的关系
                创建xml文件 该文件的命名约定 实体名.hbm.xml
                
                约束:/org/hibernate/hibernate-mapping-3.0.dtd
                
                <hibernate-mapping>
                    <!-- 配置实体与表的关系 -->
                    <class name="com.itheima.domain.Customer" table="cst_customer">
                        <!-- 配置实体的属性和表的字段的关系 -->
                        <id name="cust_id" column="cust_id">
                            <generator class="native"></generator>
                        </id>
                        <property name="cust_name" column="cust_name"></property>
                        <property name="cust_source" column="cust_source"></property>
                        <property name="cust_industry" column="cust_industry"></property>
                        <property name="cust_level" column="cust_level"></property>
                        <property name="cust_phone" column="cust_phone"></property>
                        <property name="cust_mobile" column="cust_mobile"></property>
                    </class>
                </hibernate-mapping>
               
            4、配置数据源的信息
                配置hibernate的核心文件  
                在src下创建 hibernate.cfg.xml文件
                
                约束:/org/hibernate/hibernate-configuration-3.0.dtd
                配置的name查看hibernate.properties  位置:hibernate-release-5.0.7.Finalprojectetchiebernate.properties
                
                
                <hibernate-configuration>
                    <session-factory>
                        <!-- 数据源信息 -->
                        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                        <property name="hibernate.connection.url">jdbc:mysql:///ssh324</property>
                        <property name="hibernate.connection.username">root</property>
                        <property name="hibernate.connection.password">root</property>
                    </session-factory>
                </hibernate-configuration>
            
            
            5、测试:操作实体
                Configuration configuration = new Configuration().configure();
                SessionFactory sessionFactory = configuration.buildSessionFactory();
                Session session = sessionFactory.openSession();
                Transaction transaction = session.beginTransaction();
                
                //实体操作
                Customer customer = new Customer();
                customer.setCust_name("百度");
                session.save(customer);
                
                transaction.commit();
                session.close();
                sessionFactory.close();


    三、Hibernate的配置
        1、映射文件  mapping文件
            <?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>
                <!-- 配置实体与表的关系
                        name: 要映射的实体的全限定名
                        table: 要映射的表的名称
                -->
                <class name="com.itheima.domain.Customer" table="cst_customer">
                    <!-- 配置实体的属性和表的字段的关系
                            在hibenrate中id具备特殊地位  修改、删除等默认都是根据id执行的
                            id标签
                                name:实体中的id的属性名称
                                column:表中的id的字段名称
                                
                            主语:不管是id还是普通属性  当实体的属性名称 与 表的字段名称 一致时 此时column可以省略
                    -->
                    <id name="cust_id">
                        <!-- 主键生成策略 -->
                        <generator class="native"></generator>
                    </id>
                    
                    <!-- 配置普通属性
                            name:实体中的属性名称
                            column:表中的字段名称
                     -->
                    <property name="xxx"></property>
                    <property name="cust_name"></property>
                    <property name="cust_source"></property>
                    <property name="cust_industry" column="cust_industry"></property>
                    <property name="cust_level" column="cust_level"></property>
                    <property name="cust_phone" column="cust_phone"></property>
                    <property name="cust_mobile" column="cust_mobile"></property>
                </class>
            </hibernate-mapping>
        
        2、核心配置文件
            <?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工厂:造session对象
                    session对象:会话对象 hibernate与数据库的连接对象
                    
                    session工厂内部需要配置三部分内容
                        1、数据源信息
                        2、hibernate其他配置参数
                        3、加载映射关系    
                 -->
                <session-factory>
                    <!-- 1、数据源信息 -->
                    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                    <property name="hibernate.connection.url">jdbc:mysql:///ssh324</property>
                    <property name="hibernate.connection.username">root</property>
                    <property name="hibernate.connection.password">root</property>
                    
                    <!-- 2、hibernate的其他配置参数 -->
                    <!-- 2.1  配置数据库方言 -->
                    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
                    <!-- 2.2 控制台是否打印sql语句 -->
                    <property name="hibernate.show_sql">true</property>
                    <!-- 2.3 格式化sql语句 -->
                    <property name="hibernate.format_sql">true</property>
                    <!-- 2.4 ddl策略
                            PS:
                                ddl:数据定义语言:定义数据表和数据库
                                dml:数据操作语言:对数据的增删改操作
                                dql:数据查询语言:对数据的查询操作
                                dcl:数据控制语言:对数据库的权限 用户等操作
                            取值:
                                create-drop: 创建删除  用于测试
                                create:创建   用于测试
                                validate: 检测  必须存在表且映射关系与表的结构一致    可以用于生产环境
                                update: 更新  档映射关系与数据表结构只要不一致 自动更新表结构       可以用于生产环境(使用最多)
                    -->
                    <property name="hibernate.hbm2ddl.auto">update</property>
                    <!-- 2.5 指定第三方的数据源 c3p0
                            导入hibernate-release-5.0.7.Finalliboptionalc3p0*.jar
                    -->
                    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
                    <!-- 2.6 配置session与当前线程绑定:了解
                            注意:后期集成spring之后 与线程绑定这件事情不需要我们操作  spring自动操作
                     -->
                    <property name="hibernate.current_session_context_class">thread</property>
                    
                    <!-- 3、加载映射 -->
                    <mapping resource="com/itheima/domain/Customer.hbm.xml"/>
                    
                </session-factory>
            </hibernate-configuration>
        

    四、Hibernate的相应API
        1、session获取相关API
            //创建配置对象
            //Configuration configuration = new Configuration();
            //加载类加载路径下(src)hibernate.cfg.xml文件
            //configuration.configure();
            //等同于
            Configuration configuration = new Configuration().configure();
            
            //通过配置对象 去构建session工厂(session工厂的创建下需要使用到hibernate的核心配置文件)
            //sessionFactory是一个重量级对象(对象创建与销毁很消耗资源) 线程安全的
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            //会话对象,hibernate与数据库的连接会话,session是一个轻量级对象   线程不完全
            Session session = sessionFactory.openSession(); //通过工厂获得一个信息的session
            //Session session = sessionFactory.getCurrentSession(); //从当前线程上获得session
            
            //开启事务
            Transaction transaction = session.beginTransaction();
            
            //实体操作
            Customer customer = new Customer();
            customer.setCust_name("5555");
            session.save(customer);
            
            //事务回滚
            //transaction.rollback();
            //事务提交
            transaction.commit();
            
            //释放资源
            session.close();
            sessionFactory.close(); //从线程上获得session 那么不需要手动关闭

  • 相关阅读:
    软件需求阅读笔记02
    软件需求阅读笔记01
    搜狗输入法
    冲刺周之后感想
    典型用户分析和场景
    四则运算
    学习总结
    2019年春阅读笔记5——对开源的认知
    2019年春阅读笔记4——分布式消息系统的现状、挑战与未来
    2019年春阅读笔记3——数据库集群方案
  • 原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9447993.html
Copyright © 2011-2022 走看看