Java Hour 45 Hibernate ( 2 )

基本确定了,一个月后也就是在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 安装快多了 - -。

image

 

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() 之前也可以显示的自己构造。

image 

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

<?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 连接驱动语句也很贵

image

使用Hibernate 后

image

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

你可能感兴趣的:(Hibernate)