hibernate学习笔记(一)

一、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.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环境必须的,但是为了之后的框架整合,可以先试着尝试一下在框架中使用日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值