首页 > 代码库 > Hibernate知识点总结

Hibernate知识点总结

一、    Hibernate
    1    Hibernate    简化JDBC    (ORM)
        使用Hibernate的步骤
        1    将第三方包加入到项目当中
        2    编写核心配置文件    hibernate.cfg.xml
            <?xml version=‘1.0‘ encoding=‘UTF-8‘?>
            <!DOCTYPE hibernate-configuration PUBLIC
                  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
            <!-- Generated by MyEclipse Hibernate Tools.                   -->
            <hibernate-configuration>

                <session-factory>
                
                <!-- 配置方言 -->
                <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
                <!-- 配置连接地址 -->
                <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
                <!-- 配置用户名 -->
                <property name="connection.username">mart</property>
                <!-- 配置密码 -->
                <property name="connection.password">java</property>
                <!-- 配置驱动 -->
                <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

                <!-- 配置自动创建表 
                     create        表示每次运行程序的时候,都自动创建表
                     update        表示对表的更新(没有表的时候,创建表,如果存在的时候,对原来表进行更新)
                                如果出现配置update第一次执行表无法创建的情况。先配置为create,第一次运行之后,再配置成update
                -->
                <property name="hbm2ddl.auto">update</property>
                <!-- 配置显示sql语句 -->
                <property name="show_sql">true</property>


                </session-factory>

            </hibernate-configuration>
        3    编写实体类
            public class User implements Serializable{
        
                private Integer id;    //ID  Hibernate要求每个实体都必须有一个主键
                private String uname;
                private String gender;
                private Integer age;
                ....    省略get/set方法
            }
        4    编写实体类对应的映射文件    User.hbm.xml
            <?xml version="1.0"?>
            <!DOCTYPE hibernate-mapping PUBLIC
                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
            <hibernate-mapping>

                <!-- 配置需要映射哪个类 
                     通过name属性指定需要映射的类    
                    通过table属性指定映射到数据库当中的表的名字(可以不写/默认和类的名字相同)
                    -->
                <class name="com.zhaolong.bean.User" table="HUQB_USER">
                    <!-- 配置主键 
                         通过name属性指定通过哪个属性配置主键
                    -->
                    <id name="id">
                        <!-- 通过generator指定主键的生成策略 -->
                        <generator class="sequence">
                            <!-- 通过param指定序列的名字 -->
                            <param name="sequence">SEQ_HUQB_USER</param>
                        </generator>
                    </id>
                    
                    <!-- 配置其他属性 
                         通过name属性指定需要映射的属性
                         通过column属性指定映射到数据库当中的列名(可以不写/默认和属性的名字相同)
                         
                         可以在property标签当中通过其子标签 column配置列的详细信息
                         
                    -->
                    <property name="uname" column="HUQB_UNAME"/>
                    <property name="gender"/>
                    <property name="age">
                        <column name="HUQB_AGE" not-null="true"></column>
                    </property>
                    
                </class>
            </hibernate-mapping>
        5    将实体类的映射文件,添加到核心配置文件当中
            <?xml version=‘1.0‘ encoding=‘UTF-8‘?>
            <!DOCTYPE hibernate-configuration PUBLIC
                  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
            <!-- Generated by MyEclipse Hibernate Tools.                   -->
            <hibernate-configuration>

                <session-factory>
                ...省略基础配置信息

                 <!-- 在核心配置文件当中加载实体的映射文件 -->
                 <mapping resource="com/zhaolong/bean/User.hbm.xml"/>
                </session-factory>

            </hibernate-configuration>
        6    使用Hibernate实现增删改查
            //加载配置文件
            Configuration cfg=new Configuration();
            cfg.configure();
            //创建SessionFactory
            SessionFactory fatory = cfg.buildSessionFactory();
            //获取session
            Session session = fatory.openSession();
            //打开事物
            Transaction tx = session.beginTransaction();
            //执行增删改查操作
            User u=new User();
            u.setUname("张三");
            u.setGender("男");
            u.setAge(22);
            session.save(u);
            //提交事务
            tx.commit();
            //关闭session
            session.close();
        
    2    Hibernate    表与表之间关系映射
        1对多
            1    java类当中要有一个Set属性
            2    映射文件通过Set标签进行配置
        多对1
            1    java类当中要有一个关联需要的属性
            2    映射文件当中通过<many-to-one>标签进行配置

        1对1
            1    java类当中要有一个关联需要的属性
            2    映射文件当中通过<one-to-one>标签进行配置
                映射文件当中通过<many-to-one    unique=true> 指定唯一 
        多对多
            1    java类当中要有一个Set属性
            2    映射文件通过Set标签进行配置
            注意:多对多映射会生成第三张映射表

            
    3    Hibernate查询
        1    HQL    基于对象的查询语言
            将sql当中的表名修改成对象名    将sql当中列名修改成属性名
        2    Criteria    面向对象的查询
            Restrictions    添加限制条件
            Projections    聚合查询
            Projections.projectionList()    添加多个统计结果
        3    DetachedCriteria    离线查询
    4    Hibernate缓存
        1    一级缓存    session
        2    二级缓存    SessionFactory    (需要配置)
        3    查询缓存

    5    其他信息
        inverse
        cascade
        lazy

 

Hibernate知识点总结