Hibernate 与hsqldb结合

Hibernate 与hsqldb结合
 

Hibernate是用来操作数据库的,当然要结合数据库来使用。但是公司的电脑是不能随便安装软件的,即使是mysql的免安装版,也要把驱动文件放到windows下,没有权限是做不到的。因此推荐一个hsqldb数据库,是java语言写的。不需要安装。下面介绍如何结合hibernatehsqldb

1、 下载hsqldb

http://hsqldb.org/

将下载下来的文件解压,文件结构如图

 

打开demo文件夹

 

注意里面的几个文件runManager.batrunServer.batmy_server.batrunManagerSwing.bat

runServer.bat是来开启数据库服务,runManager.batrunManagerSwing.bat是数据库管理界面,可以在里面输入sql语句来执行。注意my_server.bat是自己加进去的,内容是:

cd ../data

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 hibernate

hibernate是数据库名,自己随便写,也可以写成mydb等等

2、 启动hsqldb

先执行my_server.bat,然后执行runServer.bat,最后执行runManager.bat或者runManagerSwing.bat,本例中以runManager.bat为例,启动界面,配置如图

 

注意url中不要忘记hibernate这个数据库名。

点击ok,如图,里面有个名字为user的表

 

Hsqldb就配置到这里。

3、 下面hibernate的配置,首先自己建一个user library,把hibernate所有的必须的jar包都添加进去,在hibernate文件夹中有,自己添加一下。

然后新建一个java项目hibernateDemo,将刚才自己定义的库加到工程里。配置到此结束。

4、 我们现在src文件下定义hibernate的配置文件hibernate.cfg.xml文件,内容如下

 

 

 

[xhtml] view plain copy print ?
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2.   
  3. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  4.   
  5. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  6.   
  7. <hibernate-configuration>  
  8.   
  9.     <session-factory>  
  10.   
  11.        <property name="myeclipse.connection.profile">hsql</property>  
  12.   
  13.        <property name="connection.url">jdbc:hsqldb:hsql://localhost/hibernate</property>  
  14.   
  15.        <property name="connection.username">sa</property>  
  16.   
  17.        <property name="connection.password"></property>  
  18.   
  19.        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>  
  20.   
  21.        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>  
  22.   
  23.        <property name="show_sql">true</property>  
  24.   
  25.        <property name="connection.autocommit">true</property>  
  26.   
  27.        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>  
  28.   
  29.    
  30.   
  31.          
  32.   
  33.        <mapping resource="com/zhoubo/hibernate/User.hbm.xml" />  
  34.   
  35.    
  36.   
  37.     </session-factory>  
  38.   
  39. </hibernate-configuration>  
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="myeclipse.connection.profile">hsql</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost/hibernate</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property> <property name="connection.autocommit">true</property> <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> <mapping resource="com/zhoubo/hibernate/User.hbm.xml" /> </session-factory> </hibernate-configuration>

 

5、 在文件夹src下定义一个package  com.zhoubo.hibernate 在里面新建一个User类,如下

 

[java] view plain copy print ?
  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. public class User {  
  6.   
  7.    
  8.   
  9.     private String id;  
  10.   
  11.     private String password;  
  12.   
  13.     private char sex;  
  14.   
  15.     private int age;  
  16.   
  17.       
  18.   
  19.     public String getId() {  
  20.   
  21.        return id;  
  22.   
  23.     }  
  24.   
  25.     public void setId(String id) {  
  26.   
  27.        this.id = id;  
  28.   
  29.     }  
  30.   
  31.     public String getPassword() {  
  32.   
  33.        return password;  
  34.   
  35.     }  
  36.   
  37.     public void setPassword(String password) {  
  38.   
  39.        this.password = password;  
  40.   
  41.     }  
  42.   
  43.     public char getSex() {  
  44.   
  45.        return sex;  
  46.   
  47.     }  
  48.   
  49.     public void setSex(char sex) {  
  50.   
  51.        this.sex = sex;  
  52.   
  53.     }  
  54.   
  55.     public int getAge() {  
  56.   
  57.        return age;  
  58.   
  59.     }  
  60.   
  61.     public void setAge(int age) {  
  62.   
  63.        this.age = age;  
  64.   
  65.     }  
  66.   
  67.       
  68.   
  69. }  
