工程结构:

所有实验步骤:

建立java工程

1.导入包

2.建立一个对应与数据库的类Student。里面的属性和数据库中的字段对应。

3.在上面Student类所在的目录下建立映射文件。配置对象-关系映射文件:Student.hbm.xml //名称不确定,随意!最好放在bean中

<?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="com.huasoft.domain">

<!-- 不指定table默认以类为依据,创建student表 (第一个字母小写)-->
    <class name="Student">
        <id name="id" >
            <generator class="native"></generator>   <!-- 自动增长 -->
        </id>
        
        <property name="name" length="20" column="myname"></property>   <!--类的属性和数据库字段对应关系,默认不写column就以属性为数据库字段列-->
        <property name="sex"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>

4.在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-configuration>
    <session-factory >
        <!--指定方言  -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--指定数据库驱动  -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接url -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hbm_first</property>
        <!-- 指定数据用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 指定数据库密码 -->
        <property name="hibernate.connection.password">ai2212935</property>
        <!-- 中断输出sql语句 -->
        <property name="hibernate.show_sql">true</property>

<!-- 加载指定映射文件 -->
        <mapping resource="com/huasoft/domain/Student.hbm.xml"/>
        
    </session-factory>
    </hibernate-configuration>

5.引入mysql的驱动包,hibernate只能生成表,不能生成数据库,打开sql自己创建数据库。

6.建立一个类Client.java,用来生成表(读取配置文件,连接,)。
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

//生成表
public class Client {
    public static void main(String[] args){
        try {
            Configuration cfg=new Configuration().configure();
            //根据配置信息生成表的工具类
            SchemaExport export=new SchemaExport(cfg);
            //工具类产生表:第一个参数,创建表显示在控制台,第二个参数:允许将脚本配置导入数据库。
            export.create(true, true);
        } catch (Exception e) {

}        
    }
}

7.创建一个带有主函数类Test,用来对数据库进行操作,获取增删该查

i
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

import com.huasoft.domain.Student;

