1.由于前面我们所学的 :struts+hibernate+spring的整合类容呢,和后面的知识有很大的挂钩,所以我必须先要学习后面两个框架,才能学它们之间的整合,我把那两个视频移到了这个hibernate文件夹下,以后再移到spring文件夹下,学完这两个框架之后再学习它。
好的,第一个视频的前25分钟,我在教室学过,所以我这就相当于简单的复习一下,将一些代码写好。
首先我们来完成一个用户保存的操作。
要完成对象和关系的映射,那么我们需要一个这样的包:hibernate3.jar
我们将jar包导入进去
2.新建一个java工程,然后再新建一个java文件:
package cn.itcast.hibernate.docmain;
import java.sql.Date;
public class User {
private int id;
private String username;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
新建一个映射文件:hibernate.hbm.xml
<?xml version="1.0" ?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<hibernate-mapping package="cn.itcast.hibernate.docmain">
<class name="User">
<id name="id">
<generator class="native"/>
</id>
<property name="username"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
那么以上映射文件就将java程序和数据库对应起来了
3.还需要一个hibernate配置文件:
这个文件也是由例子修改得到:
在这个配置文件中,我们要告诉hibernate一些信息,也就是告诉它怎么去连数据库。
在这里面,我们就需要驱动,url,用户名,密码。
其实hibernate最底层还是用JDBC去访问的。
mySQL的端口号确定是3306
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>
上面的信息告诉我们,连接数据库的驱动,url,用户名和密码是数据库使用的时候自己用的,密码没有就不用填,以及最后一个方言,告诉我们使用的是哪种数据库。
4.再来编写一个测试的例子:
package cn.itcast.hibernate;
import java.sql.Date;
import org.hibernate.classic.Session;
import cn.itcast.hibernate.docmain.User;
import com.opensymphony.xwork2.config.Configuration;
public class Base {
public static void main(String[] args) {
Configuration cfg=new Configuration();//先对hibernate进行一下初始化
cfg.configure();
//它的作用就是获取sessionfactory
SessionFactroy sf=cfg.bulidSessionFactroy();
Session s=sf.openSession();//很显然它的作用就是用来生产session的
User user=new User();
user.setName("name");
user.setBirthday(new Date());
s.save(user);
s.close();
System.out.println("end");
}
}
那么现在就来测试一下,出现了一些异常,异常是因为我们在加的过程中,没有加JDBC的驱动。
还有一个错误,这个表不存在。因为我们还没建这个表。
5.我们需要在配置文件中增加一条语句就是:<property name="hibernate.hbm2ddl.auto">create</property>
//我们在测试的时候,可以用creat这种方式,因为这种方式像creat-drop,创建之后,就会删除,而是在下次启动的时候删除。在测试的时候还是可以用的。
看hibernate是否生成一个ddl语句,ddl语句是数据生成语言,是数据库里面的一种定义这个表结构,索引的语言。
6.刚刚举得这个例子,只是让大家感受一下hibernate开发的一个过程。里面有很多细节还没有给大家详细的介绍。
接下来我们就来看看开发中的一些细节:
从刚刚的开发中我们可以得知,用hibernate进行开发,需要三个文件,一个是java实体类文件,一个是映射文件,还有一个是表结构文件。
那么我们应该先写哪一个,上个例子中,我们是先创建java类,然后创建映射文件,表结构没有创建,由hibernate自动给我们创建。
从面向对象的角度来看,我们先设计这个对象,也就是先把这个docmain对象创建出来,然后表结构由hibernate去管理,而映射文件呢可以由一些工具去生成,其实我们只要知道其中一个,另外两个都可以推出来。
以上呢,是一种比较官方的设计方式,也就是说是hibernate设计者希望我们使用的设计方式。
但是在真正的开发中,肯另外一种方式使用的会更多些。也就是从设计表结构开始。
7.当然老师以后给我们介绍开发呢,都会是以官方推荐的方式来设计。
Hibernate对于对象的一些限制,并不是说随便一个对象hibernate都可以来管理,而是存在一些条件限制:
主要是这个缺省的构造方法是必须要有的。
上面的例子中,我们没有给它指定构造方法,所以它里面也就有一个缺省的构造方法,也就是不带参数的构造方法。
8.另外我们再来看一下这个映射文件。其实是从hibernate例子中拷贝过来的。这个映射文件时hibernate运行时非常核心的一个文件。