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("0511237");
  product.setName("喷气机");
  product.setPrice(1222.88);
  
  //保存数据
  session.save(product);
  
  //事务提交
  session.getTransaction().commit();
  
  //关闭session
  if(session.isOpen()){
   session.close();
  }
  
 }
}

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

结果如下

Hibernate框架设计之ORM思想_第1张图片

更新操作

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

结果如下

Hibernate框架设计之ORM思想_第2张图片

删除操作

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

结果如下

Hibernate框架设计之ORM思想_第3张图片

查询操作

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

Hibernate框架设计之ORM思想_第4张图片


你可能感兴趣的:(Hibernate,mysql,orm,配置,对象/关系,数据库表操作)