package com.zhoubo.hibernate; public class User { private String id; private String password; private char sex; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

 

在里面定义一个User类的配置文件User.hbm.xml

 

[xhtml] view plain copy print ?
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2.   
  3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.   
  5.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  6.   
  7. <hibernate-mapping>  
  8.   
  9.     <class name="com.zhoubo.hibernate.User" table="User">  
  10.   
  11.          
  12.   
  13.         <id name="id" column="User_id">  
  14.   
  15.             <generator class="uuid"/>  
  16.   
  17.         </id>  
  18.   
  19.         <property name="password"/>  
  20.   
  21.         <property name="sex"/>  
  22.   
  23.         <property name="age"/>  
  24.   
  25.     </class>  
  26.   
  27. </hibernate-mapping>  
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.zhoubo.hibernate.User" table="User"> <id name="id" column="User_id"> <generator class="uuid"/> </id> <property name="password"/> <property name="sex"/> <property name="age"/> </class> </hibernate-mapping>

 

并且在hibernate.cfg.xml中来注册这个user.hbm.xml,也就是我们在hibernate.cfg.xml中看到的

<mapping resource="com/zhoubo/hibernate/User.hbm.xml" />

 

下面我们就来通过hibernate来在数据库生成user表,定义一个DBExport类,如下

 

[java] view plain copy print ?
  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. import org.hibernate.cfg.Configuration;  
  6.   
  7. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  8.   
  9.    
  10.   
  11. public class DBExport {  
  12.   
  13.    
  14.   
  15.     public static void main(String ...arg){  
  16.   
  17.        Configuration cfg = new Configuration().configure();  
  18.   
  19.        SchemaExport export = new SchemaExport(cfg);  
  20.   
  21.        export.create(true, true);  
  22.   
  23.     }  
  24.   
  25.    
  26.   
  27. }  
package com.zhoubo.hibernate; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class DBExport { public static void main(String ...arg){ Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); } }

 

可以通过desc user来查询表的属性,可以看到表已经生成了。

下面我们来在表中插入数据,定义一个hibernateUtil类和Client类,如下

 

[java] view plain copy print ?
  1. package com.zhoubo.hibernate;  
  2.   
  3. import org.hibernate.Session;  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.Configuration;  
  6.   
  7. public class HibernateUtils {  
  8.   
  9.     private static SessionFactory factory ;  
  10.       
  11.     static {  
  12.         try{  
  13.             Configuration cfg = new Configuration().configure();  
  14.             factory = cfg.buildSessionFactory();  
  15.         }catch(Exception e){  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19.       
  20.     public static Session getSession(){  
  21.         return factory.openSession();  
  22.     }  
  23.       
  24.     public static SessionFactory getSessionFactory(){  
  25.         return factory;  
  26.     }  
  27.       
  28.     public static void closeSession(Session session){  
  29.         session.close();  
  30.     }  
  31. }  
package com.zhoubo.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory factory ; static { try{ Configuration cfg = new Configuration().configure(); factory = cfg.buildSessionFactory(); }catch(Exception e){ e.printStackTrace(); } } public static Session getSession(){ return factory.openSession(); } public static SessionFactory getSessionFactory(){ return factory; } public static void closeSession(Session session){ session.close(); } }

 

[java] view plain copy print ?
  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. import org.hibernate.Session;  
  6.   
  7. import org.hibernate.Transaction;  
  8.   
  9.    
  10.   
  11. public class Client {  
  12.   
  13.    
  14.   
  15.     public static void main(String ...args){  
  16.   
  17.        User user = new User();  
  18.   
  19.        Session session = null;  
  20.   
  21.        Transaction tx = null;  
  22.   
  23.        try{  
  24.   
  25.            session = HibernateUtils.getSession();  
  26.   
  27.            tx = session.beginTransaction();  
  28.   
  29.              
  30.   
  31.            user.setAge(18);  
  32.   
  33.            user.setPassword("hello");  
  34.   
  35.            user.setSex('m');  
  36.   
  37.              
  38.   
  39.            session.save(user);  
  40.   
  41.            tx.commit();  
  42.   
  43.              
  44.   
  45.        }catch(Exception e){  
  46.   
  47.            e.printStackTrace();  
  48.   
  49.            tx.rollback();  
  50.   
  51.        }finally{  
  52.   
  53.            HibernateUtils.closeSession(session);  
  54.   
  55.        }  
  56.   
  57.          
  58.   
  59.          
  60.   
  61.     }  
  62.   
  63. }  
package com.zhoubo.hibernate; import org.hibernate.Session; import org.hibernate.Transaction; public class Client { public static void main(String ...args){ User user = new User(); Session session = null; Transaction tx = null; try{ session = HibernateUtils.getSession(); tx = session.beginTransaction(); user.setAge(18); user.setPassword("hello"); user.setSex('m'); session.save(user); tx.commit(); }catch(Exception e){ e.printStackTrace(); tx.rollback(); }finally{ HibernateUtils.closeSession(session); } } }

 

通过查询,我们可以看到插入的值。

你可能感兴趣的:(Hibernate 与hsqldb结合)