Hibernate之Hello World
by 伊布
Hibernate是一个优秀的持久化框架,其主要功能是将内存里的瞬时状态,通过JDBC持久化到硬盘数据库上。Hibernate以面向对象的思想来解决数据库的问题,可以简化数据库的访问。 这篇文章通过一个简单的示例,来建立Hibernate的初步认识,较水,记录用。
示例代码基本是从这篇文章里抄来的。
首先,得有一个女朋友表。我在mytest数据库里创建了一个student表。
CREATE TABLE `student` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`password` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ;
1、创建工程,导入Hibernate库。
我下载的版本是4.3.10,从官方网站上下载下来的是Hibernate ORM(hibernate-release-4.3.10.Final.zip)。要导入的lib文件在.\hibernate-release-4.3.10.Final\lib\required\
,其他的先不管(我也不知道干啥用的)。
想不起来当时怎么把lib导入到IDEA了,现在导入没有图标了。
2、建立包com.xxx.hibernatest
3、建立实体类的映射
在hibernatest包里新建Student.hbm.xml文件,编写对象关系映射文件,把对象关系映射的逻辑放在此处,这个文件包括表和字段的对象关系,当操作对象时,该文件通过java反射机制产生的方法,会把对象的方法转为关系的方法。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ieevee.hibernatest">
<class name="Student" table="student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="age"/>
</class>
</hibernate-mapping>
4、对象类定义。
在hibernatest包里新建Student.java。它对应于数据库的一个具体的表,需要定义数据库的列、列方法等,实际就是用Java来描述表。
package com.ieevee.hibernatest;
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
5、main入口
这里可以看到Hibernate简单的用法,代码看一看很清楚,就不多说了,名字随便起。
package com.ieevee.hibernatest;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class StudentTest {
public static void main(String[] args) {
Student s = new Student();
//s.setId(); 这句不需要,我们创建的数据库是increasement的
s.setAge(23);
s.setName("dtd");
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
sf.close();
}
}
6、Hibernate主配置
前面我们有了数据库操作主流程,有了对象关系映射文件,有了表的对象,表在前面也创建了,那么就剩下怎么访问数据库了:地址、端口号、数据库名、driver。
这里提供一个hibernate.cfg.xml
的数据库配置文件。配置文件放到工程的根目录,不要放到包里。
Hibernate实际是封装了JDBC,需要对应数据库的driver lib,对端数据库用的是mysql,所以需要把mysql-connector-java-5.1.35-bin也加到project的lib库里。
配置文件就不说了,照着葫芦画瓢就行。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://192.168.5.29:3306/mytest</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</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>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/ieevee/hibernatest/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
好了,有了上面4个文件,一个简单的Hibernate示例就完成了,run main文件,我们去看mysql数据库里,可以看到添加了一条记录:
mysql> select * from student;
+----+--------+----------+------+
| id | name | password | age |
+----+--------+----------+------+
| 1 | dtd | NULL | 23 |
+----+--------+----------+------+
1 rows in set (0.01 sec)
再运行一次,可以看到又添加了一条记录:
mysql> select * from student;
+----+--------+----------+------+
| id | name | password | age |
+----+--------+----------+------+
| 1 | dtd | NULL | 23 |
| 2 | dtd | NULL | 23 |
+----+--------+----------+------+
2 rows in set (0.01 sec)
至此,示例结束,以后有机会用Hibernate做一些实际的事情再来分享更深入的东西。
Subscribe via RSS