记得有一次,一个女孩子给我打电话过来。
她是某个公司的人力资源部的,当时我乱投简历,所以就接到了这么一个电话。
于是,聊了一会后。
她问我:“你了解三大框架么?”
我略带怒意的说:“三大框架,你得告诉我什么框架,我就知道,你说个三大框架,我怎么知道是什么框架?”
她好像感到很不好意思的说:“恩...”
工作当然没有着落
不过之后我知道了,所谓的三大框架,就是SSH。
而我这里说的就是H。
简单的说,H是对JDBC进行的封装,其实在学习JDBC的时候,我就觉得JDBC很不错,我们可以通过修改业务层,无需更改数据层就能够完成不同数据库的处理。
而hibernate则是一个对JDBC进行了封装的框架。
比如保存一个数据,当你将一系列的配置做好之后,你就可以通过一个save方法,完成数据的保存。而无需自己写insert into table (.....) values(.....)。
当然,作为初学者这理解还是很浅显的。
下面,我就在自己的eclipse上,完成第一个hiberate程序的编写。
这个程序的功能很简单,就是往数据库的表里查入一条数据。
我这里使用的mysql数据库。
首先,我们需要在数据库里创建一个表。
create table employee(
id int primary key auto_increment,
name varchar(10),
email varchar(20),
hiredate date)
我这里是在jdbc数据库里创建的表。
第二步,则是设计javabean。
package cn.dzr.domain;
public class Employee
{
Integer id;
String name;
String email;
java.util.Date hiredate;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public java.util.Date getHiredate()
{
return hiredate;
}
public void setHiredate(java.util.Date hiredate)
{
this.hiredate = hiredate;
}
}
这里很简单,将数据库里的表的列属性,和javabean的属性进行一一对应。
接着就是配置第一个xml,该XML的就是为了让数据库中的表和这个javabean进行匹配,具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.dzr.domain">
<class name="Employee" table="employee">
<id name="id" column="id" >
<generator class="identity"></generator>
</id>
<property name="name" column="name" not-null="false"></property>
<property name="email" column="email" not-null="false"></property>
<property name="hiredate" column="hiredate" not-null="false"></property>
</class>
</hibernate-mapping>
需要注意的一点,该XML的名字是为JAVABEAN的名字.hbm.xml,而其位置需要和JAVABEAN在同一个目录下。
里面的Id为主属性,而其他的property则是其他的属性。至于什么意思,相信大家一看就明白。
然后配置第二个XML,这个XML具有固定的名字,hibernate.cfg.xml
该文件,我就放在src的总目录下。
(这个XML的名字是可以变化的,但是一般不推荐如此做,其存放的具体路径,我也不确定。但这里并不追究这些,最主要的是让程序能够正常运行。
该文件的内容如下:
<?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://localhost/jdbc</property>
<property name="connection.username">root</property>
<property name="connection.password">abcd1234</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>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Names the annotated entity class -->
<mapping class="cn.dzr.domain.Employee" resource="cn/dzr/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
这里简单的分析下上面的XML。
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/jdbc</property>
<property name="connection.username">root</property>
<property name="connection.password">abcd1234</property>
这四行表示连接数据库的一些参数。第一行为数据库的驱动,我这里是使用的mysql,
第二,第三,第四则是数据库的路径,用户名,密码。
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Names the annotated entity class -->
<mapping class="cn.dzr.domain.Employee" resource="cn/dzr/domain/Employee.hbm.xml"/>
上面一行,让你在运行程序的时候,会在控制台输出你的SQL语句。
下面一行,则是表示对刚刚我们建立的XML进行操作。那个sersource里的内容,就是如此。
在这里,你需要导入MYSQL的JAR包。
最后,我们试图往数据库里插入数据。
package cn.dzr.view;
import java.util.Date;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.dzr.domain.Employee;
public class TestMain
{
public static void main(String[] args)
{
Configuration configuration = new Configuration().configure("/hibernate.cfg.xml");
//创建这个...
SessionFactory factory = configuration.buildSessionFactory();
//会话工厂,这里就是相当于JDBC的connection,也就是创建一个连接
org.hibernate.classic.Session session = factory.openSession();
Employee e1 = new Employee();
e1.setEmail("111@qq.com");
e1.setHiredate(new Date());
e1.setName("d11dddr");
Transaction transaction = session.beginTransaction();
//保存操作!!
session.save(e1);
transaction.commit();
session.close();
}
}
这里需要注意的一个问题就是事务,没有事务,就不能进行增加操作。(但是可以查询)
中间可能出现一些问题。
系统会提示一些错误,这个时候,应该是缺少ejb3,slf4j两个包。只要选择合适的(一般最新的就可以)的版本的包进行导入,程序便可正常的通过。