基本确定了,一个月后也就是在2014年的开端,我将离开这个公司。

所以我大概还有30个学时。

45.1 你需要一个数据库

首先,必须有一个试验用的数据库,这里我们使用MySQL.

尽管书中的说明是使用ANT, 我这里还是采用MAVEN来管理。

package mike.weather.hibernate;

public class HelloHibernate {

    public static void main(String[] args) {
        Message message = new Message("Hello Hibernate!");
        System.out.println(message.getText());
    }
}

 

啥都不多说,先来个Hello Hibernate! 请个安。

然后MySql 就已经装好了,在我的破机器上比SQL Server 安装快多了 - -。

 

45.2 然后你需要一个XML 映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2013-11-19 20:21:23 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="mike.weather.hibernate.Message" table="MESSAGE">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <one-to-one name="nextMessage" class="mike.weather.hibernate.Message"></one-to-one>
        <property name="text" type="java.lang.String">
            <column name="TEXT" />
        </property>
    </class>
</hibernate-mapping>

这里我们使用eclipse 的hibernate 插件来帮助我们自动生成映射文件,当然也可以直接从数据库生成这一切,这个后面再说。

装这个插件的时候,Maven 居然崩溃了,好像装上Jboss Tools 后又恢复正常了,JBoss 是啥?

45.3 Maven Dependency

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.9</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.4.GA</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.14</version>
        </dependency>

    </dependencies>

开源的悲剧之处在于各种jar 包的版本实在是太多了。

45.4 Hibernate 配置和启动

1 构建SessionFactory

sessionFactory = new Configuration().configure().buildSessionFactory();

new Configuration() 先在classpath 的根目录搜索hibernate.properties 文件。

.configure() 的时候,又搜索一遍hibernate.cfg.xml, 如果没有就抛出异常。

当然也可以用参数的形式指定位置。

同时在.buildSessionFactory() 之前也可以显示的自己构造。

 

贴上配置文件,然后不解释。

<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <property name="hibernate.connection.driver_class">org.mysql.jdbcDriver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>

        <!-- SQL to stdout logging <property name="show_sql">true</property> <property
            name="format_sql">true</property> <property name="use_sql_comments">true</property> -->

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <mapping resource="mike/weather/hibernate/Message.hbm.xml" />

    </session-factory>
</hibernate-configuration>

 

45.5 数据库连接池

1 新数据库连接很贵 2 维护闲置的连接很贵 3 连接驱动语句也很贵

使用Hibernate 后

Hibernate 是一个插件架构,允许任何连接池软件整合。然后对于C3P0 的支持是和Hibernate 捆绑在一起的,

所以C3P0 只是一个捆绑好的连接池管理应用而已,你随时可以自己替换它。

配置文件到此告一个段落,接下去是SessionFactory

45.6 SessionFactory

一般来说,SessionFactory 应该在应用程序初始化期间被实例化一次。

这个东西如何放和访问呢,高级的来说可以用JNDI 和JMX. 当时我们这里用一个静态的全局变量和静态的初始化。

这个辅助类在没有Java EE 服务的普通Java 应用程序中,是Hibernate 启动的一种常用模式。

45.7 启用日志和统计

Hibernate 通过Apache 的 commons-logging 输出日志到Apache Log4j.

当然,你也需要一个配置文件log4j.properties

Java Hour 45 Hibernate ( 2 )的更多相关文章

  1. java数据类型,hibernate数据类型,标准sql数据类型之间的对应表

    Hibernate API简介 其接口分为以下几类: l         提供访问数据库的操作的接口: l         用于配置Hibernate的接口: l         回调接口 l     ...

  2. Java EE 之 Hibernate异常总结【4】org.hibernate.exception.SQLGrammarException: could not execute statement

    本质原因:配置的Java Bean,由Hibernate自动产生的SQL语句中有语法错误 原因如下: 情况1.存在字段名/表名与数据库关键字冲突 情况2.MySQL5.0以后与MySQL5.0以前事务 ...

  3. java框架篇---hibernate入门

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...

  4. -java转json hibernate懒加载造成的无限递归问题

    1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系. JoinColumn(name="pid") 2. 在保存数据时,总是先保存的 ...

  5. Manning Java Persistence with Hibernate & hibernate_in_action

    Manning | Java Persistence with Hibernatehttps://www.manning.com/books/java-persistence-with-hiberna ...

  6. Java Data JPA +hibernate 保存或者是查询遇到的坑

    由于项目需求,接触了Java Data JPA +hibernate,它的调用方式是controller调用service,service有实现的接口serviceimpl,serviceimpl调用 ...

  7. Java EE 之 Hibernate异常解决:org.hibernate.exception.SQLGrammarException: could not execute statement

    本质原因:配置的Java Bean,由Hibernate自动产生的SQL语句中有语法错误 原因如下: 情况1.存在字段名/表名与数据库关键字冲突 情况2.MySQL5.0以后与MySQL5.0以前事务 ...

  8. Java Persistence with Hibernate

    我们在Java中谈到持久化时,一般是指利用SQL在关系数据库中存储数据. ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系, 框架据此将实体对象 ...

  9. [Java面试八]Hibernate总结以及在面试中的一些问题.

    1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. ②.Hiber ...

随机推荐

  1. CSS 仿Excel表格功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Shell脚本获得变量值作为新变量一部分的值

    最近使用shell写一个发布脚本时,由于shell编程是边学便用的缘故,经验不足,中间遇到一个问题,一个变量的值作为一个新变量的一部分,而我要根据变量获得新变量的值,以前没有遇到过.网络搜索一番,最后 ...

  3. [原] Android持续优化 - 提高流畅度

    一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...

  4. 2000多万个微信号被封全面禁止"集赞" 微信雷霆行动这次玩真的

    微信雷霆行动自年初启动了打击网络黑色产业链以来,微信累计封停了2000万个招嫖账号,3万个假货公众账号,切实保护用户利益.你曾经中过招吗?Yes or No?说说你的看法吧. 同时,微信从9日起开始升 ...

  5. cocos基础教程(1)Mac环境下搭建

    下面主要介绍cocos2d-x环境的设置以及android的环境搭建 1.下载cocos2d-x 3.0正式版      http://www.cocos2d-x.org/download 2.下载a ...

  6. xcode注释

    新开的项目需要先开发iOS版本,所以又把好久没写的iOS捡起来了,之前都是手动注释,最近是越来越懒了,所以在网上找了一个自动注释的插件,啊哈,其实有时候还真的挺怀念用Eclipse的时候,不过不用羡慕 ...

  7. ios流媒体

    http://my.oschina.net/CgShare/blog/302303 渐进式下载(伪流媒体) 介于下载本地播放与实时流媒体之间的一种播放形式,下载本地播放必须全部将文件下载完成后才能播放 ...

  8. [BZOJ3872][Poi2014]Ant colony

    [BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...

  9. Dynamic Morphing Square(动态变形矩阵)

    题目描述: 解题思路: 先对输入的N进行判断,是否不小于3,如果小于3,需要继续输入一个新的数,知道输入的N比3大. 第一个打印的矩阵,*号为最外面一圈,其余全为-. 第二个打印的矩阵,*号向内缩减了 ...

  10. Dmaven.multiModuleProjectDirectory system propery is not set.

    eclipse中使用maven插件的时候,运行run as maven build的时候报错-Dmaven.multiModuleProjectDirectory system propery is ...