J2EE框架——Hibernate开发

小可将给大家介绍如何用Hibernate对数据库进行插入,更新,删除,查询等操作,Let’s GO!

一.创建配置文件

/**hibernate.cfg.xml*/

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"03
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


    
        /**数据库连接*/
        "connection.url">
            jdbc:mysql://localhost/test
        
        /**数据库驱动*/
        "connection.driver_class">
            com.mysql.jdbc.Driver
        
        /**用户名*/
        "connection.username">root
        
        /**密码*/
        "connection.password">0000
        
        /**数据库方言*/
        "dialect">
            org.hibernate.dialect.MySQLDialect
        
        /**指定映射文件*/
        "com/yl/test/hibernate/Product.hbm.xml" />

    

二.创建持久化类

持久化类是一个POJO类,不用继承或实现任何接口

//Product.java

public class Product{
    private String id;
    private String name;
    private double price;
    public String getId(){
        return id;
    }
    public void setId(String id){
        this.id = 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;
    }
}

三.创建对象关系映射文件

用来映射持久化类和数据库表,使持久化类中的属性和数据库表中的字段关联起来,文件应加上.hbm.xml,并保存在持久化类同目录下

/**Product.hbm.xml*/

"1.0" ?>
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


    /**每个class对应一个持久化对象*/
    <class name="com.yl.test.hibernate.Product">
        /**id元素来定义主键表示,并指定主键生成策略*/
        "id">
            class="assigned">
        
        /**定义其他属性*/
        "name">
        "price">
    class>


/**要使映射文件起作用,还要在Hibernate的配置文件中配置该映射文件:

*/

四.创建数据库表

以前Web都先创建数据库表,再通过JDBC操作。而Hibernate可以自动创建数据库表,并根据持久化类的属性名作为数据库表的字段名

/**CreateDB.java*/
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();
        /**创建sExport实例*/
        SchemaExport sExport = new SchemaExport(cfg);
        /**创建数据库表*/
        sExport.create(true,true);
    }
}

/**运行可看到在数据库中创建对应的表*/

五.操作数据

操作数据要经过以下步骤:

  • 获得Configuration实例
  • 通过实例调用其buildSessionFactory(_方法获得SessionFactory实例
  • 通过SessionFactory调用openSession()方法获得Session实例
  • 通过Session实例开启事务
  • Session实例调用其方法完成数据库操作
  • getTansaction()获得当前事务并关闭
  • 关闭Session
/**InsertProduct.java*/

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class InsertProduct{
    public static void main(String[] args){
        /**读取hibernate.cfg.xml*/
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        session.beginTransaction();
        /**实例化一个Product*/
        Product product = new Product();
        product.setId("123");
        product.setName("冰箱");
        product.setPrice(1250.00);
        //保存数据
        session.save(product);
        //事物提交
        session.getTransaction().commit();
        //关闭session
        if(session.isOpen())
            session.close();
    }
}


/**UpdateProduct.java*/

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UpdateProduct{
    public static void main(String[] args){
        /**读取hibernate.cfg.xml*/
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        session.beginTransaction();
        /**实例化一个Product*/
        Product product = new Product();
        product.setId("456");
        product.setName("发电机");
        product.setPrice(1888.88);
        //更新数据
        session.update(product);
        //事物提交
        session.getTransaction().commit();
        //关闭session
        if(session.isOpen())
            session.close();
    }
}


//删除用session.delete(),其他部分相同就不再赘述

在应用中还可以使用HQL查询语句实现:

/**用HQL实现查询所有数据*/

/**QueryAllProduct.java*/

import java.util.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Query;

public class QueryAllProduct{
    public static void main(String[] agrs){
         /**读取hibernate.cfg.xml*/
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        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();
        Iterator iter = list.iterator();
        while(iter.hasNext()){
            p = (Product)iter.next();
          System.out.println("id:"+p.getId()+
                "name:"+p.getName()+"price:"+p.getPrice());
        }
        if(session.isOpen())
            session.close();

    }
}

前面应用中,每次都用Configuration实例,并获得SesionFactory实例。为了简化代码量,可以编写一个工具类HibernateUtil来封装这些操作,这时要获得Session对象,只用调用HibernateUtil类的getSession()

/**HibernateUtil.java*/

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

public class HibernateUtil{
    private static SessionFactory factory;
    static{
        Configuration cfg = new Configuration().configure();
        factory = cfg.buildSessionFactory();
    }
    //获得SessionFactory实例
    public static SessionFactory getSessionFactory(){
        return factory;
    }
    //获得session实例
    public static Session getSession(){
        return factory.openSession();
    }
    //关闭session
    public static void closeSession(Session session){
        if(session != null){
            if(session.isOpen)
                session.close();
        }
    }
}

下一篇博客,小可将给小伙伴们介绍一个DAO模式+Struts2+Hibernate整合开发的小例子,帮助小伙伴们理解整合SH框架的方便性

你可能感兴趣的:(J2EE,SSH框架,hibernate,开发,实例)