`
Spring_g
  • 浏览: 64049 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate3学习笔记(一)-hibernate概述和简单实例入门

阅读更多
一个全新的资源分享平台:享你所想

1. 先扯下什么是hibernate:
     a) hibernate(冬眠)->让java对象在数据库中冬眠.
     b) 持久化技术(把数据永久保存到数据库中,广义的理解包括和数据库相关的各种操作),jdbc io也是持久化技术。
     c) 一个java领域的持久化框架,一个ORM轻量级框架,连接java应用程序和关系型数据库的中间件,对JDBC API封装,负责对象持久化。位于持久化层,封装了所有的数据访问细节,完全体现了面向对象的思想,向业务逻辑层提供面向对象的API,使开发人员把更多的精力放在业务逻辑上。
     d) hibernate的优点是建立在jdbc的缺点之上,jdbc繁琐的字段操作和sql维护。
2. 接下来先用Hibernate来做一个小例子,看看使用hibernate和直接使用jdbc有便捷之处:
a) 创建数据库 和 数据库表[Mysql数据库]:
drop database if exists  ishare_hibernate;
create database  ishare_hibernate;
use  ishare_hibernate;

create table  customers(
          id int primary key,
          name varchar(20),
          age int,
birthday datetime,
          married int,
          photo longblob,
          descritpion text
 );
//几个不同数据库下数据类型
 
类型 mysqlsqlserver oracle
存储图片longblobimageblob
大文本texttextclob

 
b) 创建Java项目
①. 引入类库 解压hibernate3.0:引入lib/required目录下全部jar+Hibernate核心包+数据库驱动包mysql-connector-java-5.1.7-bin.jar
log4j.jar,slf4j-log4j.jar
在工程下新建lib目录,将jar包拷贝过去 并buildpath。
       ②.在工程源目录新建hibernate.properties 属性文件
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/ishare_hibernate
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true

注释:hibernate.dialect方言是对底层数据库所用自身机制的配置
      ③.创建java bean:Customer.java

public class Customer {
	private Integer id;
	private String name;
	private Integer age;
	private Date birthday;
	private boolean married;
	private byte[] photo;
	private String description;
}//getter setter省略

④.新建映射文件 Customer.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ishare.domain">
	<class name="Customer" table="customers" lazy="false">
		<id name="id" column="id" type="integer">
			<generator class="increment"/>
		</id>
		<property name="name" column="name" type="string" length="20"/>
		<property name="age" column="age" type="integer"/>
		<property name="birthday" column="birthday" type="date"/>
		<property name="married" column="married" type="boolean"/>
		<property name="photo" column="photo" type="binary"/>
		<property name="description" column="description" type="text"/>
         
        
	</class>
</hibernate-mapping>

关于映射文件需要说明的几点:
    1.映射文件一般要和对应的实体类放在同一目录下。
    2.hibernate-mapping package属性 可以设置当前javabean所在包路径,这样在使用Customer时就不用每次都是用全路径了
    3.映射文件的dtd文档类型定义,在hibernate3.jar第一个包下最后一个文件中。
    4. <property name="age" column="age" type="integer"/>
   name属性区分大小写,column不区分大小写,
   5.type 为映射类型(具体参考类型映射表)映射类型就是完成sql-java之间转换的。
    如果type属性省略不写,hibernate会通过反射去找对应的java类型
   测试string类型时 type=”java.lang.String”也可以,但是hibernate还得去通过反射去找对应的映射类型,还不如不写。
    6.generator 主键生成策略,其类型会在后面详细介绍
⑤.测试类一App.java:配置完后来测试下自己的成果吧
/**
 * 测试类
 * @author spring_g
 *
 */
public class APP {
	//会话工厂-相当于 连接池(数据源)
	private static SessionFactory sf = null;
	
	//1.初始化 会话工厂
	static{
		//引入三方框架 类库 配置文件
		try {
			Configuration conf = new Configuration();
			//加载映射文件 通过类找和他在一起的映射文件
			conf.addClass(Customer.class);
			//构建会话工厂,初始化
			sf = conf.buildSessionFactory();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//2.main方法插入测试
	public static void main(String[] args) {
		Customer c = new Customer();
		c.setName("spring");
		insertCustomer(c);
	}

	//3.插入客户
	public static void insertCustomer(Customer c){
		//开启一个新会话
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		s.save(c);
		tx.commit();//提交事务
		s.close();//关闭会话
		
	}
}
  ⑥.测试类二Junit4测试对Customer的增删改查:
/**
 * 测试基本操作
 * @author spring_g
 *
 */
public class TestCurd {
	//会话工厂-相当于 连接池(数据源)
	private static SessionFactory sf = null;
	/**
	 * 初始会话工厂
	 */
	@BeforeClass
	public static void initSf(){
		//引入三方框架 类库 配置文件
		try {
			Configuration conf = new Configuration();
			//加载映射文件 通过类找和他在一起的映射文件,预先生成sql语句
			conf.addClass(Customer.class);
			//构建会话工厂,初始化
			sf = conf.buildSessionFactory();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	@Test
	public  void insertCustomer(){
		Customer c = new Customer();
		c.setName("Sean");
		c.setAge(20);
		c.setBirthday(Date.valueOf("2008-12-13"));
		c.setMarried(true);
		c.setDescription("asdfasdfasdfasdfad");
		
		try {
			FileInputStream fis = new FileInputStream("d:/aaa.jpg");
			byte[] bytePhoto = new byte[fis.available()];
			fis.read(bytePhoto);
			fis.close();
			c.setPhoto(bytePhoto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		s.save(c);
		tx.commit();
		s.close();
		
	}
	/**
	 * 查询操作
	 */
	@Test
	public  void loadCustomer(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Customer c = (Customer) s.load(Customer.class, 3);
		byte[] bytes = c.getPhoto();
		try {
			FileOutputStream fos = new FileOutputStream("d:/kkk.jpg");
			fos.write(bytes);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(c.getName());
		tx.commit();
		s.close();
		
	}
	
	/**
	 * hql查询,oop查询操作
	 */
	@Test
	public  void loadCustomerList(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Query query = s.createQuery("from Customer");
		List list = query.list();
		System.out.println(list.size());
		tx.commit();
		s.close();
		
	}
	
	/**
	 * 更新操作
	 * 同一会话更新不需要调用update
	 */
	@Test
	public  void updateCustomer(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Customer c = (Customer) s.load(Customer.class, 3);
		c.setName("NewName");
		//不需要调用update方法  和对象状态有关
		tx.commit();
		s.close();
		
	}
	
	/**
	 * 更新操作-关闭会话后更新需要调用update()
	 */
	@Test
	public  void updateCustomer1(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		//查询不到会抛异常
		Customer c = (Customer) s.load(Customer.class, 3);
		c.setName("NewName");
		tx.commit();
		s.close();
		
		s = sf.openSession();//新开启一会话
		tx = s.beginTransaction();
		c.setName("updateMethod");
		s.update(c);
		tx.commit();
		s.close();
		
	}
	
	/**
	 * 更新操作-设置主键值
	 * 更新把整个对象状态存储到数据库中
	 */
	@Test
	public  void updateCustomer2(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Customer c = new Customer();
		//会将该对象的状态全部更新到数据库
		c.setId(4);//不设置id时 报异常  临时对象异常
		s.update(c);
		tx.commit();
		s.close();
		
	}
	
	/**
	 * 删除操作 先查询
	 */
	@Test
	public  void deleteCustomer(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Customer c = (Customer) s.load(Customer.class, 4);
		s.delete(c);
		tx.commit();
		s.close();
		
	}
	/**
	 * 删除操作new出来给id
	 */
	@Test
	public  void deleteCustomer2(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Customer c = new Customer();
		c.setId(4);
		s.delete(c);
		tx.commit();
		s.close();
		
	}
	
	/**
	 * 批量删除
	 */
	@Test
	public  void deleteBatchCustomer(){
		Session s = sf.openSession();
		//开始事务 acid
		Transaction tx = s.beginTransaction();
		Query query = s.createQuery("delete from Customer where id>3");
		query.executeUpdate();
		tx.commit();
		s.close();
		
	}
}

通过以上简单例子的入门,一定感觉hibernate确实是个不错的东西,给我们从繁琐的sql中解脱了出来,完全从面向对象的角度来实现对数据的持久化的操作。
自己在平时的学习中也整理了一些比较好的资源[Java,Python,前端,PHP,摄影...],现在分享出来希望也能对你有所帮助:分享资源入口
  • 大小: 1.2 MB
1
0
分享到:
评论

相关推荐

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    hibernate入门学习笔记+源码

    **hibernate入门学习笔记+源码** **一、Hibernate简介** Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过提供对象化的数据访问方式,Hibernate消除了传统JDBC代码中的...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    hibernate-学习笔记

    【hibernate-学习笔记】 ...以上是对“hibernate-学习笔记”的简要介绍,尚学堂hibernate笔记.doc和Hibernate_3.2.0_Reference_zh_CN.chm两个文档将提供更详细的信息和实例,帮助你深入学习和实践Hibernate。

    hibernate学习笔记-01helloword

    【标题】"hibernate学习笔记-01helloworld"主要涵盖了Hibernate框架的基础入门知识,是初学者了解和掌握Hibernate的重要起点。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...

    hibernate学习笔记文档

    ### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    hibernate4框架学习笔记

    【hibernate4框架学习笔记】 Hibernate是一款强大的ORM(Object-Relational Mapping)框架,它在Java开发中扮演着至关重要的角色,通过提供对象与数据库之间的映射,解决了对象模型和关系模型之间的“阻抗不匹配”...

    Hibernate3.2学习笔记

    《Hibernate3.2学习笔记详解》 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层的数据存取。本篇学习笔记将深入探讨Hibernate...

    马士兵java框架hibernate学习笔记

    ### 马士兵Java框架Hibernate学习笔记 #### 一、HelloWorld - **知识点概述**: - **项目搭建**:介绍了如何从零开始搭建一个简单的Hibernate项目。 - **环境配置**:包括了如何配置MySQL数据库、创建必要的表...

    hibernate API帮助文档 及hibernate学习笔记

    Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    Hibernate 的学习笔记

    ### Hibernate 学习笔记知识点详解 #### 一、Hibernate 简介 - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - *...

    Hibernate -annotation 学习笔记

    通过编写简单的HelloWorld程序,引入Hibernate和Annotation,创建第一个数据库操作实例,了解基本的Session和Transaction使用。 ### 第 7 课 建立 Annotation 版本的 HelloWorld 在此阶段,将HelloWorld示例转换为...

    黑马程序员 hibernate 2017版讲义资料-day3

    通过【描述】中的“源码,笔记,图片等”,我们可以推断出这份资料可能包含实际的编程示例、学习笔记和相关的可视化帮助,有助于更直观地理解和掌握上述知识点。对于初学者,这些辅助材料将极大地促进理论知识与实践...

    马士兵hibernate学习笔记

    ### 马士兵 Hibernate 学习笔记概览 #### 一、Hello World 示例 - **简介**:通过简单的示例程序来快速入门 Hibernate 框架。 - **步骤**: 1. 创建 Java 项目 `hibernate_0100_HelloWorld`。 2. 构建 User-...

Global site tag (gtag.js) - Google Analytics