85-002-2 搭建Hibernate开发环境

来源:互联网 发布:三级域名 新网 编辑:程序博客网 时间:2024/06/05 07:59
图文版:http://note.youdao.com/yws/public/redirect/share?id=abc20790e48da5130e227d9390e4df92&type=false
资源文件下载 https://yunpan.cn/OcRaTMHR3NWIIf  访问密码 4b2c


2.1 定义配置文件,同样的通过buildpath来配备相关的jar包 hibernateX.XX.jar(在一般的公司里面,jar包一般不需要你配置,他们都会放到maven伺服里面);
    因为要牵扯到逆向工程(也就是通过数据表生成POJO类),所以需要进行相关设置:
    首先建立一个mysql数据库的连接,建立DB browser的连接
  在buildpath中的userLib里面添加hibernate的jar包之后,然后在此项目中添加hibernate的配置文件,通过下图的向导完成;
    在配置向导中注意图中的两个选项要勾上 ;

    因为之前已经建立了Database driver了,所以这里直接选择就可以了;

    之前已经通过buildpath配置了自己提供的jar包,所以这里也不需要选了; 





以上的配置步骤完成后最终目的只是要生成所需要的HibernateSessionFactory和hibernate.cfg.xml文件,这些数据专门保存在hibernate.cfg.xml文件中


<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/shop</property>
        <property name="connection.username">zz</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="myeclipse.connection.profile">mysql</property>

    </session-factory>

</hibernate-configuration>
    通过buildpath添加Mysql驱动包 ;
 2. 逆向生成modal和ORM映射文件;
    首先创建一个数据库脚本 
类别表.sql
DROP DATABASE IF EXISTS shop ;
CREATE DATABASE shop DEFAULT CHARACTER SET utf8 ;
USE shop ;
DROP TABLE IF EXISTS category ;

CREATE TABLE category(
    id INT NOT NULL AUTO_INCREMENT,
    type VARCHAR(20) , -- 类别名称
    hot BOOL DEFAULT false ,
    PRIMARY KEY(id)
) ;

    直接在利用myEclipse工具执行sql语句
    生成表之后,通过逆向工程--通过表生成modal和映射文件 ;
    完成以上步骤之后,通过此逆向过程,工具自动生成pojo类Category.java以及 ORM的配置文件Category.hbm.xml,
同时工具自动在hibernate总配置文件hibernate.cfg.xml生成一个节点
    <mapping resource="cn/it/shop/modal/Category.hbm.xml" />
3. 以上步骤只是搭建了hibernate环境,但是还没有整合hibernate与spring ;
    建立一个service接口,放到cn.it.shop.service包中,用来测试hibernate ;
package cn.it.shop.service;

import cn.it.shop.modal.Category;

public interface CategoryService {
    public void save(Category category) ;
}

建立一个实现上述接口的service,放到cn.it.shop.service.impl包中,用来测试hibernate 
 public class CategoryServiceImpl implements CategoryService {
    public void save(Category category) {
        // 通过工具类HibernateSessionFactory获取session
        Session session = HibernateSessionFactory.getSession(); 
        try{
            //手动来设置事务提交getTransaction的意思即为手动获得事务权
            session.getTransaction().begin();
            //执行业务逻辑
            session.save(category) ;
            //执行手动提交
            session.getTransaction().commit();
        }catch(Exception e){
            //只要出现了异常,就让事务回滚
            session.getTransaction().rollback();
            throw new RuntimeException(e) ;
        }finally{
            //末后手动释放资源
            HibernateSessionFactory.closeSession();
        }
    }

}
    为此实现类建立一个配置文档applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <!-- 因为hibernate还没有与spring发生整合,就没有注入的方式,所以需要再配置文件中搞一个bean的方式来生成对象。 -->
    <!-- 也因为没有与spring整合,没有注入依赖所以还可在SSHTest类中直接new一个对象,此时配置文件中的bean也就可以免掉了。 -->
    <!-- <bean id="categoryService" class="cn.it.shop.service.categoryServiceImpl">
    </bean> -->
</beans>
    注意如果因为之前工具配置问题出现了applicationContext-public.xml文件中有其他bean节点时,请删除,只保留Date的bean节点
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <bean id="date" class="java.util.Date"/>
</beans>
 然后开始进行测试,直接在之前的SSHTest.java中进行代码编写
@Test   
    //测试hibernate的开发环境,因为还没有进行框架整合,
    //此时还不能利用@Resource的依赖注入,可以直接new 一个对象 ,如果new的话就不需要
    //配置xml文档
    public void hibernate(){
        CategoryService categoryService = new CategoryServiceImpl() ;
        categoryService.save(new Category("老人休闲",true)) ;
    }
    然后对SSHTest.java类鼠标右键选择JUnit测试。
   如果一开始测试会出现异常: No CurrentSessionContext configured  请在hibernate.cfg.xml文件中加入一句:
<property name="current_session_context_class">thread</property>
    并且把J2EE 6改为版本J2EE 5就能通过JUnit测试了 ;
 4.以上的测试,通过创建一个service,然后在里面new一个对象在通过hibernate存入数据库中 ,在J2EE6中如果出现
Unable to get the default Bean Validation Factory。解决办法是删除掉J2EE6类库中的jar包bean-validator.jar或者直接用J2EE5的版本或者是在配置文件中加入一个元素 ;
    hibernate.cfg.xml
<property name="javax.persistence.validation.mode">none</property>
小结:
    hibernate中每个session在一创建完毕,就会放到当前的线程中去,所以要取的session直接在threadLocal中get()取得 ;
    在hibernate中逆向工程的定义:通过表生成映射文件和modal ;
0 0
原创粉丝点击