Hibernate初体验
Hibernate初体验
Hibernate概述:
1 Hibernate出现的原因:在对数据库操作的时候,难免会遇到数据库表字段比较多的时候,编写数据访问层的时候是相当的繁琐的。所以为了操作数据库方 便,Hibernate可以JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
2 出现的前提:在理解Hibernate框架思想的前提是对ORM(对象关系映射)的理解。简单的理解就是,在Object(对象)与Relational(关系型数据)之间建立映射关系,在实现业务的过程中只需要对对象进行操作即可,避免对关系型数据的操作。
3 Hibernate体系结构:

3.1持久化对象(Persistent Object):即封装了数据库表记录的JavaBean对象
3.2Hibernate映射文件(XML Mapping):持久化对象(PO)与数据库表记录之间的映射关系
3.3Hibernate配置文件(hibernate.properties)配置相关的数据库访问信息,如数据库驱动类、连接串、访问数据库用户名和密码等
注意:实际开发,通常使用名字为hibernate.cfg.xml的XML文件进行配置
第一个Hibernate开发步骤:
1 建立数据库:这里我使用的microsoft sql server 2000,截图如下:
student数据表:

2 新建普通Java Project,导入Hibernate JAR包,同时还需导入JDBC驱动JAR包,Hibernate框架最终会调用底层JDBC代码
2.1项目点右键—Build Path—Configure Build Path
2.2弹出对话框中,点击“Add External JARs..”
2.3选择要导入的jar包即可
3 在hibernate.cfg.xml中配置数据库连接信息
要求:3.1文件名称固定即为hibernate.cfg.xml
3.2位置要求:在MyEclipse开发目录的src根目录下,编译后存储在class根目录下
4 开发持久化对象(Persistant Object)——PO:封装student数据库表记录的JavaBean对象
5 开发Hibernate映射文件:通过映射文件让Hibernate框架知晓PO类对象与数据库表记录之间的映射关系
映射文件命名要求:类名.hbm.xml;在本例中,需要开发Student类与student表之间进行映射的Student.hbm.xml文件
位置要求:与类同一目录下
6 回到step3中开发的hibernate.cfg.xml文件,在其中加入下面的内容:<mapping resource = "po/Student.hbm.xml" />
7 Step7:编写测试类方法,运用Hibernate框架完成学生信息添加
在本例中po类:Student
package po;
public class Student {
private int id;
private String number;
private String name;
private int age;
private String intro;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
}
数据库连接配置文件:hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;databasename=student</property>
<property name="connection.username">sa</property>
<property name="connection.password">catv</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<mapping resource="po/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Hibernate映射文件:Student.hbm.xml
<hibernate-mapping>
<class name="po.Student" table="student">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="number" column="xh"></property>
<property name="name" column="xm"></property>
<property name="age" column="nl"></property>
<property name="intro" column="grjs"></property>
</class>
</hibernate-mapping>
测试类:
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
////实例化一个Student对象,设置属性,id属性不需要设置,该属性对应数据表中的自增字段
Student stu = new Student();
stu.setNumber("1001");
stu.setName("tom");
stu.setAge(20);
stu.setIntro("my name is tom");
//实例化一个Configuration对象
Configuration cf = new Configuration();
//通过Configuration对象的configure方法读取存放在默认路径下的hibernate.cfg.xml配置文件
cf.configure();
/*再进一步通过Configuration的buildSessionFactory方法,获取到一个SessionFactory对象
*SessionFactory对象就包含了Hibernate.cfg.xml的配置信息,以及其它信息
*/
SessionFactory sf = cf.buildSessionFactory();
/*
* 通过SessionFactory的openSession方法获取一个Session对象
* Hibernate中的Session对象,简单理解:作用相当于以前JDBC编程用的Connection对象
* 对数据库的各种操作通过Session对象实现(实质:通过操作JavaBean对象,再进而实现对数据表的对应操作)
*/
Session session = sf.openSession();
//Hibernate编程中,所有的数据库操作放在事务当中,以下方法开始一个事务
session.beginTransaction();
/*调用session对象的save方法,将stu对象中的数据存储到student表中
* 根据配置文件中Student对象与数据库student表的对应关系
*/
session.save(stu);
//提交事务
session.getTransaction().commit();
//关闭session对象
session.close();
}
}

浙公网安备 33010602011771号