`
elite20130514
  • 浏览: 45256 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

初识hibernate

阅读更多

    今日公司项目开发需要整合hibernate,之前用的是mybatis,啥都别说,学呗,下边是我学习hibernate api后整理的代码,代码比较简单,有不足的地方请指正!这只是一个入门的例子。。。

项目目录:

所用的jar包(每个jar具体的作用这里就不列出来了,可以参http://nopainnogain.iteye.com/blog/761630):

     具体的项目代码请查看附件,这里贴出测试代码,便于讨论问题,注:初学者,代码乱请见谅!

package com.hibernate.demo.test;
import org.hibernate.Session;
import java.util.List;

import java.util.Date;

import com.hibernate.demo.po.Event;
import com.hibernate.demo.util.HibernateUtil;

public class EventManager {
	
	Session session = null;
	public EventManager(){
		session = HibernateUtil.getSessionFactory().getCurrentSession();
	}
	
	public  void testInsert(EventManager mgr){
		mgr.createAndStoreEvent("My Event", new Date());
	}
	@SuppressWarnings("rawtypes")
	public  void testList(EventManager mgr){
		if(true){
		List events = mgr.listEvents();
            for (int i = 0; i < events.size(); i++) {
                Event theEvent = (Event) events.get(i);
                System.out.println("Event: " + theEvent.getTitle() +
                                   " Time: " + theEvent.getDate());
            }
       }
	}
	/**
	 * ---测试load,观察返回的obj---
	 * 如果注释输出obj,则控制台没有输出sql语句(前提hibernate.cfg.xml设置show_sql=true),
	 * 原来,hibernate 使用延迟加载的策略,(默认hibernate.cfg.xml class节点的lazy属性为true),只要对应的对象没有
	 * 被使用,hibernate 瞒天过海告诉你我有这个对象(通过cglib,返回动态构建的一个代理类),其实并没有做任何事情,只有真正想获取对象 的时候,
	 * hibernate才开始做事(访问数据库)。好处:提高性能,只有真正用到的时候才访问数据库,减少内存消耗
	 * 
	 * 如果hibernate 无法取到这个对象,报ObjectNotFoundEcception异常
	 * 
	 * @author apprenctice 
	 */
	public  void testLoad(){
		session.beginTransaction();
		Object obj = session.load(Event.class,new Long(1));
		System.out.println(obj);
//		session.getTransaction().commit();  此处注释掉,commit后自动关闭session
	}
	/**
	 * ---测试get,观察返回的obj---
	 * 如果你运行了这个程序,你会发现,用load输出的obj和get输出的公用同一块内存空间,what's wrong?
	 * 不是说get每次都会访问数据库吗?原来,我在load的时候,(hibernate缓存机制)session里已经有了obj这个对象
	 * 聪明的hibernate还会去数据库取吗?session帮了我们大忙,提高了性能。如果session中有,则直接返回这个对象(其实是个代理)
	 * 
	 * 如果hibernate 无法取到这个对象,返回null
	 * 
	 * @author apprenctice 
	 * 
	 */
	public void testGet(){
		session.beginTransaction();
		Object obj = session.get(Event.class, new Long(1));
		System.out.println(obj);
		session.getTransaction().commit();
	}
	
    public static void main(String[] args) {
    	EventManager mgr = new EventManager();
//      mgr.testInsert(mgr);	//将event保存入数据库,此处需注释hibernate.cfg.xml中的 hbm2ddl.auto
    							//否则,每次显示关闭sessionfactory时都会还原数据库	
//    	mgr.testList(mgr);		//列出所有events	
    	mgr.testLoad();			//测试load
    	mgr.testGet();			//测试get
        HibernateUtil.getSessionFactory().close();
    }

    private void createAndStoreEvent(String title, Date theDate) {
        session.beginTransaction();
        Event theEvent = new Event();
        theEvent.setTitle(title);
        theEvent.setDate(theDate);
        session.save(theEvent);
        session.getTransaction().commit();
    }
    @SuppressWarnings("rawtypes")
    private List listEvents() {
        session.beginTransaction();
        List result = session.createQuery("from Event").list();
        session.getTransaction().commit();
        return result;
    }
}

测试结果:

Hibernate: select event0_.EVENT_ID as EVENT1_0_0_, event0_.EVENT_DATE as EVENT2_0_0_, event0_.EVENT_TITLE as EVENT3_0_0_ from EVENTS event0_ where event0_.EVENT_ID=?

com.hibernate.demo.po.Event@1b33a0e

com.hibernate.demo.po.Event@1b33a0e

代码见附件hibernate3,欢迎初学者与我交流,一同进步!!!同时也欢迎专家多多指教!!!

 

 

  • 大小: 22.5 KB
  • 大小: 30.1 KB
分享到:
评论

相关推荐

    Hibernate之API初识及增删改查实现案例hibernate003

    参考博文:http://blog.csdn.net/u011638419/article/details/41980311

    Hibernate(3.6)之初识

    NULL 博文链接:https://liuzidong.iteye.com/blog/960322

    精通Java Web整合开发(第2版)

    12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决之道532 12.4.1 为hibernate应用添加annotation支持532 12.4.2...

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

    2.1 初识mvc新秀struts 2 33 2.1.1 mvc概述 33 .2.1.2 struts 2的mvc实现 35 2.1.3 struts 2的基本组成 36 2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务控制器action实现 39 2.1.6 struts 2的处理...

    零基础学Java Web开发

     第1章 初识Java语言  第2章 Java基础语法  第3章 Java面向对象编程  第二篇 JSP基本知识  第4章 JSP基本语法  第5章 JSP内置对象  第6章 JSP与JavaBean  第7章 JSP与JDBC  第8章 Servlet编程  ...

    java从入门到精通70个PPT

    1.初识java 2.变量、数据类型和运算符和表达式 3运算符和程序流程结构 4.数组 5.类和对象 6.字符串 7.封装,继承,多肽 8.接口与抽象类 9.java集合类 10.jdbc 11 html简介与js的基本语法 12 javascript内置对象和...

    北大青鸟spring最后一本书的 第五章

    北大青鸟spring最后一本书的 第五章,青鸟(国际)器材销售系统网站--(struts+Hibernate+Spring+Ajax版)【外加自己写的一个简单的,包括数据库】 我把jar包删了 !你需要自己加,就能运行!

    JAVA程序开发大全---上半部分

    第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的安装与配置 1 1.2.2 MyEclipse 7.0的安装和运行 4 1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的...

    Spring Data JPA 原理与实战2021年

    │ 01 Spring Data JPA 初识.mp4 │ 02 Spring Data Common 之 Repoitory 如何全面掌握?.mp4 │ 04 如何利用 Repoitory 中的方法返回值解决实际问题?.mp4 │ 05 @Query 解决了什么问题?什么时候应该选择它?....

    Java Web编程宝典

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    ASP.NET编程宝典光盘源码

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    ASP.NET编程宝典(十年典藏版)》光盘源码1

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    《Java Web编程宝典(十年典藏版)》光盘源码

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    《ASP.NET编程宝典(十年典藏版)》光盘源码2

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    Maven2 的新特性.7z

    Maven 出现到现在也有很长时间了,初识它的感觉至今仍清晰的印在脑海中。现在想来,当时从 Ant 移情 Maven 的想法其实很朴素,就是因为 Maven 可以以网站的形式展现与项目相关的信息,如开发人员列表、各种 Report。...

    精通JSP-Web开发技术与典型应用 光盘代码

    \ch01\* 第1章 初识JSP所有例程代码 \ch02\* 第2章 HTTP和Servlet基础 所有例程代码 \ch03\* 第3章 JSP基本语法所有例程代码 \ch04\* 第4章 JSP内置对象所有例程代码 \ch05\* 第5章 JavaBean在JSP中的应用所有...

Global site tag (gtag.js) - Google Analytics