【Hibernate】Hibernate系列(二)

Hibernate环境搭建

我这次创建的是一个叫做student的表,里面存有id、name和age字段,我将搭建一个hibernate环境,利用框架的核心API对student进行数据插入。数据库用的是Mysql。


1.首先在工程中添加hibernate的jar包:

将解压路径中hibernate3.jar和lib路径下的required、jpa子目录下所有JAR包添加到应用的类加载路径中。

【Hibernate】Hibernate系列(二)

然后,我们就可以把建好的库引入到项目中了,具体操作为:右键项目名称-->Properties-->Java Build Path,如图:

【Hibernate】Hibernate系列(二)

核心文件配置

        到现在,已经把建好的库引入到项目中了,之后我们要做的就是,把Hibernate的核心配置文件(hibernate.cfg.xml)引入到项目中, 该核心配置文件会给Hibernate提供数据库的映射,使得Hibernate与数据库进行连接。如图所示:

【Hibernate】Hibernate系列(二)


        之后,我们需要对Hibernate核心文件做一下配置,加入MySQL的JDBC驱动,配置数据库连接。代码如下:

  1. <span style="font-family:Microsoft YaHei;font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4. <hibernate-configuration>  
  5.     <session-factory>  
  6.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  7.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/student</property>  
  8.         <property name="hibernate.connection.username">root</property>  
  9.         <property name="hibernate.connection.password">123</property>  
  10.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  11.         <property name="hibernate.show_sql">true</property>  
  12.   
  13.     </session-factory>  
  14. </hibernate-configuration></span> 

hibernate的帮助文档在

hibernate-distribution-3.6.0.Final\documentation\manual\zh-CN\html_single下的index.html


2..编写实体类的JavaBean(cn.edu.hpu.model包下)

  1. package cn.edu.zjl.model;  
  2.   
  3.   
  4. public class Student {  
  5.     private int id;  
  6.     private String name;  
  7.     private int age;  
  8.     public int getId() {  
  9.         return id;  
  10.     }  
  11.     public void setId(int id) {  
  12.         this.id = id;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.     public int getAge() {  
  21.         return age;  
  22.     }  
  23.     public void setAge(int age) {  
  24.         this.age = age;  
  25.     }  
  26.       
  27.       
  28. }  



3.配置实体类的hbm映射文件:

Student.hbm.xml:

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5.   
  6.   
  7. <hibernate-mapping package="cn.edu.hpu.model">  
  8.     <class name="Student" table="stu">  
  9.         <!-- 主键 这里的主键名字刚好也是'id'-->  
  10.         <id name="id" column="id"></id>  
  11.         <property name="name"></property>  
  12.         <property name="age"></property>  
  13.     </class>  
  14. </hibernate-mapping>  



4.在src目录下hibernate的配置配置文件,即数据库连接池hibernate.cfg.xml:

  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  5.   
  6.   
  7. <hibernate-configuration>  
  8.   
  9.   
  10.     <session-factory>  
  11.   
  12.   
  13.         <!-- Database connection settings -->  
  14.         <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>  
  15.         <property name="connection.url">jdbc:mysql://localhost:3306/students</property>  
  16.         <property name="connection.username">root</property>  
  17.         <property name="connection.password">1234</property>  
  18.   
  19.   
  20.         <!-- JDBC connection pool (use the built-in) JDBC连接池-->  
  21.         <!-- <property name="connection.pool_size">1</property> -->  
  22.   
  23.   
  24.         <!-- SQL dialect SQL方言-->  
  25.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  26.   
  27.   
  28.         <!-- Enable Hibernate's automatic session context management -->  
  29.         <!-- <property name="current_session_context_class">thread</property> -->  
  30.   
  31.   
  32.         <!-- Disable the second-level cache  去掉二级缓存-->  
  33.         <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>  
  34.   
  35.   
  36.         <!-- Echo all executed SQL to stdout 是否打印sql语句-->  
  37.         <property name="show_sql">true</property>  
  38.   
  39.   
  40.         <!-- Drop and re-create the database schema on startup 是否自动生成建表语句语句-->  
  41.         <property name="hbm2ddl.auto">update</property>  
  42.   
  43.   
  44.         <mapping resource="cn/edu/hpu/model/Student.hbm.xml"/>  
  45.   
  46.   
  47.     </session-factory>  
  48.   
  49.   
  50. </hibernate-configuration>  



5.编写测试类:

  1. package cn.edu.zjl.test;  
  2.   
  3.   
  4. import org.hibernate.Session;  
  5. import org.hibernate.SessionFactory;  
  6. import org.hibernate.cfg.Configuration;  
  7.   
  8.   
  9. import cn.edu.hpu.model.Student;  
  10.   
  11.   
  12. public class StudentTest {  
  13.     public static void main(String[] args) {  
  14.         Student s=new Student();  
  15.         s.setId(1);  
  16.         s.setName("s1");  
  17.         s.setAge(1);  
  18.           
  19.         //Configuration是用来读配置文件的  
  20.         Configuration cfg=new Configuration();  
  21.         //指定要读哪个文件,不写参数默认读hibernate配置  
  22.         //文件下的 <mapping resource=.....  
  23.         SessionFactory sf=cfg.configure().buildSessionFactory();  
  24.         //buildSessionFactory()可以理解为能得到conn的类  
  25.           
  26.         //暂时把Session理解成数据库的Connection  
  27.         Session session=sf.openSession();//得到session  
  28.         session.beginTransaction();  
  29.         session.save(s);  
  30.         session.getTransaction().commit();  
  31.         session.close();  
  32.         sf.close();  
  33.           
  34.     }  
  35. }  



查看MySql数据库,发现已经存在一张新的表stu,并且里面拥有一个id为1,name为s1,age为1的记录。


这个小例子向大家叙述了如何搭建一个hibernate的环境,以及利用session来对实体数据进行简单的操作。

上一篇:*监管机构痛批“无限流量”低价竞争 运营商无奈


下一篇:Spring IOC的一些高级特性