Hibernate的HelloWorld

说来说去,sql不是面向对象的语言,所以说作为面向对象的编程,稍微有点绕。传统的做法就是用JDBC连接数据库,然后再创建connetion,statement,然后再操作statement得到一系列的result。

还有一种更加有意思的处理方法,就是 ORM,Object-Relational Mapping。面向对象,简化编程,还可以跨越数据库平台。这一点很重要。

Hibernate就是其中一种( 还有一种最重要的JPA),这个框架提供了很多方便的方法,比如save,delete等等,完全面向对象,和操作java类似。只要你配置好了,直接这样操作就行,因为很多东西都是固定的配置。这样以后,你甚至不需要去写任何面向关系的sql语句,达到了屏蔽sql直接操作的效果。操作的时候直接使用封装好的方法就行,然后它就会自动地去找到和数据库操作的东西。

先配置环境,注意core和annotation版本的兼容。这个我看现在hibernate已经把各种东西合在一个包里面了,可以直接一起下载。

有一个简便的配置方法,就是,你如果每次都一个一个的jar包去添加,会很麻烦,一个很好的做法就是,使用preferences里面的user libraries,自己建一个library,把需要添加的东西都添加好,以后,如果你要多次使用,你就直接一次就添加好了。比如你取名叫做Hibernate,以后就不会混淆了,以后任何跟这个相关的包都直接添到这个里面就行。 (但是这个只是针对Eclipse)

除此之外,因为涉及到数据库的东西,所以必须将MySQL的driver的jar包添加进来。

要做事情之前要先创建数据库,创建table,然后你才能进一步操作。这里需要注意的一点是,数据库的table也可以通过反射的形式自动创建,但是有一个问题,就是假如你要针对数据库建立一些优化,但是自动生成的表是无法生成优化的。所以在实际的开发过程中,通常都是先建表,然后再生成类。

首先在MyEclipse创建一个java类(这个时候暂时还不需要J2EE的部分),取名为Student,在里面创建几个变量,需要跟数据库里面的table定义的变量在类型和数量上都一样。 这个在比较大的项目中通常是通过Ant配置好,然后自动进行。因为开发的过程中很有可能你常常需要清空数据库,或者说添加,删除等等,使用build.xml文件配置好,然后Ant直接就可以执行。

然后在default包里面创建一个 hibernate.cfg.xml文件,名字必须是这个,不能更改(改了以后就需要连带改其它的东西,没有必要)里面的内容,不要从头到尾自己写,直接从hibernate文件夹的Documentation的manual文件夹index.html里面去拷贝,拷贝出来再改。总的来说就是,它已经写好了底层实现,你只需要在里面配置好就是了。配置好以后,数据库就自动设置连接好了,数据库和表就和class对应起来了。


怎么改?跟JDBC的写法一样。改成这个样子

      <!-- Database connection settings -->

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="connection.url">jdbc:mysql://localhost/hibernate</property>

        <property name="connection.username">root</property>

        <property name="connection.password">heiheijoshua</property>


连接池的部分暂时不管,hibernate提供连接池,但是一般都不用。一般都是自己实现连接池。

 <!-- SQL dialect -->

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

所谓的Dialect估计跟你使用的数据库类型有关,如果使用MySQL那么就按照上面的配置成为MySQL就行了。关于其它数据库的Dialect的名字,那么你就去官方文档查就是了。 


如果使用了cache

<!-- Disable the second-level cache -->

<property name="cache.provider_class"">org.hibernate.cache.NoCacheProvicer</property>

那么这个就得改,比如使用了memcached,具体怎么改,再说


暂时不需要管的最好注释掉的东西还有thread,update。

最后还要注意的就是mapping,当然这个是等你把映射文件xxx.hbm.xml 建好以后再说了,将其路径写到这里就行。

 <mapping resource="com/test/hibernate/Student.hbm.xml"/>


接下来就要指定关联了,因为数据库里面的字段未必和类里面的成员变量的名称一样。这时候需要新建一个配置文件,叫做Student.hbm.xml,记住名字最好就这样,把它放在和Student一个包中。hbm的意思是hibernate mapping。同样,这个内容不要自己写,去copy mapping的部分。


<hibernate-mapping package="org.hibernate.tutorial.domain">

    <class name="Student" table="student">

        <id name="id" ></id>

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

        <property name="age"></property>

    </class>

</hibernate-mapping>


复制完成以后,记得添加class标签,第一个是类名,第二个是对应的数据库表名。

除此之外,还必须定义的是具体的变量的映射。 第一个id是指primary key。 



一切都建立妥当以后,可以开始测试了,在default包里面建立一个StudentTest.java文件,实现main方法(以后尽量使用JUnit,而不是使用普通的java类)。

Student s = new Student();

s.setId(1);

s.setName("s1");

s.setAge(1);

Configuration cfg = new Configuration();

cfg.configure();

ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();

sessionFactory = cfg.buildSessionFactory(serviceRegistry);    //这里需要尤其注意,4.0版本以后,方法改了,所以有上面那一行和这一个方法

 

Session session = sessionFactory.openSession();

session.beginTransaction();    //执行之前先建立transaction

session.save(s);

session.getTransaction().commit();    //执行完毕获取transaction,并且commit

session.close();

sf.close();


基本上要做的就是创建一个Student对象,调用set方法,为他们赋值,然后定义一个Configuration对象,并且将配置文件进行解析。configure有很多重载方法,如果里面加了uri或者filepath,那么就按照那个添加,如果不写的话那么系统就会自动去找cfg.xml文件。记住,cfg文件是用来连接数据库的,hbm文件是用来映射数据库和java类的。

上面关于session factory的操作稍微其实有点繁琐,Hibernate建议,可以写一个util类,弄一个单例模式,写一个getSessionFactory()方法,这样就非常方便了。

总结来说,就是,一旦你配置好,将来你执行操作的时候,session(session factory里面的)就会去找配置文件,通过配置文件找到相应的匹配的数据表和栏目,然后创建sql语句,进行数据库的操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值