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控制台中输出的结果如下: