Hibernate 4.3.11快速入门案例

来源:互联网 发布:正在安装windows卡住 编辑:程序博客网 时间:2024/06/05 11:35

Hibernate 4.3.11快速入门案例

  • Hibernate 4311快速入门案例
    • 导包列表
    • 映射文件userhbmxml
    • 核心配置文件Hibernatecfgxml
    • Hibernate工具类HibernateUtiljava
    • 功能测试增删改查

最近学习Hibernate的时候,教程是以Hibernate3为背景讲的,由于教程比较老,但是又讲的很好,反正原理的东西相通,就决定自己选Hibernate4为实践。

在抽取工具类的时候,遇到一系列问题,因为获取SessionFactory的方法发生了一些变化,并且按照官方文档中的示例居然也获取不到SessionFactory。所以自己在网上找了很久解决方案。

我的环境:JDK8 + Hibernate4.3.11 + c3p0 + MySQL,经过测试所有功能均使用正常。
但是无法排除下面这个错误:
INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException

下面是一个完整的Hibernate4.3.11的工具类,配置文档,映射文档的信息。

导包列表

我在配置c3p0时少导了个包导致出现奇怪的异常,下面这些包几乎都是必备的:
lib.JPG

映射文件:user.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.lim.user.domain">    <class name="User" table="user">        <!-- 配置唯一标识 -->        <id name="userID" column="userID">            <generator class="native"></generator>        </id>        <!-- 配置属性映射 -->        <property name="username" column="username" type="java.lang.String" length="30"/>        <property name="logonname" column="logonname" type="java.lang.String" length="30"/>        <property name="logonpassword" column="logonpassword" type="java.lang.String" length="30"/>        <property name="sex" column="sex" type="java.lang.String" length="10"/>        <property name="telephone" column="telephone" type="java.lang.String" length="20"/>    </class></hibernate-mapping>

核心配置文件: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-configuration>    <session-factory>        <!-- 配置数据库连接的基本信息: -->        <property name="hibernate.connection.driver_class">            com.mysql.jdbc.Driver        </property>        <property name="hibernate.connection.url">            jdbc:mysql:///javaee_hibernate        </property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">root</property>        <!-- 配置Hibernate方言,用于针对不同数据库生成不同底层SQL语句 -->        <property name="hibernate.dialect">            org.hibernate.dialect.MySQLDialect        </property>        <!-- 显示SQL -->        <property name="show_sql">true</property>        <!-- 格式化SQL -->        <property name="hibernate.format_sql">true</property>        <!-- 关闭事物自动提交 -->        <property name="hibernate.connection.autocommit">false</property>        <!-- hbm:映射 to DDL -->        <!-- update:如果数据库中没有表,创建一个新的表,如果有,直接使用这个表,并可以更新表的结构。 -->        <property name="hibernate.hbm2ddl.auto">update</property>        <!-- C3P0连接池设定-->        <!-- 使用c3po连接池  配置连接池提供的供应商-->        <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider                                                                                                                                        </property>        <!--在连接池中可用的数据库连接的最少数目 -->        <property name="c3p0.min_size">5</property>        <!--在连接池中所有数据库连接的最大数目  -->        <property name="c3p0.max_size">20</property>        <!--设定数据库连接的过期时间-->        <!--以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->        <property name="c3p0.timeout">120</property>         <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->        <property name="c3p0.idle_test_period">3000</property>        <mapping resource="cn/lim/hibernate4/demo/user.hbm.xml" />    </session-factory></hibernate-configuration>

Hibernate工具类:HibernateUtil.java

package cn.lim.hibernate4.utils;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;public class HibernateUtil {    // 1.Hiberante框架加载核心配置文件(有数据库连接信息)    public static Configuration configuration;    public static SessionFactory sessionFactory;    public static ServiceRegistry serviceRegistry;    // 使用静态代码块初始化类 - 加载核心配置文件以及创建一个sessionFactory    static{        configuration = new Configuration().configure();        serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();        sessionFactory = configuration.buildSessionFactory(serviceRegistry);    }    public static Session openSession(){        return sessionFactory.openSession();    }}

功能测试,增删改查

package cn.lim.hibernate4.demo;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import cn.lim.hibernate4.utils.HibernateUtil;import cn.lim.user.domain.User;public class HibernateTest {    @Test    // 添加记录操作    public void test1() {        // 创建一个持久化对象        User user = new User();        user.setUsername("超级管理员");        user.setLogonname("admin");        user.setLogonpassword("123");        user.setTelephone("110");        user.setRemark("这是超级管理员帐号");        // 获取一个session        Session session = HibernateUtil.openSession();        // 创建一个事务        Transaction tx = session.beginTransaction();        // 操作:把user存入数据库        session.save(user);        // 事物提交        tx.commit();        // 释放资源        session.close();    }    @Test    // 查询操作    public void test2() {        // 获取session        Session session = HibernateUtil.openSession();        // 获取事务        Transaction tx = session.beginTransaction();        // 查询操作-get方法        User user1 = (User) session.get(User.class, 2);        // 查询操作-load方法        User user2 = (User) session.load(User.class, 1);        System.out.println("user1: " + user1);        System.out.println("user2: " + user2);        // 事务提交        tx.commit();        // 释放资源        session.close();    }    @Test    // 修改记录    public void test3() {        // 获取session        Session session = HibernateUtil.openSession();        // 获取事务        Transaction tx = session.beginTransaction();        // 操作:修改数据        User user = new User();        user.setUserID(1);        user.setUsername("张三");        session.update(user);        // 事务提交        tx.commit();        // 释放资源        session.close();    }    @Test    // 删除记录    public void test4() {        // 获取session和事务        Session session = HibernateUtil.openSession();        Transaction tx = session.beginTransaction();        // 操作:删除第一条记录 - 自动方式(先查询再删除)        User user = (User) session.get(User.class, 1);        session.delete(user);        // 事务提交,释放资源        tx.commit();        session.close();    }}
0 0
原创粉丝点击