我们首先下载好Hibernate3.2的包,然后将根目录下的hibernate3.jar核心包和lib目录下的所有依赖jar包添加到工程的lib目录下,再加上mysql的驱动包。
script.sql :
create database temp; use temp; create table users( id int primary key auto_increment, name varchar(10), age int, married varchar(2));hibernate.cfg.xml :
<!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="connection.url">jdbc:mysql://localhost:3306/temp</property> <property name="connection.username">root</property> <property name="connection.password">mysqladmin</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="db/mapping/User.hbm.xml"/> </session-factory> </hibernate-configuration>注意此文件的DOCTYPE可以到hibernate分发包的etc目录下hibernate.cfg.xml文件中拷贝。属性dialect表示方言,其值可以到hibernate3.jar下的org.hibernate.dialect包中去找对应的数据库方言。这里我使用的数据库是mysql5,所以选择了MySQL5Dialect。
User.hbm.xml :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="db.domain"> <class name="User" table="users"> <id name="id" type="integer"> <generator class="native"></generator> </id> <property name="name" type="string"> <column name="name"></column> </property> <property name="age" type="integer"> <column name="age"></column> </property> <property name="married" type="yes_no"> <column name="married"></column> </property> </class> </hibernate-mapping>注意这个Java类的映射数据库文件的DOCTYPE可以到hibernate分发包的test目录中搜索hbm.xml,在结果中随便找一个文件打开,将其DOCTYPE拷贝出来。这个文件中, class表示要映射数据库表的类, name属性表示类名, table属性表示数据库中对应的表。 property的 name属性表示Java类的属性名, type表示数据类型,这里采用的是hibernate框架的数据类型, column表示映射到数据库表中的某个字段名。需要注意的是married,Java类中的married是 布尔类型,hibernate可以采用 yes_no映射,写进数据库表的时候,true表示为Y,false表示为N。
User.java :
public class User { private int id; private String name; private int age; private boolean married; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 boolean isMarried() { return married; } public void setMarried(boolean married) { this.married = married; } }UserDAO.java :
public class UserDAO { public void add(User user){ Configuration conf=new Configuration(); conf.configure();//加载hibernate.cfg.xml配置文件 SessionFactory sf=conf.buildSessionFactory();//获取SessionFactory实例 Session session=sf.openSession(); Transaction txt=session.beginTransaction(); session.save(user); txt.commit();//提交事务 session.close(); } }TestDAO.java :
public class TestDAO { public static void main(String[] args) { UserDAO dao=new UserDAO(); User user=new User(); user.setName("tom"); user.setAge(20); user.setMarried(false); dao.add(user); } }
运行TestDAO.java,控制台输出:
可以看出hibernate底层采用的仍然是SQL语句。
查看数据库中的表:
可以看出数据已经写入数据库的users表中。
整个过程中,虽然我们操作的是User对象,但数据依然可以写进关系型数据库的表中,这样就实现了从始至终的面向对象编程。