`
weigang.gao
  • 浏览: 467455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hibernate3.5 HelloWorld(1)

 
阅读更多

下面我们开始写hibernate的第一个小程序,hibernate本身并不难,当然它内部实现很复杂,但是hibernte这个框架它的原理很简单,其实就是把你的Object映射成为相关的sql语句,把sql语句从数据库中查询的结果组装成对象,就这个意思。

下面来编写一个简单的Hibernate HelloWorld,如下就是project工程的目录结构以及所需jar文件:


 

1.在这里我们需要把Student存到数据库中去,因此我们首先编写Student.java

package com.bjsxt.hibernate;

public class Student {
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}	
}

2.在数据库中建立与Student对应的表,表结构如下

create table student(

   id number primary key,

   name varchar2(20),

   age number(3)

)

 

3.在src目录下新建hibernate.cfg.xml文件,从Hibernate Reference Documentation(注意:这个文档并不是所有的hibernate压缩文件中都会自带,因此你要下载自带该开发文档的压缩文件)中搜索hibernate.cfg.xml并copy到该文件中,然后注释调用其中暂时用不到的内容

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:121:ORCL</property>
        <property name="connection.username">system</property>
        <property name="connection.password">niit</property>

        <!-- JDBC connection pool (use the built-in) -->
        <!--暂时用不到 <property name="connection.pool_size">1</property>-->

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
       <!--暂时用不到 <property name="current_session_context_class">thread</property>-->

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <!--是否在console上显示数DML语句,注意:并不会显示DDL语句。如果需要显示DDL语句,需要搭建log4j日志环境-->
        <property name="show_sql">true</property>
        <!--格式化DML语句,注意:这个需要与show_sql搭配使用-->
        <property name="format_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <!--暂时不用<property name="hbm2ddl.auto">update</property>-->

        <mapping resource="org/bjsxt/model/Student.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

4.到这一步连接数据不缺了,hibernate自动帮我连接了。我们Student建了,数据表我们也建了,还缺哪个环节?还缺的环节是我这个实体类Student跟我们数据库到底是怎么关联的呢?实体类的那个属性对应表的那个字段呢?是不是还缺这个关联。

在Student.java同一目录下面建立student.hbm.xml (在hibernate的开发文档中搜索hbm.xml,然后copy改)

<!--实体类的配置文件约定俗成要和实体类在一起-->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.bjsxt.model"><!--package指明你映射的是哪一个package里面的类-->
	<class name="Student" table="student"><!--table可以不用配置,在没有配置table的情况下,hibernate会默认我们的表名和我们的name(指定类名)一样是student,因为数据库的表名是不区分大小写的,这是表的映射-->
		<id name="id" column="id" /><!--name指定的是类中的属性id,column指定的是表中的字段id,当表中的字段和类中的属性相同时,column可以不写;如果实体类的属性和表的字段不相同则必须写,id同时也代表主键,字段的映射-->
		<property name="name" />
		<property name="age" />
    </class>
	
</hibernate-mapping>

 

5.创建测试类StudentTest.java

package com.bjsxt.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;//这里不要用经典的Session,即不要引入import org.hibernate.classic.Session,用最新的
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class StudentTest {
	public static void main(String[] args) {
		Student s = new Student();
		s.setId(1);
		s.setName("t1");
		s.setAge(22);
		//理想情况下session.save(t)就将我们的对象存入数据库了,当然你要想拿到这个session的话,首先我们要拿到Configuration对象,
		Configuration cfg=new  Configuration();/*创建一个Configuaration对象,Configuaration看它的名字你就应该知道,它就是用来读配置文件的
		,怎么读配置文件呢?cfg.configure()来读取配置文件。当cfg.configure(参数)的时候,可以用参数来指定你要读哪一个配置文件。如果你不指定
		的话,默认就找class根目录下面的hibernate.cfg.xml*/
		SessionFactory sf=cfg.configure().buildSessionFactory();/*cfg.configure()找class根目录下面的hibernate.cfg.xml,到这步,Configuration就已经把hibernate.cfg.xml文件解析了,解析完以后注意看configure的返回值仍然是一个Configuration,configure完以后返回的是一个已经拥有了配置选项的Configuration对象;调用buildSessionFactory
		方法产生了一个SessionFactory(session工厂)*/
         
		Session session=sf.openSession();//拿到session
     /*在hibernate里面,你的操作都应该放到一个事物(transaction)里面 ,所以说在session里面你要想执行操作呢?你必须执行session.beginTransaction(),
	 beginTransaction()还回的是一个transaction对象,*/
		session.beginTransaction();//还回值可以不用存起来
		session.save(s);/*执行save的时候,hibernate发现s你这个是一个student的类,那么它当然就会去找student这个类的配置文件,既然你要求我save
		这个对象,我当然看看属性和字段怎么对应*/
		session.getTransaction().commit();/*事物完成以后,要将事物提交,session.getTransaction()就拿到了session.beginTransaction()创建的
		事物(transaction)了,commit()将事物提交,这个时候数据库中就有提交的数据了*/
		session.close();
		sf.close();
	}
}

 

 

  • 大小: 20.9 KB
分享到:
评论

相关推荐

    java web技术开发大全(最全最新)

    第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新技术 第21章 Hibernate的高级技术 第4篇 Spring篇 第22章 Spring的Helloworld程序 第...

    java web开发技术大全

    第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新技术 第21章 Hibernate的高级技术 第4篇 Spring篇 第22章 Spring的Helloworld...

    Java Web程序设计教程

    2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个javaee应用 28 2.4.2熟悉helloworld框架结构 29 本章小结 32 课后练习 32 第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件struts.properties详解 55 2.2.3 ...

    Grails 中文参考手册

    2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 2.10 创建工件 2.11 生成Grails应用 3. 配置 3.1 基本配置 3.1.1 内置选项 ...

    jbpm4.4学习笔记

    17 HelloWorld 45 Xml: 45 Code: 45 18 从数据库中取出xml文件和png图片 48 19 向页面输出图片 49 20 页面显示图片 50 21 获取已加载到数据库中的XML文件,改修后并重新发布 51 21 会签 53 Xml: 53 code: 54 工作流...

    Struts2 in action中文版

    2.2 简单的HelloWorld示例 20 2.2.1 部署示例应用程序 20 2.2.2 探索HelloWorld应用程序 24 2.3 使用注解的HelloWorld 31 2.4 小结 33 第二部分 核心概念:动作、拦截器和类型转换 第3章 使用Struts 2动作 36 3.1 ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Java EE 框架..................................................................................................................................................................................1 ...

    Spring3.x企业应用开发实战(完整版) part1

    2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在...

    Spring.3.x企业应用开发实战(完整版).part2

    2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在...

    Spring-Reference_zh_CN(Spring中文参考手册)

    使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.2.1. PropertyPlaceholderConfigurer示例 3.7.2.2. ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包3

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包4

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

Global site tag (gtag.js) - Google Analytics