Hibernate学习随笔

一、Hibernate的基本使用
    首先需要配置相应的配置文件
    Hibernate基本使用步骤
        1.创建 org.hibernate.cfg.Configuration对象
         2.调用configure方法将配置文件放入其中
         3.调用buildSessionFactory()方法创建SessionFactory对象(该方法需要加载配置文件、创建表等等,及其耗费资源,所以一般一个项目只需要一个就足够,可以利用工具类和静态代码块使该项目中共用一个SessionFactory对象)
        4.利用SessionFactory创建session对象,creatSession()创建一个Session对象  getCurrentSession()从当前线程中获得Session对象
        5.开启事物,  Session.beginTransaction()
        6.业务处理
        7.提交处理
   Hibernate几个数据库操作对象操作对象
        1.利用Session直接操作对象
        save();
        get();直接获得对应的数据
        load();延迟获得对应的数据
        update();
        delete();等等
            关于Hibernate的延迟机制,可以在对应的class中配置 lazy属性 
Hibernate学习随笔_第1张图片

二、Hibernate的检索
         1.对象导航检索
        Hibernate学习随笔_第2张图片
      2. OID检索
          
                 默认情况下load方式会延迟加载,可也在配置文件中修改延迟方式
3.HQL检索
  Hibernate学习随笔_第3张图片
 
         通过session.creatQuery(String sql)来创建Query对象进行检索
                普通查询,条件查询,投影查询,分组查询,排序等与普通SQL语句类似,select * 时 要省略 ,否则会报错
                分页查询使用Query.setFirstResult(int startIndex);Query.setMaxResults(int pageSize);
         参数设置:
                Hibernate学习随笔_第4张图片
4.QBC检索
       特点:没有SQL语句,全都是方法进行检索
         Hibernate学习随笔_第5张图片
            利用criteria.add(Restructions)来添加条件
                               例如:
                                  Criteria  criteria  =  currentSession .createCriteria(Customer. class );
            criteria.add(Restrictions.or(Restrictions.eq("address""深圳"), Restrictions.eq("telephone""120")));
            条件语句:
            Hibernate学习随笔_第6张图片
                分页查询与Query语句类似;
            排序查询:
  
                
                     
查询count(*) criteria.setProjection(Projections.rowCount());
5.本地SQL检索
        Session.creatSQLQuery(String sql)来创建一个本地SQL对象
        然后设置实际参数进行相应的方法进行查询或者更新等语句

6.Query多表查询
         Hibernate学习随笔_第7张图片
                 迫切内连接: select distinct c from Customer c inner join fetch c.linkmanSet        
             迫切左外连接: select distinct c from Customer c left outer join fetch c.linkmanSet
Hibernate学习随笔_第8张图片
Hibernate学习随笔_第9张图片

ssh中hibernate模板的普通sql使用
SessionFactory sessionFactory = this.getSessionFactory();
        Session session = sessionFactory.getCurrentSession();
        String sql = "select l.l_name,count(*) as count from tb_customer as c ,tb_level as l where c.l_id = l.l_id group by l.l_id";
        SQLQuery query = session.createSQLQuery(sql);
        query.setResultTransformer(Transformers.aliasToBean(HashMap.class));
        Listlist = query.list()

核心配置文件(默认设置文件名为hibernate.cfg.xml,放置在src目录下,如果不是需要加载配置时候设置)
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.Driverproperty>
        <property name="hibernate.connection.url">jdbc:mysql:///test_frameproperty>
        <property name="hibernate.connection.username">rootproperty>
        <property name="hibernate.connection.password">rootproperty>
        
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty>
        
        
        <property name="hibernate.hbm2ddl.auto">updateproperty>
        
        <property name="hibernate.show_sql">trueproperty>
        <property name="hibernate.format_sql">trueproperty>
        
         <property name="hibernate.connection.isolation">4property>
         
        <property name="hibernate.current_session_context_class">threadproperty>
        <mapping resource="cn/zz/hibernate/domain/Customer.hbm.xml"/>
        <mapping resource="cn/zz/hibernate/domain/Linkman.hbm.xml"/>
    session-factory>
hibernate-configuration>

映射配置文件(建议放置在对应实体类包下,名字为实体类名.hbm.xml)
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>
    <class name="cn.zz.hibernate.domain.Customer" table="customer">
        
        <id name="cid" column="cid">
            <generator class="uuid">generator>
        id>
        <property name="cname">property>
        <property name="address">property>
        <property name="level">property>
        <property name="source">property>
        <property name="telephone">property>
        
        <set name="linkmanSet" cascade="save-update,delete" inverse="true">
            
            <key column="cid">key>
            <one-to-many class="cn.zz.hibernate.domain.Linkman" />
        set>
    <many-to-one name="customer" class="cn.zz.hibernate.domain.Customer" column="cid" >
 
<set name="roleSet" table="user_role" cascade="save-update" inverse="false">
            <key column="uid" foreign-key="uid_fk">key>
            <many-to-many class="cn.zz.hibernate.domain.Role" column="rid">many-to-many>
        set>
    class>
hibernate-mapping>

hibernat配置联合主键
<composite-id>
                <key-many-to-one name="customer" class="cn.zz.crm.domain.Customer" column="c_id">key-many-to-one>
                <key-many-to-one name="user" class="cn.zz.crm.domain.User" column="u_id">key-many-to-one>
            composite-id>
Hibernate学习随笔_第10张图片
Hibernate学习随笔_第11张图片
Hibernate学习随笔_第12张图片
 

你可能感兴趣的:(SSH学习随笔)