hibernate基础

 Hibernate(仅介绍数据库到对象的映射,对象到数据库的映射类似)

一、Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

二、核心接口和类

Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

1、Session:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

2、SessionFactory:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

3、TransactionTransaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。

4、QueryQuery接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

5、CriteriaCriteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。

6、ConfigurationConfiguration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

Hibernate 机制:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、简单的hibernate+mysql的实例java开发

步骤一:安装jdk、myeclipse

步骤二:新建一个web项目

步骤三:在mysql数据库中新建数据库名usertab和表user,并增加几行数据到表中

步骤四:打开数据库视图

在MyEclipse上依次选择 :window|show view|other|选择DB Browser

选择DB Browser点击ok

步骤五:新建数据库连接

回到上述DB Browser

在DB Browser空白处右击,点击新建,弹出如下对话框

填写上述内容:

我们发现一个问题

这是因为没有使用mysql驱动包的缘故,新建数据库连接的时候,会用到mysql的驱动包,所以加入mysql的驱动包:

点击Add JARs按键

添加mysql的驱动包

看到此时已经加载mysql驱动包到web-inf/lib目录下

之前显示的错误已经不存在

我们可以点击Test Driver测试是否连接(之后所需输入密码都为mysql数据库密码)

点击下一步添加我们所需要的数据库

点击完成,建好后如图

步骤六:右击mysqlhibernate1,打开连接

步骤七:在项目中配置hibernate

点击菜单栏的Myeclipse | Project capabilities | add Hibernate Capabilities

下一步:

如上图所选,点击:完成

这样就已经自动生成了hibernate的配置文件,在src目录下可以找到

步骤八:现在使用hibernate自动生成永久类的java文件

在src目录下新建bean包(用来存自动生成的永久类java文件)

在DB Browser下,右键我们新建的user表,选择Hibernate Reverse Engineering

选择:下一步,弹出如下对话框

选择下一步:

点击:完成

现在在bean包下面有2个文件了,一个User.ava文件,一个User.hbm.xml配置文件

同时,看看hibernate.cfg.xml文件中是不是有User.hbm.xml的映射,这样就配置要了hibernate到数据库的链接,我们就可以通过操作User.hbm.xml这个文件中的表User(注意大写字母),来操作数据库的user表(这里小写字母)了

步骤九:现在我们测试使用hibernate操作数据库

新建一个op包,在op包下新建test.java类文件

test.java代码如下  //测试的是读取数据库中的记录(所以数据库中必须有数据,自己增加数据)

package op;

import java.util.Iterator;

import java.util.List;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import bean.Usertable;

public class testtable {

   Session session = null;

   Transaction tx = null;

   public static voidmain(String[] args) {

      try {

        SessionFactory sf =new Configuration().configure()

              .buildSessionFactory();

        Session session =sf.openSession();

        List<?> catlist= null;

        catlist =session.createQuery("from User").list();

        Transaction tx =session.beginTransaction();

        if (catlist != null){

           Iterator<?>it = catlist.iterator();

           while(it.hasNext()) {

              User user = (User) it.next();

              System.out.println("id:"+ user.getId() + "姓名:"

                    +user.getName() + " 密码:"

                    +user.getPwd() + "\n");

           }

        }

        tx.commit();

        session.clear();

      } catch(HibernateException e) {

        // TODO: handle exception

        e.printStackTrace();

      }

   }

}

添加数据:

package bean;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

public class addtest {

   public static voidmain(String[] args) {

      try {      User u = new User ();

        u.setId(6);

        u.setPwd("123456");

      u.setName("username");

       

        SessionFactory sf =new Configuration().configure()

              .buildSessionFactory();

        Session session =sf.openSession();

        Transaction tx =session.beginTransaction();

        session.save(u);

        tx.commit();

        session.clear();

      } catch(HibernateException e) {

        e.printStackTrace();

      }

   }

}

删除数据:

package bean;

import java.util.Iterator;

import java.util.List;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

public class deletetest{

  

      public static voidmain(String[] args) {

        try {

          

        SessionFactory sf=newConfiguration().configure()

                 .buildSessionFactory();

           Session session =sf.openSession();

           Transaction tx =session.beginTransaction();

          

      User u = (User)session.get(User.class, 2);

           session.delete(u);

           tx.commit();

           session.clear();

        } catch(HibernateException e) {

           e.printStackTrace();

        }

      }

   }

修改数据

package bean;

import java.util.Iterator;

import java.util.List;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

public class updatetest {

  

   public static voidmain(String[] args) {

      try {

        SessionFactory sf =new Configuration().configure()

              .buildSessionFactory();

        Session session =sf.openSession();

        Transaction tx =session.beginTransaction();

       

   User u = (User)session.get(User.class, 2);

        u.setPwd("222222222");

        session.update(u);

        tx.commit();

        session.clear();

      } catch(HibernateException e) {

        e.printStackTrace();

      }

   }

}

补充:

User类:publicclassUser extendsAbstractUser implements

        java.io.Serializable{

    // Constructors

    /**

     *

     */

    private static final long serialVersionUID= 1L;

    /** default constructor */

    public User() {

    }

    /** full constructor */

    public User(String name,String pwd) {

        super(name, pwd);

    }

}

AbstractUser类:

package bean;

public abstractclassAbstractUser implements java.io.Serializable {

    // Fields

    private Integer id;

    private String name;

    private String pwd;

    // Constructors

    /** default constructor */

    public AbstractUser() {

    }

    /** full constructor */

    public AbstractUser (Stringname, String pwd) {

        this.name = name;

        this.pwd = pwd;

    }

    // Property accessors

    public Integer getId() {

        return this.id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getName() {

        return this.name;

    }

    public void setName(String name) {

        this. name = name;

    }

    public String getPwd() {

        return this.pwd;

    }

    public void setPwd(String pwd) {

        this.pwd = pwd;

    }

}

通过类创建表:

1.  package com.tgbnode.hibernate;  

2.    

3.  import org.hibernate.cfg.Configuration;  

4.  import org.hibernate.tool.hbm2ddl.SchemaExport;  

5.    

6.    

7.  /** 

8.   * hbm生成ddl 

9.   * @author azj 

10.  * 

11.  */  

12. public class ExportDB {  

13.   

14.     public static void main(String[] args) {  

15.           

16.         //默认读取hibernate.cfg.xml文件  

17.         Configuration cfg = new Configuration().configure();  

18.         //SchemaExport工具类接收配置对象(Configuration)导成DDL,把对象类导成表  

19.         SchemaExport export = new SchemaExport(cfg);  

20.         //打印到控制台,并输入到数据库  

21.         export.create(truetrue);  

22.     }  

23. }  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值