学习笔记之Hibernate

Hibernate

1、是什么?

①. Hibernate是一个ORM(Obeject relation mapping)框架,它对JDBC进行了轻量级的封装,位于项目的持久层。

②. Hibernate使用ORM技术将对关系数据库中的表的操作转化成对JAVA对象的操作。

2、为什么?

①. 使程序员专心业务层,而不必考虑用了什么数据库,让数据库管理员负责数据库的管理

②. 分层更清晰,耦合度减小

③. 通用性强,试程序更换数据库变的更容易

④. 对象化,程序员写业务层的时候,操作的都是Java对象,这样更直观、方便

⑤. 性能保证,hibernate可以针对不同的数据库,使用最优的sql语句

⑥. 鲁棒性,hibernate使程序更健壮。

3、怎么用?

Ø  学会hibernate API

Ø  Hibernate核心配置文件hibernate.cfg.xml

Ø  对象关系映射文件XXX.hbm.xml

 i.     写POJO(Plain ordinary java object简单java对象),相对于EJB来说的。

①. 有一无参的构造函数

②. 有一个主键和若干其它属性

③. 每个属性都有get和set方法

④. 属性一般都是private

 ii.    对应每个POJO编写相对应对象关系映射文件。文件名:POJO名.hbm.xml


示例代码:L1

iii.    编写hibernate.cfg.xml文件,该文件配置了连接数据库的一些参数。

示例代码:L2

iv.    使用hibernate

n  SessionFactory接口的方法openSession()和getCurrentSession()有什么区别?

 

①.  openSession()每次获取新的Session实例

②.  getCurrentSession()是获得当前线程下绑定的Session,不会新建Session实例

③.  通过getCurrentSession()获得的session,在事务提交或回滚时会自动关闭session。

④.  使用getCurrentSession()获得的session,要在hibernate.cfg.xml中加一个配置项,将session与线程绑定:<property name="current_session_context_class">thread</property>

⑤.  使用getCurrentSession()获得的session,必须启用事务。

 

n  Session接口的方法有哪些?

 

①.  sava():保存一个对象,即添加一条记录

②.  delete():删除一个对象

③.  get()、load():查询一个对象

u  它们有什么区别?

1)  如果查询不到,get()返回null,而load()返回异常ObjectNotFoundException

2)  get()会立即向数据库发出SQL查询,而load方法会延迟查询(在用的时候才向数据库发出SQL查询),通过修改配置文件XXX.hbm.xml可以取消延迟加载(设置class的属性lazy=’false’)。

3)  如果确定数据库中有某对象,那用load(),相反用get()

④.  update():修改一个对象

⑤.  createQuery(“hql语句”):创建一个Query对象

⑥.  createCriteria(类.class):创建一个Criteria对象

n  Query接口的方法有哪些?

①.  List():以list的形式返回查询结果

n  Criteria接口的方法有哪些?

n  Hibernate3和hibernate4有什么区别?

①.  Hibernate3:

示例代码:L3

②.  Hibernate4:

示例代码:L4

4、开发hibernate项目的步骤(国内一般是这么做的)

①.  建立数据库

②.  引入hibernate的jar包

③.  编写hibernate.cfg.xml文件

④.  编写pojo类

⑤.  编写对象关系映射文件:[pojo名].hbm.xml

⑥.  测试

5、使用Myeclipse自动生成domain类和mapping文件

6、HQL(Hibernate query language)

一种面向对象的查询语言,操作的直接目标是对象,不是表,支持多态。

①.  查询

1)  查询所有字段

fromObject

2)  查询部分字段

selectname,sex from Object

②.  详细

a)     若查询单一的记录,则用uniqueResult()函数,若查询结果>=2,则用list()函数

b)     distinct去除重复记录

c)     如果有筛选条件,写在where字句里

d)     也可以使用in、not in关键字

e)     支持聚集函数avg(),sum(),min(),max(),count(*),count(….)

f)      支持group by…having分组查询

g)     支持order by排序

 


 

附件:

示例代码L1

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/HibernateMapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mappingpackage="com.cl.domain">

     <!--name指定POJO,table指定表-->

     <classname="Employee" table="employee">

         <idname="id" type="java.lang.Integer">

             <generatorclass="native"></generator>

         </id>

         <propertyname="name" type="java.lang.String">

             <columnname="name" length="64"></column>

         </property>

     </class>

</hibernate-mapping>

示例代码L2

<!DOCTYPEhibernate-configuration PUBLIC

      "-//Hibernate/Hibernate ConfigurationDTD 3.0//EN"

      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

      <session-factory>

            <propertyname="connection.driver_class"> </property>

             <propertyname="connection.url"> </property>

             <property name="connection.useUnicode"></property>

             <propertyname="connection.characterEncoding"> </property>

             <propertyname="connection.username"> </property>

             <propertyname="connection.password"> </property>

             <property name="dialect"></property>

             <property name="show_sql"></property>

             <propertyname="hbm2ddl.auto"> </property>

         <!--加载对象关系映射文件-->

            <mapping resource="pojo1.hbm.xml"/>

            <mapping resource="pojo2.hbm.xml"/>

       </session-factory>

</hibernate-configuration>

    示例代码L3

publicclass HibernateUtil {

    private static final SessionFactorysessionFactory;

    static {

        try {

            sessionFactory = newConfiguration().configure().

                 buildSessionFactory();

        } catch (Throwable ex) {

            System.err.println("InitialSessionFactory creation failed." + ex);

            throw newExceptionInInitializerError(ex);

        }

    }

 

    public static SessionFactorygetSessionFactory() {

         return sessionFactory;

     }

}

    示例代码L4

publicclass HibernateUtil {

 

    private static final SessionFactorysessionFactory = buildSessionFactory();

    private static SessionFactorybuildSessionFactory() {

        

        try {

          Configurationcfg = new Configuration().configure();

          StandardServiceRegistryBuildersrb = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties());

          StandardServiceRegistrysr = srb.build();

          returncfg.buildSessionFactory(sr);

        }

        catch (Throwable ex) {

            System.err.println("InitialSessionFactory creation failed." + ex);

            throw newExceptionInInitializerError(ex);

        }    

    }

    

    public static SessionFactorygetSessionFactory() {

        return sessionFactory;

    }

 

    public static Session getSession() {

        returngetSessionFactory().openSession();

    }

}

 

发布了36 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Cmainlove/article/details/41680775
今日推荐