Hibernate学习笔记之基本配置详解

1.下载页面

http://in.relation.to/Bloggers/HibernateORM422FinalReleased

2.解压hibernate,将lib目录下面的required目录下所有的jar包拷贝到我们的应用中的类加载路径,如果是web应用,放在/WEB-INF/lib/ 下面

3.如果需要用到数据库源那么将c3p0也放在/WEB-INF/lib/ 下面

4.创建一个持久化的类。这个类的实例将会被hibernate映射到数据库中对应的实例:

 代码如下 复制代码

package org.Rudiment.hibernate;

public class News
{
    private Integer id;
    private String title;
    private String content;
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
   
}

5.配置News这个类专属的映射文件News.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">

<hibernate-mapping package="org.Rudiment.hibernate">
    <!-- 这个 News 类对应的表是 news_table -->
    <class name="News" table="news_table">
        <!-- 这个类中的 id 将作为标识符映射对应数据库中的主键 -->
        <id name="id">
            <column name="ID" />
            <generator class="native" />
        </id>
        <!-- 声明类 News 中的 title 将映射到数据库中 -->
        <property name="title" />
        <!-- 声明类 News 中的 content 将映射到数据库中 -->
        <property name="content" />
    </class>
</hibernate-mapping>

6.hibernate的框架配置  /WEB-INF/classes/hibernate.cfg.xml

 代码如下 复制代码

<!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>
    <!-- 配置数据库方言 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- 配置数据库的驱动 -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <!-- 配置数据库用户名 -->
    <property name="hibernate.connection.username">root</property>
    <!-- 配置数据库的密码 -->
    <property name="hibernate.connection.password">root</property>
    <!-- 配置数据库的url -->
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/failure</property>
    <!-- 配置数据池的最大容量 -->
    <property name="hibernate.c3p0.max_size">20</property>
    <!-- 配置数据池的最小容量 -->
    <property name="hibernate.c3p0.min_size">1</property>
    <!-- 配置数据链接的超时界限 -->
    <property name="hibernate.c3p0.timeout">5000</property>
    <!-- 在控制台显示后台是否打印执行的sql -->
    <property name="hibernate.show_sql">true</property>
    <!-- 是否以友好的格式显示打印的sql -->
    <property name="hibernate.format_sql">true</property>
    <!-- 打印一些辅助性的注释 -->
    <property name="hibernate.use_sql_comments">true</property>

    <property name="hibernate.c3p0.max_statements">100</property>
    <property name="hibernate.c3p0.idle_test_period">3000</property>
    <property name="hibernate.c3p0.acquire_increment">2</property>
    <property name="hibernate.c3p0.validate">true</property>
    <!-- 配置数据操作的方式 -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 将我们上面 News 的映射文件添加进来 -->
    <mapping resource="org/Rudiment/hibernate/News.hbm.xml" />
</session-factory>
</hibernate-configuration>

7.写一个类来作为测试:

 代码如下 复制代码

package org.Rudiment.hibernate;

import org.Rudiment.hibernate.News;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class NewsManager
{
    public static void main(String[] args)
    {
        //获取配置
        Configuration conf = new Configuration().configure();
        //获取ServiceRegistry
        ServiceRegistry  sr = new ServiceRegistryBuilder()
        .applySettings(conf.getProperties())
        .buildServiceRegistry();
        //配置我们的SessionFactory
        SessionFactory sf = conf.buildSessionFactory(sr);
        //获取我们的Session
        Session sess = sf.openSession();
        //开始我们的事务
        Transaction tx = sess.beginTransaction();
       
        News n = new News();
        n.setTitle("ITkezhan");
        n.setContent("IT客栈");
       
        //保存持久化对象
        sess.save(n);
        //提交事务
        tx.commit();
        //关闭Session
        sess.close();
        //关闭SessionFactory
        sf.close();
    }
}

8.运行一下 NewsManager 之后,可以看到hibernate数据库中多了一张表 news_table内容如下:(要事先在MySQL中创建hibernate这个数据库。不然的话并不会自动创建hibernate数据库)

 代码如下 复制代码

mysql> use hibernate;
Database changed
mysql> select * from news_table;
+----+---------------+-------------------------+
| ID |     title     |        content          |
+----+---------------+-------------------------+
|  1 |   ITkezhan    |         IT客栈          |
+----+---------------+-------------------------+
1 row in set (0.00 sec)