//对生成的数据库进行底层操作
public class Test {
    public static void main(String[] args) {

try {
            Configuration cfg=new Configuration().configure();//读取配置文件
            
            
            /**
             *  hibernate 4.0之后版本获取方式,使用带有参数的buildSessionFactory()获取sessionFactory对象
             */
            ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
            SessionFactory factory=cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());
            
            /**老版本获取sessionFactory对象,buildSessionFactory()
            SessionFactory factory=cfg.buildSessionFactory();
            */
            Session session=factory.openSession();
            
            
            Transaction tx=session.getTransaction();
            tx.begin();
            
            Student student=new Student();
            student.setAge(20);
            student.setName("艾广然 ");
            student.setSex("男");
            session.save(student);
            tx.commit();
            
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

7.单元测试(允许建立多个方法,每一个方法作为程序的运行接口,不再局限于main,做测试用):
引入架包junit.jar

为了区分,建立一个source src,建立一个com.huasoft.test包,包中的HbmTest类extends TestCase类 。
方法名必须以test开头,可以实现多个方法的测试。

由于我们不需要每次执行其中的方法都去建立一个SessionFactory,所以我们把
            Configuration cfg=new Configuration().configure();//读取配置文件
            SessionFactory factory=cfg.buildSessionFactory();//创建factory对象。
这两句话创建的factory在hbmUtil中单例模式建立,在HbmTest类中就不需要每次都创建对象了。

hbmUtil单例模式:
package com.huasoft.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

public class hbmUtil {
    private static final SessionFactory sesionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
        try {

/*
             *  4.0之后新版本获取方式。sessionFactory对象
             */
            Configuration cfg = new Configuration().configure();
            ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
            return cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());

/*
             * 老版本获取方式  sessionFactory对象
             * Configuration().configure().buildSessionFactory();
             */
        } catch (Throwable ex) {
            System.out.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

public static SessionFactory getSessionFactory() {
        return sesionFactory;
    }
}

HbmTest类中(对底层的操作):

import java.util.Iterator;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.huasoft.domain.Student;
import com.huasoft.util.hbmUtil;

import junit.framework.TestCase;

public class HbmTest extends TestCase {

//插入保存
    public void testSave(){
        SessionFactory factory=null;
        Session session=null;
        Transaction tx=null;

try {
            factory=hbmUtil.getSessionFactory();
            session=factory.openSession();
            
        
            tx=session.getTransaction();

//开启事物
            tx.begin();
            
            Student student=new Student();
            student.setAge(21);
            student.setName("艾广然 ");
            student.setSex("男");
            session.save(student);

//提交事物
            tx.commit();
            
            
        } catch (Exception e) {

try {
                tx.rollback();
            } catch (Exception e2) {
                e2.printStackTrace();
            }

e.printStackTrace();
        }finally{
            session.close();
        }
    }
    
    
    
    //查询某一个,使用get或者load方法
    public void testLoad(){

try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            
            
            //要加载的类型, 序列化(基本类型都实现了序列化,id)  
            Student student=(Student) session.load(Student.class, 1);
            System.out.println(student.getName()+"  "+student.getAge());

session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    
    //查询多个
    public void testQuery(){

try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            
            
            //操作的是对象 ,from 类名
            Query query=session.createQuery("from Student");
            List list=query.list();
            
            for (Iterator<Student> iterator = list.iterator(); iterator.hasNext();) {
                Student student = iterator.next();
                System.out.println(student.getName()+"  "+student.getAge());                
            }

session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //更新

public void testUpdate(){

try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            Transaction tx=session.getTransaction();
            tx.begin();
            
            Student student=(Student) session.get(Student.class, 1);
            student.setName("小狗1");
            session.update(student);

tx.commit();
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

转载于:https://www.cnblogs.com/RanNing/archive/2013/05/16/3082716.html

hibernate 基本步骤 一相关推荐

  1. Spring整合Hibernate的步骤

    为什么要整合Hibernate? 1.使用Spring的IOC功能管理SessionFactory对象  LocalSessionFactoryBean 2.使用Spring管理Session对象   ...

  2. Spring整合Hibernate图文步骤

    工具:myeclipse9.0 Spring版本:2.5.6 Hibernate版本:3 昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记. 首先建立java Proj ...

  3. Spring、Struts2+Spring+Hibernate整合步骤

    所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...

  4. hibernate连接mysql数据库步骤_Hibernate (操作步骤)

    在java工程里导入Hibernate架包: 在添加数据库架包如: Hibernate开发步骤: 1.Eclipse下创建Hibernate配置文件(需要tools插件) new---->oth ...

  5. Hibernate的使用梳理

    Hibernate创建步骤 (五大核心接口:Configuration/SessionFactory/Session/Transaction/Query) 1.新建java工程,导入需要的jar包. ...

  6. Hibernate配置详解

     一.简单介绍   Hibernate是一种对JDBC做了轻量级封装的对象---关系映射工具,所谓轻量级封装,是指Hibernate并没有完全封装JDBC,Java应用即可以通过Hibernate ...

  7. Hibernate入门(IDEA下自动生成映射文件及实体类)

    1.Hibernate开发步骤 1.创建Hibernate配置文件 2.创建持久化类 3.创建对象-关系映射文件 4.通过Hibernate API编写访问数据库的代码 2.创建一个hibernate ...

  8. spring+hibernate+struts整合(1)

    spring+hibernate:整合 步骤1:引入类包 如下图:这里是所有的类包,为后面的struts整合考虑 步骤2:修改web.xml 在web.xml中加入下面的配置 <context- ...

  9. hibernate入门总结

    http://www.blogjava.net/leeYan/archive/2012/06/15/380878.html 1,任何的计算机程序都是由指令和数据两部分组成,持久化数据对于对于大多数程序 ...

  10. HIBERNATE 持久化基础

    Hibernate 是一个开放源代码的对象关系映射框架,它通过对 JDBC 进行轻量级的对象封装,使 Java 程序员能够随心所欲地使用面向对象的编程思维来操作数据库.Hibernate 不仅提供了  ...

最新文章

  1. 报名 | 期末考后,快来打比赛赢万元奖金!(北京上海)
  2. JVM资源分析工具jprofiler使用简介
  3. 实事求实来看综合布线网络
  4. [crypto]-01-对称加解密AES原理概念详解
  5. cve20190708补丁的kb名称_微软KB4495667补丁(CVE 2019-0708补丁)V1.1 官方版
  6. Netcdf中多变量导出代码示例
  7. matlab指令vpa(j10),matlab中vpa函数
  8. 为ZooKeeper增加一个小功能:指定IP进行受限客户端过滤
  9. CHI 2016 2017 Paper Shared Gaze for Remote Collaboration
  10. app接码教程,附源码
  11. 实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)
  12. 微信Android热补丁方案Tinker
  13. win7老计算机,windows7旗舰版系统电脑老是自动重启的原因汇总
  14. 高电平和低电平 到底是啥?
  15. python应用_恺撒密码加密与解密
  16. 19年6月英语六级阅读单词
  17. Activity生命周期详解及最佳实践
  18. 量子逻辑电路的初步探索
  19. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票
  20. 【和81】基于复杂价值链的合作价值界定(温微观察13-11)

热门文章

  1. 为什么visual的联机浏览功能不能用_Minecraft非正版联机教程
  2. python文本风格_Python的代码风格
  3. 虚拟主机网站搬到服务器上,如何把网页文件放到云虚拟主机
  4. android实现标题栏弹框,Android:Dialog对话框、Builder、showDialog、模板方法设计模式...
  5. php复制按钮,【typecho】typecho优化之代码框添加复制按钮
  6. mybatis mysql 自增_利用Java的MyBatis框架获取MySQL中插入记录时的自增主键
  7. html在线播放mp4文件,使用HTML5视频在Firefox中播放MP4文件
  8. 阿里云云计算 11 ECS初体验-- 动手实验
  9. IDEA插件系列-玩转JSON与实体类互相转换
  10. mysql5.7 字符集编码