还有一种更加有意思的处理方法,就是 ORM,Object-Relational Mapping。面向对象,简化编程,还可以跨越数据库平台。这一点很重要。
Hibernate就是其中一种( 还有一种最重要的JPA),这个框架提供了很多方便的方法,比如save,delete等等,完全面向对象,和操作java类似。只要你配置好了,直接这样操作就行,因为很多东西都是固定的配置。这样以后,你甚至不需要去写任何面向关系的sql语句,达到了屏蔽sql直接操作的效果。操作的时候直接使用封装好的方法就行,然后它就会自动地去找到和数据库操作的东西。
先配置环境,注意core和annotation版本的兼容。这个我看现在hibernate已经把各种东西合在一个包里面了,可以直接一起下载。
有一个简便的配置方法,就是,你如果每次都一个一个的jar包去添加,会很麻烦,一个很好的做法就是,使用preferences里面的user libraries,自己建一个library,把需要添加的东西都添加好,以后,如果你要多次使用,你就直接一次就添加好了。比如你取名叫做Hibernate,以后就不会混淆了,以后任何跟这个相关的包都直接添到这个里面就行。 (但是这个只是针对Eclipse)
首先在MyEclipse创建一个java类(这个时候暂时还不需要J2EE的部分),取名为Student,在里面创建几个变量,需要跟数据库里面的table定义的变量在类型和数量上都一样。 这个在比较大的项目中通常是通过Ant配置好,然后自动进行。因为开发的过程中很有可能你常常需要清空数据库,或者说添加,删除等等,使用build.xml文件配置好,然后Ant直接就可以执行。
<!-- 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>
<!-- 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语句,进行数据库的操作。