时间: 2024-09-21 22:04:32

Hibernate学习笔记之基本配置详解的相关文章

Symfony2学习笔记之模板用法详解_php实例

本文实例讲述了Symfony2学习笔记之模板用法.分享给大家供大家参考,具体如下: 我们知道,controller负责处理每一个进入Symfony2应用程序的请求.实际上,controller把大部分的繁重工作都委托给了其它地方,以使代码能够被测试和重用.当一个controller需要生成HTML,CSS或者其他内容时,它把这些工作给了一个模板化引擎. 模板: 一个模板仅仅是一个文本文件,它能生成任意的文本格式(HTML,XML,CSV,LaTex...).最著名的模板类型就是PHP模板了,可以

CDN学习笔记二(技术详解)

一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同好. 第一章    引言    "第一公里"是指万维网流量向用户传送的第一个出口,是网站服务器接入互联网的链路所能提供的带宽.这个带宽决定了一个 网站能为用户提供的访问速度和并发访问量.如果业务繁忙,用户的访问数越多,拥塞越严重,网站会在最需要向用户提供服务时失去用户.(还有"中

AngularJS学习笔记之依赖注入详解_AngularJS

     最近在看AngularJS权威指南,由于各种各样的原因(主要是因为我没有money,好讨厌的有木有......),于是我选择了网上下载电子版的(因为它不要钱,哈哈...),字体也蛮清晰的,总体效果还不错.但是,当我看到左上角的总页码的时候,479页....479....479....俺的小心脏被击穿了二分之一有木有啊,上半身都石化了有木有啊,那种特别想学但是看到页码又不想学的纠结的心情比和女朋友吵架了还复杂有木有啊,我平常看的电子书百位数都不大于3的好伐! 哎,原谅我吧,我应该多看几本

spring学习笔记(4)依赖注入详解

常用的注入方式有四种: 1. 属性注入 2. 构造方法注入 3. 工厂方法注入 4. 注解注入 下面先定义我们后面用到的POJO类: package test; public class User { private String name; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public St

Symfony2学习笔记之控制器用法详解_php实例

本文实例讲述了Symfony2控制器用法.分享给大家供大家参考,具体如下: 一个controller是你创建的一个PHP函数,它接收HTTP请求(request)并创建和返回一个HTTP回复(Response).回复对象(Response)可以是一个HTML页面,一个XML文档,一个序列化的JSON数组,一个图片,一个重定向,一个404错误或者任何你想要的内容.controller中可以包含任何渲染你页面内容的所需要的逻辑. 下面是一个controller最简单的例子,仅仅打印一个Hello w

Linux学习笔记防火墙Iptables使用详解

一.Iptables介绍   linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成.   netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集.   iptables 组件是一种工具,也称为用户空间,它使插入.修改和除去信息包过滤表中的规则变得容易.   二.Iptables结构 iptables -> Tables -> Chains -> Rules   tabl

Ruby学习笔记之gem 命令详解_ruby专题

ruby -v #查看ruby 版本 ruby -e ''require"watir"; puts Watir::IE::VERSION'' #查看watir版本 rvm list known #列出已知的ruby版本 rvm install 1.9.3 rvm use 1.9.3 | rvm use system rvm use 1.9.3 --default rvm list #列出本地ruby版本 rvm remove 1.9.2 具体详情见RVM实用指南  https://ru

PHP学习笔记之变量用法详解

一旦设置了某个变量,我们就可以在脚本中重复地使用它. PHP 中的所有变量都是以 $ 符号开始的. PHP的代码插入很直观,"<?php" 开始 "?>" 结束.   所有的变量以"$"开头,例如"$money".(定义符容易让人遐想)需要使用时,定义即可,可以省略对变量类型的定义,php的编译器会自动为我们选择的.   对于条件判断语句,php和c差不多.if(条件A){过程A}即可,还有就是else和elsei

学习笔记之MySQL触发器详解

创建触发器 创建只有一个执行语句的触发器 CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句其中,触发器名参数指要创建的触发器的名字 1.创建MySQL触发器: 语法:  代码如下 复制代码 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name  FOR EACH ROW  BEGIN  trigger_stmt  END:  CREATE TR