hibernate学习笔记(一)

来源:互联网 发布:mac系统怎么重装win10 编辑:程序博客网 时间:2024/06/08 14:18

一、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包:

  1. lib\required下的所有jar(必须)。
  2. 然后导入lib\optional\c3p0文件夹中的c3p0-0.9.1.jar(数据源连接池组件)。
  3. 然后导入lib\optional\ehcache文件夹中的Hibernate-ehcache-4.2.21.final.jar(缓存组件)
  4. 数据库驱动jar包。根据数据库类型选择,这里我使用的是oracle数据库,导入的是ojdbc14.jar。
  5. (可选)commons-logging-1.0.4.jar , log4j-1.2.11.jar(日志输出组件)
  6. (可选)dom4j-1.6.1.jar(XML解析)

新建一个jdbc.properties文件

jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcljdbc.username=smjdbc.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 errorlog4j.rootLogger=error,A1#Output to the consolelog4j.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.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=>>> %d %5p [%t] (%F:%L) - %m%n#log4j.appender.A1.DatePattern='.'yyyy-MM-ddlog4j.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环境必须的,但是为了之后的框架整合,可以先试着尝试一下在框架中使用日志。

原创粉丝点击