Hibernate框架设计之ORM思想

 Hibernate框架是比较流行的持久化框架,是一个完整的持久化层解决方案,通过Hibernate的支持,可以以面向对象的方式进行各种数据库操作,从而取代传统的JDBC数据库操作。

    ORM的全称是Object/Relation Mapping,即对象/关系映射,对象是指使用的编程语言是面向对象的,而关系则是指使用的数据库是关系型数据库。对象/关系映射是指完成面向对象到关系型数据库的映射,通过映射后,用户可以像操作对象一样来操作自己的数据库。

    使用了Hibernate框架的ORM设计思想之后,就可以不用写SQL语句了,通过创建一个持久化类来映射一个数据库表。当使用面向对象的方式来操作持久化对象时,ORM框架能自动将这些操作转换成SQL语句从而完成对数据库的操作。

    项目首先要配置Hibernate框架支持,如下,应该在Hibernate官网下载Hibernate 3.jar。在我的网盘可以下载http://pan.baidu.com/s/1jG1li9S

    这里使用Hibernate和MySQL来创建一个数据库表,使用数据库表的创建,插入,更新,删除,查询等来进行Hibernate框架ORM设计的实例练习

    创建好项目之后,将MySQL数据库连接驱动mysql-connector-java-5.0-nightly-20071116-bin.jarhttp://pan.baidu.com/s/1pJ3cPuF 以及Hibernate框架支持hibernate3.jar等JAR包加入到项目支持。

然后创建Hibernate配置文件。文件中存储和数据库又换的信息,这里使用.xml文件来进行配置,该文件应该命名为hibernate.cfg.xml,在配置文件中可以配置数据库连接URL和数据库驱动与数据库用户名以及用户密码。

<?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>
		<!-- 数据库连接URL -->
		<property name="connection.url">
			jdbc:mysql://localhost/mystruts2
		</property>
		
		<!-- 数据库连接驱动 -->
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		
		<!-- 数据库用户名 -->
		<property name="connection.username">root</property>
		
		<!-- 数据库用户密码 -->
		<property name="connection.password">lybcyy.</property>
		
		<!-- 数据库方言 -->
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		
		<mapping resource="Product.hbm.xml"/>
		
    </session-factory>
</hibernate-configuration>

然后创建持久化类。持久化类市一个POJO类,不用继承和实现任何类或接口。

package com.lyb.hibernate;

public class Product {
	//产品ID
	private String id;
	
	//产品名称
	private String name;
	
	//产品价格
	private double price;

	//各属性的setter和getter方法
	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public void setId(String id) {
		this.id = id;
	}
	
}


接着创建对象关系映射文件。该文件用来映射持久化类和数据库表,从而将持久化类中的属性和数据库表中的字段关联起来。一般采用持久化类名加上"hbm.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对应一个持久化对象 -->
	<class name="com.lyb.hibernate.Product">
		<!-- id元素用来定义主键标示,并制定主键生成策略 -->
		<id name="id">
			<generator class="assigned"></generator>
		</id>
		
		<!-- 定义其他属性 -->
		<property name="name"></property>
		<property name="price"></property>
	</class>
</hibernate-mapping>  
注意,为了使得映射文件起作用,必须在hibernate.cfg.xml文件中配置

 <!-- 使得映射文件起作用 -->
 
  <mapping resource="Product.hbm.xml"/>


在进行数据库表的操作时,需要实现在MySQL数据库中创建一个数据库。

下面就可以创建Java程序来进行数据库表的创建,插入,更新,删除,查询等操作。

数据库表的创建操作。

package com.lyb.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateDB {
	public static void main(String args[]){
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SchemaExport实例
		SchemaExport sExport=new SchemaExport(cfg);
		
		//创建数据库表
		sExport.create(true, true);
	}
}

运行结果


在控制台中已经打出创建数据库表的SQL语句


插入数据操作


