Ⅰ.Hibernate配置前提工作(E:\):
(一).解压4个工具包
工具如下:apache-ant-1.6.2-bin.zip →→ apache-ant-1.6.2
hibernate-2.1.2.zip →→ hibernate-2.1
hibernate-extensions-2.1.3.zip →→ hibernate-extensions-2.1.3
Middlegen-Hibernate-r5.zip →→ Middlegen-Hibernate-r5
JDBC驱动
(二).了解Hibernate几个基本概念:
①ORM object (java object) - relation( hibernate) -object(Dbo)
②POJO 无格式普通java对象
③XML 字描述非常强
④数据库相关信息
Ⅱ.Hibernate配置
(一).获得数据库连接信息
二种格式:
1>.文件名为:hibernate.properties 位于 E:\hibernate-2.1\src
2>.文件名为:hibernate.cfg.xml
注意: hibernate.properties 优先考虑。
运用工具1: hibernate-2.1.2.zip (Hibernate发行包)
⑴.用XMLwriter工具对hibernate.properties (键值对存放数据的)文件进行修改,步骤如下 :
①.用#进行注释 (22-30行)
例: 22行 ## HypersonicSQL
24-30行 用#进行注释
②.按 Ctrl+F 查找你要连接的数据库 (如:jtds) 对其进行修改
116行 ## MS SQL Server
hibernate.dialect net.sf.hibernate.dialect.SQLServerDialect
hibernate.connection.username sa
hibernate.connection.password sa
138行 ## jTDS (not supported!)
hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
hibernate.connection.url jdbc:jtds:sqlserver://localhost:1433/pubs
hibernate.jdbc.use_scrollable_resultset false
好的,第一步成功了!^_^!~
(二).映射信息 (扩展名为:hbm.xml的文件)
运用工具2: Middlegen-Hibernate-r5.zip (用于生成hbm文件) 注意:它自己不可以运行靠工具3生成
运用工具3: apache-ant-1.6.2-bin.zip (运行Middlegen的工具)
⑴.设置环境变量,在系统环境变量中添加名叫ant_home的变量,其值为ant工具的根目录 并且ant根目录下的bin目录放入path变量
1.新建环境变量(ant_home) E:\apache-ant-1.6.2
2.path E:\apache-ant-1.6.2\bin
测试:在DOS下 C:\Documents and Setting\Lab1>ant
Buildfile:build.xml does not exist!
Build failed 测试成功!~~
⑵.修改的XML如下:
⒈ build.xml 路径:(E:\Middlegen-Hibernate-r5\build.xml)
①24行 <!ENTITY database SYSTEM "file:./config/database/mssql.xml">
②51行 <property name="build.gen-src.dir" value="D:\temp"/> 结果文件在哪产生
③158行 <table name="数据表名"/> 连接数据库表名 (注:可以建立很需要的表)
④185行 package="改自己的包名" 根据自己要求取包的名字
⒉选择的数据库 路径:(E:\Middlegen-Hibernate-r5\config\database\*.xml)
如:mssql.xml
①8行 <property name="database.driver.file" value="${lib.dir}/jtds.jar"/>
②9行 <property name="database.driver" value="net.sourceforge.jtds.jdbc.Driver"/> 修改Driver
③10行 <property name="database.url" value="jdbc:jtds:sqlserver://localhost:1433/pubs"/>
修改URL
④11行 <property name="database.userid" value="sa"/>
⑤12行 <property name="database.password" value="sa"/>
⑥13行 <property name="database.schema" value="dbo"/>
⑦14行 <property name="database.catalog" value="pubs"/>
以上修改完后,需要注意的问题!
★特别注意:将你的JDBC驱动大集合\SqlServer\JTDS\jtds.jar 放入E:\Middlegen-Hibernate-r5\lib 里面 就可以了!~
⒊java object (java 对象)
工具4:hibernate-extensions-2.1.3 解压到....注意目录。
㈠:设置环境变量:
在系统变量中添加一变量名为hibernate-home 其值为hibernate发行包的跟目录:E:\hibernate-2.1 注意格式。
在DOS下运行:
C:\Documents and Settings\lab1>e:
E:\>dir/w
E:\>cd E:\Middlegen-Hibernate-r5
E:\Middlegen-Hibernate-r5>ant
E:\>cd E:\hibernate-extensions-2.1.3\tools\bin
E:\hibernate-extensions-2.1.3\tools\bin>hbm2java 结果文件的完整路径(*.xml) --output=java文件的存放目录(与结果文件放在一起)
生产java文件。
打开java文件;删除导入的用于序列化的包,删除最后的toString方法;
Ⅲ.Hibernate开发:
1 .将.xml .java文件拖放到SRC中同一包下
2.导入import java.io.*;
3.把hibernate发行包中的hibernate.properties拖放到SRC中去。
….导入jar包:E:\hibernate-2.1\lib\的所有.jar包
所连接的数据库的JDBC的驱动包也要导入
hibernate发行包中的hibernate2.jar也要导入,
OK 配置完成 开始测试代码:
package hello;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class Hibernate {
/**
* @param args
* @throws HibernateException
* @throws MappingException
* @throws HibernateException
*/
public static void main(String[] args) throws MappingException, HibernateException {
SessionFactory factory = new Configuration()
.addClass(hello.Admin.class).buildSessionFactory();
Session session = factory.openSession();
Admin admin = new Admin();
List list = session.find("from Admin");
for (int i=0; i<list.size(); i++) {
admin = (Admin) list.get(i);
System.out.println(admin.getName()+"\t"+admin.getPassword());
}
factory.close();
session.close();
}
}
!!!注意:
如果表没有主键则必须重写equals() 和hashCode()方法,有主键则不必。
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof Admin))
return false;
Admin other = (Admin)o;
if (name == other.getName()) return true;
if (name == null) return false;
return name.equals(other.getName());
}
public int hashCode() {
if (name != null) {
return name.hashCode();
} else {
return super.hashCode();
}
}