- 浏览: 735636 次
- 性别:
- 来自: 沈阳
最新评论
-
李科笠:
这款编辑器,能够保存从word中复制的图片么?
CKEditor3.x的介绍和使用 -
sybell:
讲得好,但得试一下有没有错。
Mysql 中获取刚插入的自增长id的值 -
zqb666kkk:
nice 很好的启发
spring的jdbcTemplate 返回值为list -
nizen:
不错,有用!
Mysql 中获取刚插入的自增长id的值 -
MEZboy:
真全面,感谢分享!
Radio单选框OnClick事件的设置[网络收集]
说明篇
写这个 入门使用 系列的文章, 学习笔记。
目的1是让没有用过hibernate的工作者们,快速的使用起来。不会介绍太多的深层次的东西。仅仅是一个入门使用而已。
目的2是总结一下hibernate的基本使用,顺便自己再熟悉熟悉。
目的3是交流心得。一个人掌握的东西只有一点点。且掌握的程度有深有浅,如不交流、固步自封,只有被淘汰。欢迎任何人拍砖的。群众的力量是无穷的。在此系列中,难免会有些不恰当或者不对的地方。尽请指出、批评。
对于认为已经熟练掌握hibernate的高手们,可能没有什么用处。但是,无限欢迎交流。
废话不多说,下面开始进入主题。
试用篇
一. 何谓hibernate?
答:you can find the answer @google ...
二. 快速构建。
在此先要说明一下。由于本人懒惰,记不住hibernate的配置选项,所以,此系列的实例都是使用myeclipse进行快速开发。各位对myeclipse不齿的,就请见谅。然后,数据库都是mysql。
下面开始利用hibernate进行数据库的访问。
需求:实现对用户的增、删、改、查。为了方便,用户就2个属性 用户ID和用户名。实体模型如下:
建立工程:HibernateQuickUse,并且建立包。如下:
根据实体,创建类User,代码如下:
答:you can find the answer @google ...
二. 快速构建。
在此先要说明一下。由于本人懒惰,记不住hibernate的配置选项,所以,此系列的实例都是使用myeclipse进行快速开发。各位对myeclipse不齿的,就请见谅。然后,数据库都是mysql。
下面开始利用hibernate进行数据库的访问。
需求:实现对用户的增、删、改、查。为了方便,用户就2个属性 用户ID和用户名。实体模型如下:
建立工程:HibernateQuickUse,并且建立包。如下:
根据实体,创建类User,代码如下:
- package org.py.hib.quickstart;
- /**
- * User entity.
- * @author MyEclipse Persistence Tools
- */
- @SuppressWarnings("serial")
- public class User implements java.io.Serializable
- {
- private String id;
- private String name;
- public User()
- {
- }
- public String getId()
- {
- return this.id;
- }
- public void setId(String id)
- {
- this.id = id;
- }
- public String getName()
- {
- return this.name;
- }
- public void setName(String name)
- {
- this.name = name;
- }
- }
package org.py.hib.quickstart; /** * User entity. * @author MyEclipse Persistence Tools */ @SuppressWarnings("serial") public class User implements java.io.Serializable { private String id; private String name; public User() { } public String getId() { return this.id; } public void setId(String id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
根据实体,创建数据表。sql如下:
- use HibernateQuickUse;
- drop table if exists User;
- create table user (
- id varchar(32) primary key,
- name varchar(32)
- );
use HibernateQuickUse; drop table if exists User; create table user ( id varchar(32) primary key, name varchar(32) );
这里的id,我没有采用Integer auto_increment, 原因是为了数据库的数据能方便的导入到另外一种数据库里面,比方说:oracle。当然,这个是以牺牲部分效率为前提的。因为id是integer的,能更加快速查询。不过,从数据库会自动为 primary key 建立 index来看,效率也不会相差太多。
要想通过hibernate访问数据库。首先要建立描述数据库的文件:hibernate.cfg.xml。放到src下面。内容如下:
- <?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>
- <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
- <property name="connection.url">jdbc:mysql://localhost:3306/hibernatequickUse</property>
- <property name="connection.username">root</property>
- <property name="connection.password">root</property>
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="show_sql">true</property>
- <mapping resource="org/py/hib/quickstart/User.hbm.xml" />
- </session-factory>
- </hibernate-configuration>
<?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> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernatequickUse</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="show_sql">true</property> <mapping resource="org/py/hib/quickstart/User.hbm.xml" /> </session-factory> </hibernate-configuration>
说说上面的 "dialect", 这个对应着hibernate生成哪种数据库的sql。
然后是:"show_sql", 这个是为了调试时候输出sql语句到屏幕用的。
注意"mapping resource"部分。这个部分表示你的 实体- 数据库 映射文件的位置。(什么是实体-数据库 映射文件,看下面。)
实体-数据库映射文件 -- 主要是告诉hibernate,这个User类,对应着哪个table,User类里面的那个属性对应着table里面的哪个字段。
我们可以建立 实体-数据库 的xml映射文件,也可以采用Annotations映射,但是目前只说xml映射方式。如下:
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="org.py.hib.quickstart.User" table="user">
- <id name="id" type="java.lang.String" column="id" length="32">
- <generator class="uuid" />
- </id>
- <property name="name" type="java.lang.String" column="name" length="32" />
- </class>
- </hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="org.py.hib.quickstart.User" table="user"> <id name="id" type="java.lang.String" column="id" length="32"> <generator class="uuid" /> </id> <property name="name" type="java.lang.String" column="name" length="32" /> </class> </hibernate-mapping>
上面的xml还是很好理解的。注意一个generator中的class,他可以有很多。我们这用的是uuid。什么是uuid。这个可以google一下。呵呵。google是最好的教科书。还能有很多其他的,比方说:native。具体的同样请教google。
有了上面的准备,那么我们开始来测试一下。这里我们用junit。具体怎么使用junit,呵呵。答案我想大家都知道了,也不用我说了。其实我对test 和 使用它也不熟练。
我把测试用力放到了test/org.py.hib.quickstart下面。代码如下:
- package org.py.hib.quickstart;
- import junit.framework.Assert;
- import junit.framework.TestCase;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import org.junit.After;
- import org.junit.Before;
- public class QuickStartTest extends TestCase
- {
- SessionFactory factory;
- String m_name = "ryanpoy";
- String m_name2 = "ryanpoy2";
- @Before
- public void setUp() throws Exception
- {
- Configuration conf = new Configuration().configure();
- factory = conf.buildSessionFactory();
- }
- /**
- * 测试添加
- * @throws Exception
- */
- public void testSave() throws Exception
- {
- System.out.println("\n=== test save ===");
- User u = new User();
- u.setName(m_name); // 设置用户名 = m_name
- Session session = null;
- Transaction tran = null;
- try
- {
- session = factory.openSession();
- tran = session.beginTransaction();
- session.save(u);
- tran.commit();
- Assert.assertEquals(u.getId() != null, true);
- } catch (Exception ex)
- {
- tran.rollback();
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- }
- /**
- * 测试查询
- * @throws Exception
- */
- public void testFind() throws Exception
- {
- System.out.println("\n=== test find ===");
- Session session = null;
- try
- {
- session = factory.openSession();
- User u = (User) session.createQuery("from User").list().get(0);
- Assert.assertEquals(true, u.getId() != null);
- Assert.assertEquals(m_name, u.getName());
- } catch (Exception ex)
- {
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- }
- /**
- * 测试修改
- * @throws Exception
- */
- public void testModify() throws Exception
- {
- System.out.println("\n=== test modify ===");
- Session session = null;
- Transaction tran = null;
- try
- {
- session = factory.openSession();
- tran = session.beginTransaction();
- User u = (User) session.createQuery("from User").list().get(0);
- u.setName(m_name2); // 修改用户名 = m_name2.(原来用户名= m_name)
- tran.commit();
- } catch (Exception ex)
- {
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- /*
- * 修改后再查询
- */
- System.out.println("\n=== test find after modify ===");
- try
- {
- session = factory.openSession();
- User u = (User) session.createQuery("from User").list().get(0);
- Assert.assertEquals(true, u.getId() != null);
- Assert.assertEquals(m_name2, u.getName());
- } catch (Exception ex)
- {
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- }
- /**
- * 测试删除
- * @throws Exception
- */
- public void testDelete() throws Exception
- {
- System.out.println("\n=== test delete ===");
- Session session = null;
- Transaction tran = null;
- try
- {
- session = factory.openSession();
- tran = session.beginTransaction();
- User u = (User) session.createQuery("from User").list().get(0);
- session.delete(u);
- tran.commit();
- } catch (Exception ex)
- {
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- /*
- * 删除后再查询
- */
- System.out.println("\n=== test find after delete ===");
- try
- {
- session = factory.openSession();
- Integer num = (Integer) session.createQuery("from User").list().size();
- Assert.assertEquals(0, num.intValue());
- } catch (Exception ex)
- {
- throw ex;
- } finally
- {
- if (session != null)
- {
- try
- {
- session.close();
- } catch (Exception ex)
- {
- // nothing to do
- } finally
- {
- if (session != null)
- session = null;
- }
- }
- }
- }
- /**
- *
- */
- @After
- public void tearDown() throws Exception
- {
- factory.close();
- }
- }
package org.py.hib.quickstart; import junit.framework.Assert; import junit.framework.TestCase; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; public class QuickStartTest extends TestCase { SessionFactory factory; String m_name = "ryanpoy"; String m_name2 = "ryanpoy2"; @Before public void setUp() throws Exception { Configuration conf = new Configuration().configure(); factory = conf.buildSessionFactory(); } /** * 测试添加 * @throws Exception */ public void testSave() throws Exception { System.out.println("\n=== test save ==="); User u = new User(); u.setName(m_name); // 设置用户名 = m_name Session session = null; Transaction tran = null; try { session = factory.openSession(); tran = session.beginTransaction(); session.save(u); tran.commit(); Assert.assertEquals(u.getId() != null, true); } catch (Exception ex) { tran.rollback(); throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } } /** * 测试查询 * @throws Exception */ public void testFind() throws Exception { System.out.println("\n=== test find ==="); Session session = null; try { session = factory.openSession(); User u = (User) session.createQuery("from User").list().get(0); Assert.assertEquals(true, u.getId() != null); Assert.assertEquals(m_name, u.getName()); } catch (Exception ex) { throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } } /** * 测试修改 * @throws Exception */ public void testModify() throws Exception { System.out.println("\n=== test modify ==="); Session session = null; Transaction tran = null; try { session = factory.openSession(); tran = session.beginTransaction(); User u = (User) session.createQuery("from User").list().get(0); u.setName(m_name2); // 修改用户名 = m_name2.(原来用户名= m_name) tran.commit(); } catch (Exception ex) { throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } /* * 修改后再查询 */ System.out.println("\n=== test find after modify ==="); try { session = factory.openSession(); User u = (User) session.createQuery("from User").list().get(0); Assert.assertEquals(true, u.getId() != null); Assert.assertEquals(m_name2, u.getName()); } catch (Exception ex) { throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } } /** * 测试删除 * @throws Exception */ public void testDelete() throws Exception { System.out.println("\n=== test delete ==="); Session session = null; Transaction tran = null; try { session = factory.openSession(); tran = session.beginTransaction(); User u = (User) session.createQuery("from User").list().get(0); session.delete(u); tran.commit(); } catch (Exception ex) { throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } /* * 删除后再查询 */ System.out.println("\n=== test find after delete ==="); try { session = factory.openSession(); Integer num = (Integer) session.createQuery("from User").list().size(); Assert.assertEquals(0, num.intValue()); } catch (Exception ex) { throw ex; } finally { if (session != null) { try { session.close(); } catch (Exception ex) { // nothing to do } finally { if (session != null) session = null; } } } } /** * */ @After public void tearDown() throws Exception { factory.close(); } }
运行后,我们很欣慰的看到一路绿灯,全部通过了。那么测试没有问题。呵呵(这里的测试可能还不完善。请大家指出。前面说过,我对测试这块也不熟)。
看控制台,会输出如下信息:
- === test save ===
- Hibernate: insert into hibernatequickuse.user (name, id) values (?, ?)
- === test find ===
- Hibernate: select user0_.id as id2_, user0_.name as name2_ from hibernatequickuse.user user0_
- === test modify ===
- Hibernate: select user0_.id as id4_, user0_.name as name4_ from hibernatequickuse.user user0_
- Hibernate: update hibernatequickuse.user set name=? where id=?
- === test find after modify ===
- Hibernate: select user0_.id as id4_, user0_.name as name4_ from hibernatequickuse.user user0_
- === test delete ===
- Hibernate: select user0_.id as id6_, user0_.name as name6_
- HibernateQuickUse.zip (450.8 KB)
- 下载次数: 1
相关推荐
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
### MyEclipse+Hibernate快速入门知识点详解 #### 一、前言 本文档旨在通过一个简单易懂的方式,介绍如何在MyEclipse环境下配置并使用Hibernate框架。这是一份非常适合初学者使用的指南,特别是对于那些希望快速...
在了解基本配置后,教程会引导你创建一个简单的Java项目,并添加必要的Hibernate依赖。然后,通过一个实际案例展示如何创建实体类,定义数据表映射,以及如何在会话中进行数据的保存、检索、修改和删除操作。这部分...
以上就是Hibernate的基础入门知识,包括其概念、核心组件以及简单的使用示例。随着对Hibernate的深入学习,你会发现它还支持更高级的功能,如级联操作、多对一、一对多等复杂关系映射、缓存机制、延迟加载等,这些都...
**hibernate简单的入门案例** Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。这个入门案例将带你了解如何使用Hibernate进行基本的操作,包括配置、...
### hibernate3入门知识点 #### 一、概述 **Hibernate**是一种对象关系映射(Object/Relational Mapping,简称ORM)解决方案,它提供了一种机制,用于将Java对象及其关系映射到关系型数据库中的表及其关系。通过...
Hibernate 简单入门讲解一(简单的数据插入讲解).swf
这个“hibernate_first”压缩包提供了一个适合初学者的简单实例,帮助理解Hibernate的基础用法。以下是关于Hibernate入门的一些关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类的过程,...
通过这个入门小例子,你可以学习到如何搭建一个简单的JavaEE Web项目,使用Hibernate进行数据操作,并连接到MySQL数据库。同时,你还将了解到如何使用sql-front这样的工具辅助数据库管理和开发。这是一个很好的起点...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
Spring的Hibernate支持使得事务处理变得更加简单,同时也提供了声明式事务管理,让代码更干净。 **七、测试与运行** 这个入门示例通常包含一个测试类,用于执行上述操作并验证其结果。在测试类中,可以通过JUnit或...
**Hibernate 快速入门** Hibernate 是一款开源的Java框架,用于简化对象关系映射(ORM)的任务,它允许开发者将数据库操作转化为对Java对象的操作,从而极大地提高了开发效率。本教程将采用最简单的实例和易懂的...
在这个简单的入门程序中,"数据库.txt"可能包含了数据库的相关信息,例如初始化脚本,用于创建与实体类对应的数据库表。 总的来说,Hibernate为Java开发者提供了一种强大且灵活的工具,通过减少对SQL的直接依赖,使...
在"simpleTest"这个源码示例中,可能包含了一个简单的Web应用,展示了这三个框架如何协同工作。通过学习这个例子,开发者可以理解如何配置Struts2的action、result和interceptors,怎样在Spring中定义bean并实现依赖...
本篇文章将详细介绍如何使用Hibernate和Maven进行一个简单的入门级项目搭建。 ### 1. Hibernate简介 Hibernate是Java世界中的一款主流ORM框架,它通过提供API和配置文件将Java对象与数据库表对应起来,实现了对象...
【标题】"Hibernate 3.6.3 入门程序" 【内容详解】 Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在数据库中操作对象的简便方法。Hibernate 3.6.3是该框架的一个稳定版本,提供了许多...
### Hibernate入门教程知识点详解 #### 一、Hibernate框架简介 **Hibernate** 是一款开放源代码的**对象关系映射(Object-Relational Mapping,简称ORM)**框架,它为Java应用提供了一种高效的机制,用于处理Java...