package com.lyb.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class InsertProduct {
	public static void main(String args[]){
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
		
		//开启事务
		session.beginTransaction();
		
		//实例化一个Product
		Product product=new Product();
		product.setId("0511234");
		product.setName("喷气机");
		product.setPrice(1222.88);
		
		//保存数据
		session.save(product);
		
		//事务提交
		session.getTransaction().commit();
		
		//关闭session
		if(session.isOpen()){
			session.close();
		}
		
	}
}


运行之后,在MySQL数据库控制台中输入SELECT * FROM product

结果如下




更新操作

package com.lyb.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class UpdateProduct {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
		
		//开启事务
		session.beginTransaction();
		
		//实例化一个Product
		Product product=new Product();
		product.setId("0511234");
		product.setName("采油机");
		product.setPrice(777.77);
		
		//更新数据
		session.update(product);
		
		//提交事务
		session.getTransaction().commit();
		
		//关闭session
		if(session.isOpen()){
			session.close();
		}
	}

}


运行程序之后,在MySQL数据库控制台输入SELECT * FROM product

结果如下




删除操作

package com.lyb.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class deleteProduct {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
		
		//开启事务
		session.beginTransaction();
		
		//实例化一个Product
		Product product=new Product();
		product.setId("0511234");
		product.setName("采油机");
		product.setPrice(777.77);
		
		//删除数据
		session.delete(product);
		
		//事务提交
		session.getTransaction().commit();
		
		//关闭session
		if(session.isOpen()){
			session.close();
		}
	}

}


也可以根据id进行删除

package com.lyb.hibernate;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class deleteProductByid {
	public static void main(String args[]){
		// TODO Auto-generated method stub
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
		
		//开启事务
		session.beginTransaction();
		
		//使用HQL查询
		String hql="DELETE Product WHERE id=?";
		Query q=session.createQuery(hql);
		q.setString(0, "0511234");
		q.executeUpdate();
		
		//事务提交
		session.getTransaction().commit();
		
		//关闭session
		if(session.isOpen()){
			session.close();
		}
	}
}


运行程序之后,在MySQL数据库控制台输入SELECT * FROM product

结果如下




查询操作

package com.lyb.hibernate;

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

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class QueryAllProduct {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
		
		Product p=null;
		
		//使用HQL查询
		String hql="FROM Product as pro";
		
		//通过Query方法查询
		Query q=session.createQuery(hql);
		
		//查询结果保存到list中
		List list=q.list();
		
		//遍历是否存在该id的产品,如果存在则进行输出
		Iterator iter=list.iterator();
		while(iter.hasNext()){
			p=(Product)iter.next();
			System.out.println("id:"+p.getId()+" name:"+p.getName()+" price:"+p.getPrice());
		}
		
		//关闭session
		if(session.isOpen()){
			session.close();
		}
	}

}


也可以根据id进行查询

package com.lyb.hibernate;

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

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class QueryProductByid {
	public static void main(String args[]){
		/**
		 * @param args
		 */
		// TODO Auto-generated method stub
		//读取配置文件hibernate.cfg.xml
		Configuration cfg=new Configuration().configure();
		
		//创建SessionFactory
		SessionFactory factory=cfg.buildSessionFactory();
		
		//创建Session
		Session session=factory.openSession();
	
		Product p=null;
		
		//使用HQL查询
		String hql="FROM Product as pro WHERE pro.id=?";
	
		//通过Query方法查询
		Query q=session.createQuery(hql);
		q.setString(0,"0511234");
	
		//查询结果保存到list中
		List list=q.list();
	
		//遍历是否存在该id的产品,如果存在则进行输出
		Iterator iter=list.iterator();
		while(iter.hasNext()){
			p=(Product)iter.next();
			System.out.println("id:"+p.getId()+" name:"+p.getName()+" price:"+p.getPrice());
		}
	
		//关闭session
		if(session.isOpen()){
			session.close();
		}
	}

}


进行查询之前需要创建多条记录,然后运行程序,在MyEclipse控制台中输出的结果如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值