码迷,mamicode.com
首页 > Web开发 > 详细

XML方式下的Hibernate的配置问题

时间:2016-08-10 21:02:22      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

废话不多说,直接先来看一波代码:

实体类:

com.hbm.entity包下的Log实体类(Log.java):

package com.hbm.entity;

import java.io.Serializable;
import java.util.Date;
/**日志实体类**/
public class Log implements Serializable{
    
    private static final long serialVersionUID = 2823717339283174040L;
    
    private long id;
    
    private String content;//日志内容
    
    private String creator;//日志创建者
    
    private Date createDate;//日志生成时间
    
    public Log() {
        // TODO Auto-generated constructor stub
    }
    
    public Log(String content, String creator, Date createDate) {
        super();
        this.content = content;
        this.creator = creator;
        this.createDate = createDate;
    }
    
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getCreator() {
        return creator;
    }

    public void setCreator(String creator) {
        this.creator = creator;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Log [id=").append(id).append(", content=").append(content).append(", creator=").append(creator)
                .append(", createDate=").append(createDate).append("]");
        return builder.toString();
    }
}


/**************************************************************************************/

com.hbm.entity包下的Log实体类XML文件(Log.hbm.xml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping SYSTEM
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!-- 类名.hbm.xml 对象关系映射文件,实体类到表的映射 -->
<hibernate-mapping package="com.hbm.entity">
    <!-- 类名映射成表名 -->
    <class name="Log" table="hbm_log">
        <!-- 对象标识映射成主键id -->
        <!-- 如果映射的列名和属性名是一致的,那么column可以省略不写 -->
        <id name="id" column="hid">
            <!-- 配置序列的生成策略 -->
            <generator class="sequence">
                <!-- 配置序列的相关参`数 -->
                <!-- 指明序列的名称,如果不指明,那么hibernate会默认分配一个名 -->
                <param name="sequence">hbm_log_id</param>
                <!-- 指明序列的起始值 -->
                <param name="parameters">start with 1</param>
            </generator>
        </id>
        <!-- 配置属性映射到列 ,属性名若和列名一致,则column可以省略不写
               column是用来给列取名字的-->
        <property name="content" not-null="true"></property>
        <property name="creator"></property>
        <property name="createDate" type="date" column="log_date"></property>
    </class>
</hibernate-mapping>

/**************************************************************************************/

src根目录下的hibernate的配置文件(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>
  <!-- 配置SessionFactory(相当于一个数据源,重量级的对象) -->
  <session-factory>
        <!-- 配置数据库相关的连接信息 -->
       <property name="connection.driver_class">
                   oracle.jdbc.driver.OracleDriver
       </property>
        
        <property name="connection.url">
                   jdbc:oracle:thin:@127.0.0.1:1521:XE
        </property>
        
        <property name="connection.username">jsd1606</property>
        
        <property name="connection.password">jsd1606</property>
        
        <!-- 设置c3p0连接池 -->
        <!-- 最大容量 -->
        <property name="c3p0.max_size">20</property>
        <!-- 最小容量 -->
        <property name="c3p0.min_size">5</property>
        <!-- 最大语句对象数量 -->
        <property name="c3p0.max_statements">50</property>
        <!-- 超时时间 -->
        <property name="c3p0.timeout">5000</property>
        <!-- 检测超时时间间隔 -->
        <property name="c3p0.idle_test_period">2000</property>
        <!-- 容量扩容增量 -->
        <property name="c3p0.acquire_increment">5</property>
        
        <!-- 配置数据库方言 -->
        <property name="dialect">
                org.hibernate.dialect.Oracle10gDialect
        </property>
        
        <!-- 其他配置 -->
        <!-- create代表每次都先删除,再创建,会造成数据表中的数据丢失 -->
        <!-- update如果无则创建,有则更新 -->
        <property name="hbm2ddl.auto">update</property>
      
      <!-- 是否在控制台输出sql语句 -->
      <!-- 产品提交的时候,一定要将此句注释掉 -->
      <property name="show_sql">true</property>
      <!-- 格式化sql语句的显示 -->
      <property name="format_sql">true</property>
      
      <!-- 注册ORM映射文件 -->
      <mapping resource="com/hbm/entity/log.hbm.xml" />
  </session-factory>
</hibernate-configuration>

/**************************************************************************************/

com.hbm.util包下的hiberinate工具类(HibernateUtil.java):

package com.hbm.util;

import javax.management.RuntimeErrorException;

import org.hibernate.HibernateException;
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 {
    private static SessionFactory sf = null;
    
    /**
     * 通过静态代码块来创建SessionFactory
     */
    static{
                try {
                    //1.启动hibernate.cfg.xml配置文件,通过Configuration类
                    Configuration cfg = new Configuration();
                    //2.调用configure()方法来默认去加载src根目录下面的hibernate.cfg.xml文件
                    //注意:configure(String path);//重载方法,可以用来加载指定目录下面的的配置文件.
                    cfg.configure();
                    
                    //3.创建SessionFactory(充当数据源的一个代理,重量级的对象)
                    //通常一个数据库只需要配置一个SesisonFactory对象.通过这个
                    //对象,可以获取Session(Connection+Cache)
                    
                    //3-1.hibernate3.x创建方式(已经过时了)
                    //SessionFactory sf = cfg.buildSessionFactory();
                    
                    //3-2.hibernate4.x创建方式
                    ServiceRegistry sr = new StandardServiceRegistryBuilder()
                                                            .applySettings(cfg.getProperties())
                                                            .build();
                    sf = cfg.buildSessionFactory(sr);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
    }
    
    /**
     * 获取Session
     */
    public static Session getSession() throws HibernateException{
        return sf==null?null:sf.openSession();
    }
    
    /**
     * 关闭session
     */
    public static void closeSession(Session ses){
        if(null!=ses){
            ses.close();
        }
    }
}

/**************************************************************************************/

com.hbm.dao包下的接口(ILogDao.java):

package com.hbm.dao;

import com.hbm.entity.Log;

public interface ILogDao {
    /**
     * 保存一个日志对象
     */
    public void save(Log log);
    
    /**
     * 根据id查找日志对象
     */
    public Log getById(long id);
    
    /**
     * 根据id删除一个log日志对象
     */
    public void delById(Log log);
    
    /**
     * 根据id更新一个log日志对象
     */
    public void updateById(Log log);
}
/**************************************************************************************/

com.hbm.dao.impl包下的接口实现类(LogDaoImpl.java):

package com.hbm.dao.impl;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import com.hbm.dao.ILogDao;
import com.hbm.entity.Log;
import com.hbm.util.HibernateUtil;

public class LogDaoImpl implements ILogDao{

    @Override
    public void save(Log log) {

        Session ses = null;
        Transaction tx = null;
        try {
             //ses = sf.openSession();
             ses = HibernateUtil.getSession();
            //5.开启事务(hibernate中的事务是默认关闭的)
            tx = ses.beginTransaction();
            
            //执行对象的CRUD操作...
            ses.save(log);
            
            //提交事务
            tx.commit();
        } catch (HibernateException e) {
            if(null!=tx){
                tx.rollback();//回滚事务
            }
            e.printStackTrace();
        }finally{
            //关闭session
            /*if(null!=ses){
                ses.close();
            }*/
            HibernateUtil.closeSession(ses);
        }
    }

    @Override
    public Log getById(long id) {
        Log log = null;
        
        Session ses = null;
        Transaction tx = null;
        try {
            //1.获取Session
            ses = HibernateUtil.getSession();
            //2.开启事务
            tx = ses.beginTransaction();
            //3.执行具体的业务操作CRUD
            log = (Log) ses.get(Log.class, id);
            //4.提交事务
            tx.commit();
        } catch (HibernateException e) {
            //回滚事务
            if(null!=tx){
                tx.rollback();
            }
            e.printStackTrace();
        }finally {
            //5.关闭session
            HibernateUtil.closeSession(ses);
        }
        return log;
    }

   @Override
    public void delById(Log log) {
        
        Session ses = null;
        Transaction tx = null;
        try {
            //1.获取Session
            ses = HibernateUtil.getSession();
            //2.开启事务
            tx = ses.beginTransaction();
            
            ses.delete(log);
            
            tx.commit();
        } catch (HibernateException e) {
            if(null!=tx){
                tx.rollback();//回滚事务
            }
            e.printStackTrace();
        }finally{
            //关闭Session连接
            HibernateUtil.closeSession(ses);
        }
        
    }

    @Override
    public void updateById(Log log) {
        Session ses = null;
        Transaction tx = null;
        try {
            //1.获取Session
            ses = HibernateUtil.getSession();
            //2.开启事务
            tx = ses.beginTransaction();
            
            ses.update(log);
            
            tx.commit();
        } catch (HibernateException e) {
            if(null!=tx){
                tx.rollback();//回滚事务
            }
            e.printStackTrace();
        }finally{
            //关闭Session连接
            HibernateUtil.closeSession(ses);
        }
        
    }
}
/**************************************************************************************/

单元测试:

package com.hbm.dao;

import java.util.Date;

import org.junit.Test;

import com.hbm.dao.impl.LogDaoImpl;
import com.hbm.entity.Log;

public class TestILogDao {
    
    private ILogDao dao = new LogDaoImpl();
    
   @Test
    public void testdelById(){
        dao.delById(dao.getById(1L));
    }
    
    @Test
    public void testupdateById(){
        Log log = dao.getById(2L);
        log.setContent("xml测试");
        log.setCreator("iyl");
        log.setCreateDate(new Date());
        dao.updateById(log);
    }
}

XML方式下的Hibernate的配置问题

标签:

原文地址:http://www.cnblogs.com/yunlei0821/p/5758062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!