一、hibernate是什么?
关于hibernate的定义, 大多时候看到这样一句话: Hibernate是一个基于“元数据”的轻量级的ORM框架。先解释一下元数据和ORM。
元数据(Metadata):描述数据的数据,对数据及信息资源的描述性信息。
ORM(Object Relation Mapping):对象关系数据库的映射,也就是说将我们程序中的实体(bean)和数据库中的表进行映射。
hibernate的作用:Hibernate将我们的数据库表和程序的实体类进行映射,对数据的操作进行了封装,使我们不需要对数据库知识很了解,面向对象编程就可以了,这样大大提高了我们的编程效率。
二、搭建hibernate环境
1.新建一个工程
首先新建一个Dynamic Web Project工程,导入jar包(以hibernate4..2为例)。导入hibernate-release-4.2.21.Final的以下jar包:
- lib\required下的所有jar(必须)。
- 然后导入lib\optional\c3p0文件夹中的c3p0-0.9.1.jar(数据源连接池组件)。
- 然后导入lib\optional\ehcache文件夹中的Hibernate-ehcache-4.2.21.final.jar(缓存组件)
- 数据库驱动jar包。根据数据库类型选择,这里我使用的是oracle数据库,导入的是ojdbc14.jar。
- (可选)commons-logging-1.0.4.jar , log4j-1.2.11.jar(日志输出组件)
- (可选)dom4j-1.6.1.jar(XML解析)
新建一个jdbc.properties文件
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
jdbc.username=sm
jdbc.password=sm
新建完成如下图
2.引入配置文件
(1)首先建立hibernate.cfg.xml,如下是一个简单的hibernate.cfg.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配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!--Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--设置数据库的连接url:jdbc:oracle:thin:@localhost:port:sid,其中localhost表示访问地址,此处为本机,port是端口,sid是数据库名-->
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:orcl</property>
<!--连接数据库的用户名、密码-->
<property name="hibernate.connection.username">sm</property>
<property name="hibernate.connection.password">sm</property>
<!--程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句,开发时设置为true。项目部署后可以设置为false,提高运行效率-->
<property name="hibernate.show_sql">true</property>
<!--格式化SQL语句,便于查看-->
<property name="hibernate.format_sql">true</property>
<!-- 指定映射文件 -->
<mapping resource="com/main/entity/Userinfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(2)然后创建一个log4j.properties,下面是配置内容
#debug info error
log4j.rootLogger=error,A1
#Output to the console
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Output to the file
#log4j.appender.A1=org.apache.log4j.FileAppender
#log4j.appender.A1.File=d:/log.txt
#log4j.appender.A1.layout=org.apac he.log4j.SimpleLayout
#Style is PatternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=>>> %d %5p [%t] (%F:%L) - %m%n
#log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
(3)生成实体类和hbm.xml文件
在这里我是通过先在数据库建表,然后再eclipse中用hibernatetools逆向生成实体类和映射文件如下。(以userinfo为例)
public class Userinfo implements java.io.Serializable {
private BigDecimal id;
private String name;
private String sex;
private Date birthday;
private String department;
private String phone;
public Userinfo() {
}
public Userinfo(BigDecimal id) {
this.id = id;
}
public Userinfo(BigDecimal id, String name, String sex, String phone) {
this.id = id;
this.name = name;
this.sex = sex;
this.phone = phone;
}
public BigDecimal getId() {
return this.id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
hbm.xml文件:
<?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">
<!-- Generated 2017-7-25 15:56:24 by Hibernate Tools 4.3.1.Final -->
<hibernate-mapping>
<class name="com.main.entity.Userinfo" table="USERINFO" schema="LP" optimistic-lock="version">
<id name="id" type="big_decimal">
<column name="ID" precision="22" scale="0" />
<generator class="assigned" />
</id>
<property name="name" type="string">
<column name="NAME" length="50" />
</property>
<property name="sex" type="string">
<column name="SEX" length="50" />
</property>
<property name="phone" type="string">
<column name="PHONE" length="50" />
</property>
</class>
</hibernate-mapping>
(4)编写测试类
public class Client {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory = cfg.buildSessionFactory();
//取得session
Session session = null;
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
Userinfo userinfo = new Userinfo();
userinfo.setId(new BigDecimal(2));
userinfo.setName("张三");
userinfo.setPhone("11111111");
String date1 = "1994-06-10";
userinfo.setSex("男");
//保存Userinfo对象
session.save(userinfo);
//提交事务
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally {
if (session != null) {
if (session.isOpen()) {
//关闭session
session.close();
}
}
}
}
}
(5)结果
如下图所示,已经将数据存储到表userinfo表中:
以上就是初步完成一个hibernate的步骤,其中log4j.properties并不是hibernate环境必须的,但是为了之后的框架整合,可以先试着尝试一下在框架中使用日志。