一、下载hibernate-3.2 core版本,解压。
二、打开eclipse,建立一个用户库,命名为:hibernate3.2,导入刚解压的hibernate目录下的hibernate3.jar
并/lib目录下的所有jar文件。在Builder path的source and output fold中选择Folder,并默认给出的文件夹名。
在as JRE library use中选择JRE_LIB variable。
三、新建一个java工程。在其属性的Java Build Path中引入刚建立的hibernate3.2用户库并mysql的java驱动(
视你所用的数据库而定,在这我用的是mysql数据库)。
四、在src中建立一个包,设为px.malijun,并在其中建立以下几个Java Class:
- packagepx.malijun;
- publicclassUser{
- privateintid;
- privateStringname;
- privateStringpassword;
- privateStringemail;
- publicStringgetEmail(){
- returnemail;
- }
- publicvoidsetEmail(Stringemail){
- this.email=email;
- }
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicStringgetPassword(){
- returnpassword;
- }
- publicvoidsetPassword(Stringpassword){
- this.password=password;
- }
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- }
建立相应的xml映射文件:
- <?xmlversion="1.0"encoding='utf-8'?>
- <!DOCTYPEhibernate-mappingPUBLIC
- "-//Hibernate/HibernateMappingDTD3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <classname="px.malijun.User"table="users">
- <idname="id">
- <generatorclass="identity"/>
- </id>
- <propertyname="name"/>
- <propertyname="password"/>
- <propertyname="email"/>
- </class>
- </hibernate-mapping>
在数据库中建立一个myproject(按你的意思定名)数据库,在其中建立一个users表(向RoR学习):
- CREATETABLE`users`(
- `id`int(11)NOTNULLauto_increment,
- `name`varchar(255)defaultNULL,
- `password`varchar(255)defaultNULL,
- `email`varchar(255)defaultNULL,
- PRIMARYKEY(`id`)
- )
注:我是用phpmyadmin对mysql数据库进行管理的,在建立的时候我特意为其选择了utf-8编码。
在src的根目录下(以上的user.hbm.xml映射文件与User.java在同一目录下)建立hibernate的配置文件:
- <?xmlversion="1.0"encoding="utf-8"?>
- <!DOCTYPEhibernate-configurationPUBLIC
- "-//Hibernate/HibernateConfigurationDTD3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!--显示实际操作数据库时的SQL-->
- <propertyname="show_sql">true</property>
- <!--SQL方言,这边设定的是MySQL-->
- <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property>
- <!--JDBC驱动程序-->
- <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>
- <!--JDBCURL 注意这边我设定的所使用的编码 -->
- <propertyname="connection.url">jdbc:mysql://localhost:3306/myproject?useUnicode=true&characterEncoding=utf8</property>
- <!--数据库使用者-->
- <propertyname="connection.username">root</property>
- <!--数据库密码-->
- <propertyname="connection.password"></property>
- <!--以下设置对象与数据库表格映像文件-->
- <mappingresource="px/malijun/User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
ok 了,下面我们就进入我们的实际使用阶段了:
由于常规操作都类似,我们建立了一个抽象类:
- packagepx.malijun;
- importorg.hibernate.*;
- importorg.hibernate.cfg.*;
- importjava.util.*;
- importjava.io.IOException;
- importjava.io.PrintWriter;
- publicabstractclassHibernateBase
- {
- protectedSessionFactorysessionFactory;//会话工厂,用于创建会话
- protectedSessionsession;//hibernate会话
- protectedTransactiontransaction;//hiberante事务
- publicHibernateBase()throwsHibernateException
- {
- this.initHibernate();
- }
- //帮助方法
- protectedvoidinitHibernate()
- throwsHibernateException{
- //装载配置,构造SessionFactory对象
- sessionFactory=newConfiguration().configure().buildSessionFactory();
- }
- /**
- *开始一个hibernate事务
- */
- protectedvoidbeginTransaction()
- throwsHibernateException{
- session=sessionFactory.openSession();
- transaction=session.beginTransaction();
- }
- /**
- *结束一个hibernate事务。
- */
- protectedvoidendTransaction(booleancommit)
- throwsHibernateException{
- if(commit){
- transaction.commit();
- }else{
- //如果是只读的操作,不需要commit这个事务。
- transaction.rollback();
- }
- session.close();
- }
- }
然后建立一个具体针对User操作的一个类:
- packagepx.malijun;
- importorg.hibernate.*;
- importorg.hibernate.cfg.*;
- importjava.util.*;
- /**
- *和course相关的业务逻辑
- */
- publicclassUserBeanextendsHibernateBase{
- publicUserBean()throwsHibernateException{
- super();
- }
- /**
- *增加一个Course
- */
- publicvoidaddUser(Useruser)throwsHibernateException{
- beginTransaction();
- session.save(user);
- endTransaction(true);
- }
- /**
- *查询系统中所有的Course,返回的是包含有Course持久对象的Iterator。
- */
- publicIteratorgetAllUsers()throwsHibernateException{
- StringqueryString="selectusersfromUserasuser";
- beginTransaction();
- Queryquery=session.createQuery(queryString);
- Iteratorit=query.iterate();
- returnit;
- }
- /**
- *删除给定ID的course
- */
- publicvoiddeleteUser(Stringid)throwsHibernateException{
- beginTransaction();
- Useruser=(User)session.load(User.class,id);
- session.delete(user);
- endTransaction(true);
- }
- /**
- *按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。
- */
- publicIteratorgetSomeUser(Stringname)throwsHibernateException{
- StringqueryString="selectufromUserasuwhereu.namelike:name";
- beginTransaction();
- Queryquery=session.createQuery(queryString);
- query.setString("name","%"+name+"%");
- Iteratorit=query.iterate();
- returnit;
- }
- }
万事大吉,所欠的事情就是调用UerBean中定义的操作进行我们实际所要针对User所做的事情了。我们写一个简单的
测试:
- packagepx.malijun;
- publicclassTest {
- /**
- *@paramargs
- */
- publicstaticvoidmain(String[]args){
- //TODOAuto-generatedmethodstub
- UserBeanub=newUserBean();
- Useruser=newUser();
- user.setName("你好,世界!");
- user.setPassword("123456");
- user.setEmail("ok@ujs.edu.cn");
- ub.addUser(user);
- }
- }
这个测试在执行以后,你查看一下数据库中的users表,你就会发现,我们真的add一个user了,其它的
操作,我们就略了。
本文详细介绍如何使用Hibernate 3.2版本进行数据库操作,包括环境搭建、实体类与映射文件创建、配置文件设置及基本CRUD操作实现。
209

被折叠的 条评论
为什么被折叠?



