Hibernate配置


l     Hibernate是为了操作模型的不匹配(阻抗不匹配)

       Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;数据库是关系模型,其主要概念有:表、主键、外键等。

解决方法是

1.      使用JDBC手工转换。这种的映射解决是很复杂的。

2.      使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB。这样会很容易的解决模型不匹配的问题

Hibernate的安装配置

l        下载地址http://www.hibernate.org,本教程使用3.2.5。

l      将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:

       antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar

l      配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。

       可以在配置文件指定:

       数据库的URL、用户名、密码、JDBC驱动类、方言等。(这是必须配置的,其他的可选)

       启动时Hibernate会在CLASSPATH里找这个配置文件。

l      映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。

l      快速开始小例子

可以在例题中拷过来在上面的基础上修改这样会容易一些。、

开发流程:

1、由Domain object -> mapping->db。(官方推荐)

      

2、由DB开始,用工具生成mapping和Domain object。(使用较多)

 

3、由映射文件开始。

在写java类的时候也是有一些限制的

Domain Object限制

       1、默认的构造方法(必须的)。

       2、有无意义的标示符id(主键)(可选)

       3、非final的,对懒加载有影响(可选)

       DomainJava Object(User)

       public class User {

              private int id;

              private String name;

              private Date birthDay;

              //gettersetter…

}

配置文件

1、hbm.xml

<?xml version="1.0"?>

<hibernate-mapping package=“cn.itcast.domain">

<class name="User"table="user">

       <idname="id">

              <generatorclass="native"/>

       </id>

       <propertyname="name"/>

       <propertyname="birthday”/>

</class>

</hibernate-mapping>

1、初始化代码(只做一次)

        Configuration cfg = newConfiguration();

        cfg.configure(“config.cfg.xml”);//如果你的名字不一样就要声明告诉它。

        也可以通过cfg.setProperty设置属性。

        SessionFactory sessionFactory =cfg.buildSessionFactory()

       2、模板代码(以后写代码可以参考)

Session session = null;Transaction tx =null;

try{

       session= sessionFactory.openSession();

       tx= session.beginTransaction();

       //…你的代码save,delete,update,get…

       tx.commit();//提交事务

}catch(Exception e){

       if(tx!=null)tx.rollback();throw e;抛出异常一定要抛出去

}finally{

       if(session!= null)session.close();//关闭Session(必须关闭,session是不能重复利用的)

}

Session的几个主要方法

       1、save,persist保存数据,persist在事务外不会产生insert语句。

       2、delete,删除对象

       3、update,更新对象,如果数据库中没有记录,会出现异常。

       4、get,根据ID查,会立刻访问数据库。

       5、Load,根据ID查,(返回的是代理,不会立即访问数据库)。

       6、saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。

       7、lock(把对象变成持久对象,但不会同步对象的状态)。

对象的状态:

l      瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

l       持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

l      脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,hibernate不能检测到。

对象的状态活动图:

HQL和Criteria

HQL(Hibernate Query Language)是基于对象的查找完全是根据对象查找的

       面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:

       Queryq = session.createQuery(hql);

l      from Person

l      from User user whereuser.name=:name

l      from User user whereuser.name=:name and user.birthday < :birthday

 

Criteria (条件查询)

       Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:

       Criteriacrit = session.createCriteria(DomainClass.class);

       简单属性条件如:criteria.add(Restrictions.eq(propertyName,value)),

       criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值