??xml version="1.0" encoding="utf-8" standalone="yes"?>超碰在线电影,老司机精品久久,欧美视频中文字幕http://www.aygfsteel.com/kela/category/4821.html            前面的\很坎?但毕竟是条\.也许走过q一D就会发?走过d是梦想中的地?因此坚持成ؓ此刻唯一能做且必d做的事情. zh-cnTue, 27 Feb 2007 19:12:34 GMTTue, 27 Feb 2007 19:12:34 GMT60kela的笔?ORM产品 ---- hibernate(5) http://www.aygfsteel.com/kela/articles/22966.htmlKelaKelaThu, 08 Dec 2005 05:29:00 GMThttp://www.aygfsteel.com/kela/articles/22966.htmlhttp://www.aygfsteel.com/kela/comments/22966.htmlhttp://www.aygfsteel.com/kela/articles/22966.html#Feedback0http://www.aygfsteel.com/kela/comments/commentRss/22966.htmlhttp://www.aygfsteel.com/kela/services/trackbacks/22966.htmlHibernate Query LanguageQHQLQ?BR>
相对于Criteria提供的符合面向对象风格的查询装模式。HQL提供了更加丰富灵zȝҎ,它在늛Criteria功能范围的前提下Q提供了更加强大的查询(在Hibernate3中增加了实体的更斎ͼ删除Q能力。更多的HQL使用Ҏ请参考Hibernate开发手册和其它|络资源。HQL为官Ҏ荐查询模式?BR>CZQStudentCriteriaQuery.java一个基于HQL的查询,更新Q删除?BR>/**
 * StudentHQL.java
 * Hibernate Query Language(HQL)
 */
package com.kela.hb.model;

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

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;


/**
 * @author kangfeng(kela.kf@gmail.com)
 *
 */
public class StudentHQL {
 
  /*
   * 实体查询(查询数据库表中所有的U录)
   */
  public void exampleSelect_1(){
    Session session;
    Query query;
  
    String hql;
    try {
       session = HibernateUtil.currentSession();
   
       //查询W合相应~号和年龄大?5的学生纪?BR>       hql = " from com.kela.hb.pojo.KelaStudent as kelaStudent " +
                " where kelaStudent.stuID = '402880fc07dfe16f0107dfe173640001' " +
                " or kelaStudent.stuAge > 25";
      query = session.createQuery(hql);
      List list = query.list();
      Iterator it = list.iterator();
      while(it.hasNext()) {
         KelaStudent kelaStudent = (KelaStudent)it.next();
         System.out.print("    姓名:" + kelaStudent.getStuName());
         System.out.print("    性别:" + kelaStudent.getStuSex());
         System.out.print("    q龄:" + kelaStudent.getStuAge());
         System.out.print("    地址:" + kelaStudent.getStuAddress());
         System.out.println();
       }
    } catch(HibernateException he) {
       System.out.println("[提示]: 查询数据发生错误," + he.getMessage());
    } finally {
       HibernateUtil.closeSession();
    }
 }
 
 /*
  * 属性查?查询数据库表中需要的若干个字D?
  * q回cd为数l方?BR>  */
 public void exampleSelect_2(){
   Session session;
   Query query;
  
   String hql;
   try {
      session = HibernateUtil.currentSession();
   
      //查询KELA_STUDENT中字DؓStuNameQStuAgeQStuAddress的所有纪?BR>      //同样也可以加一些条?BR>      hql = " select kelaStudent.stuName, kelaStudent.stuAge, kelaStudent.stuAddress " +
               " from com.kela.hb.pojo.KelaStudent as kelaStudent ";
      query = session.createQuery(hql);
      List list = query.list();
      Iterator it = list.iterator();
      while(it.hasNext()) {
         Object[] rs = (Object[])it.next();
         System.out.print("    姓名:" + rs[0]);
         System.out.print("    q龄:" + rs[1]);
         System.out.print("    地址:" + rs[2]);
         System.out.println();
      }
    } catch(HibernateException he) {
       System.out.println("[提示]: 查询数据发生错误," + he.getMessage());
    } finally {
       HibernateUtil.closeSession();
    }
  }
 
 /*
  * 参数l定(使用序占位W?? ),相当于我们经怋用的Q?BR>  * select * from KELA_STUDENT where KelaID = ?    and KelaAge > ?
  */
  public void exampleSelect_3(){
    Session session;
    Query query;
  
    String hql;
     try {
        session = HibernateUtil.currentSession();
   
        //查询W合相应~号和年龄大?0的学生纪?BR>       hql = " from KelaStudent as kelaStudent " +
                " where kelaStudent.stuID = ? or kelaStudent.stuAge >= ?";
       query = session.createQuery(hql);
       //注意了是?开始的
       query.setString(0, "402880fc07dfe16f0107dfe173640001");
       query.setInteger(1, 20);
       List list = query.list();
       Iterator it = list.iterator();
       while(it.hasNext()) {
           KelaStudent kelaStudent = (KelaStudent)it.next();
           System.out.print("    姓名:" + kelaStudent.getStuName());
           System.out.print("    性别:" + kelaStudent.getStuSex());
           System.out.print("    q龄:" + kelaStudent.getStuAge());
           System.out.print("    地址:" + kelaStudent.getStuAddress());
           System.out.println();
       }
    } catch(HibernateException he) {
       System.out.println("[提示]: 查询数据发生错误," + he.getMessage());
    } finally {
       HibernateUtil.closeSession();
    }
  }
 
  /*
   * 参数l定(使用引用占位W?: ),相当于我们经怋用的Q?BR>   * select * from KELA_STUDENT where KelaID = ? and KelaAge > ?
   */
   public void exampleSelect_4(){
     Session session;
     Query query;
  
     String hql;
     try {
        session = HibernateUtil.currentSession();
   
         //查询W合相应~号的学生纪?BR>         hql = " from KelaStudent as kelaStudent " +
                  " where kelaStudent.stuID = :stuID ";
         query = session.createQuery(hql);
         //stuID 对应 :stuID
         query.setParameter("stuID", "402880fc07dfe16f0107dfe173640001");
         List list = query.list();
         Iterator it = list.iterator();
         while(it.hasNext()) {
             KelaStudent kelaStudent = (KelaStudent)it.next();
             System.out.print("    姓名:" + kelaStudent.getStuName());
             System.out.print("    性别:" + kelaStudent.getStuSex());
             System.out.print("    q龄:" + kelaStudent.getStuAge());
             System.out.print("    地址:" + kelaStudent.getStuAddress());
             System.out.println();
        }
     } catch(HibernateException he) {
         System.out.println("[提示]: 查询数据发生错误," + he.getMessage());
      } finally {
         HibernateUtil.closeSession();
      }
   }
 
   /*
    * 利用HQL的更?BR>    */
   public void exampleUpdate() {
     Session session;
     Transaction tran;
     Query query;
  
     String hql;
     try {

        session = HibernateUtil.currentSession();
        tran = session.beginTransaction();
   
         hql = " update KelaStudent " +
                  " set stuAge = 30 " +
                  " where stuID = '402880fc07dfe16f0107dfe173640001' ";
         query = session.createQuery(hql);
         System.out.println("更新的纪录条数是:" + query.executeUpdate());
         tran.commit();
     } catch (HibernateException he) {
         System.out.println("[提示]: 更新数据发生错误," + he.getMessage());
     } finally {
          HibernateUtil.closeSession();
      }
   }
 
  /*
   * 利用HQL的删?BR>   */
  public void exampleDelete() {
    Session session;
    Transaction tran;
    Query query;
  
    String hql;
    try {
        session = HibernateUtil.currentSession();
        tran = session.beginTransaction();
   
        hql = "delete KelaStudent where stuID = '402880fc080437200108043725760001'";
   
       query = session.createQuery(hql);
       System.out.println("删除U录的条数是Q? + query.executeUpdate());
        tran.commit();
     } catch(HibernateException he) {
        System.out.println("[提示]: 删除数据发生错误," + he.getMessage());
     } finally {
         HibernateUtil.closeSession();
     }
  }
  public static void main(String[] args) {
  
      StudentHQL studentHQL = new StudentHQL();
       studentHQL.exampleSelect_1();
  }

}



Kela 2005-12-08 13:29 发表评论
]]>
kela的笔?ORM产品 ---- hibernate(4)http://www.aygfsteel.com/kela/articles/22706.htmlKelaKelaTue, 06 Dec 2005 05:31:00 GMThttp://www.aygfsteel.com/kela/articles/22706.htmlhttp://www.aygfsteel.com/kela/comments/22706.htmlhttp://www.aygfsteel.com/kela/articles/22706.html#Feedback0http://www.aygfsteel.com/kela/comments/commentRss/22706.htmlhttp://www.aygfsteel.com/kela/services/trackbacks/22706.html使用Criteria Query q行数据查询

Criteria Query 是一U通过对象化的查询Qƈ数据查询条件封装ؓ一个对象?BR>单来看,可以看作是传lSQL的对象化表示Q如Q?BR>   criteria = session.createCriteria(KelaStudent.class);
   criteria.add(Expression.eq("stuName", "邓立?));
q相当于SQL?" select * from KELA_STUDENT where StuName = '邓立? "
 
q种方式的特Ҏ比hW合JavaE序员的~码习惯Q非常的Ҏ上手?/P>

更多的用方法和参数,参考Hibernate文档和深入浅出Hibernate{资料?/P>

CZ一QStudentCriteriaQuery.java 一个基?Criteria Query 的查?BR>
/**
 * StudentCriteriaQueryl.java
 *
 * Z Criteria Query 的对象化查询
 */
package com.kela.hb.model;

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

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;

import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;

/**
 * @author kangfeng(kela.kf@gmail.com)
 *
 */
public class StudentCriteriaQuery {
 
  /*
   * 带有表达式的 Criteria 查询
   */
   public void exampleSelect_1() {
      Session session;
      Criteria criteria;
      try {
         session = HibernateUtil.currentSession();
         criteria = session.createCriteria(KelaStudent.class);
   
          //关于Expression提供的对应查询限定机? 可在Hibernate的文中获得详细资料
          //如果没有一下的查询条g则查询所有的数据?KELA_STUDENT 的纪?BR>   
          //查询数据库表 KELA_STUDENT 中 StuName = '邓立?的纪?
          //查询条g中的stuName对应com.kela.hb.pojo.KelaStudent的属性stuName
          //criteria.add(Expression.eq("stuName", "邓立?));
   
          //查询q龄大于25岁的学生U录
          criteria.add(Expression.gt("stuAge", new Integer(25)));
  
           //如果同时出现几个限定条g,?StuName = '邓立?; stuAge > 25 则取交集
   
           KelaStudent kelaStudent = new KelaStudent();
   
           List list = criteria.list();
           Iterator it = list.iterator();
           while(it.hasNext()) {
                kelaStudent = (KelaStudent)it.next();
                System.out.print("  ~号:" + kelaStudent.getStuID());
                System.out.print("  名称:" + kelaStudent.getStuName());
                System.out.print("  性别:" + kelaStudent.getStuSex());
                System.out.print("  q龄:" + kelaStudent.getStuAge());
                System.out.print("  地址:" + kelaStudent.getStuAddress());
                System.out.println();
           }
       } catch (HibernateException e) {
            System.out.println("[提示]: 查询没有成功," + e.getMessage());
       } finally {
            HibernateUtil.closeSession();
     }
  }
 
  /*
   * CZ查询,Ҏ已有的对象,查询属性与之相W的其它对象
   */
  public List exampleSelect_2(KelaStudent kelaStudent) {
      Session session;
      Criteria criteria;
      try {
          session = HibernateUtil.currentSession();
          criteria = session.createCriteria(KelaStudent.class);
          criteria.add(Example.create(kelaStudent));
          return criteria.list();
      } catch (HibernateException he) {
         System.out.println("[提示]: 查询发生错误," + he.getMessage());
         return null;
      } finally {
         HibernateUtil.closeSession();
      }
  }
 
  /*
   * 调用CZ查询Qƈ打印l果
   * q种查询q不常用Q但是在l合查询中非常的有用途?BR>   * 比如要查询的条g有多个,但不能确定的时候,可以按照下面的例子用,直接讑֮查询的条Ӟ
   * ?nbsp;后将对象传入卛_查询?BR>   */
   public void exampleSelect_3() {
      KelaStudent kelaStudent = new KelaStudent();
      //在这里可以设|多个条Ӟ如年龄,地址{?BR>      kelaStudent.setStuName("邓立?);
  
     List list = exampleSelect_2(kelaStudent);
     Iterator it = list.iterator();
     while(it.hasNext()) {
         kelaStudent = (KelaStudent)it.next();
         System.out.print("  ~号:" + kelaStudent.getStuID());
         System.out.print("  名称:" + kelaStudent.getStuName());
         System.out.print("  性别:" + kelaStudent.getStuSex());
         System.out.print("  q龄:" + kelaStudent.getStuAge());
         System.out.print("  地址:" + kelaStudent.getStuAddress());
         System.out.println();
     }
  
   }
 
   public static void main(String[] args) {
          StudentCriteriaQuery scq = new StudentCriteriaQuery();
  
          //查询q龄大于25的学生纪?BR>          scq.exampleSelect_1();

          //按照l定的条件进行查询,q里?name = '邓立?
          //scq.exampleSelect_3();
   }  

}



Kela 2005-12-06 13:31 发表评论
]]>
kela的笔?ORM产品 ---- hibernate(3)http://www.aygfsteel.com/kela/articles/20934.htmlKelaKelaTue, 22 Nov 2005 05:02:00 GMThttp://www.aygfsteel.com/kela/articles/20934.htmlhttp://www.aygfsteel.com/kela/comments/20934.htmlhttp://www.aygfsteel.com/kela/articles/20934.html#Feedback2http://www.aygfsteel.com/kela/comments/commentRss/20934.htmlhttp://www.aygfsteel.com/kela/services/trackbacks/20934.html一个Hibernate版本的“Hello World?BR>
1. 搭徏环境
     建立目Q?/STRONG>名称为HibernateProjectQ如下图Q?BR>     hb001.BMP
      下蝲Hibernate发行包:
       q里使用 Hibernate3.X Q因?Hibernate ?.X 上性能有了更大的提升。(也可以采?2. X的版本,3.X ?2.X 之间的差异不多,q里的“不多”是从用者的角度来看Q在需要注意的地方Q会注明Q另?3.X ?2.X 差异表一张)
      下蝲地址Q?A >http://www.hibernate.org ?http://www.redsaga.com 的努力之下,Hibernate 的官方发行包中( doc\reference 下)Q始l有高质量的中文官方文Q非常的感谢他们?BR>      在ClassPath 中设|系l开发需要的cdQ?BR>      在项目的lib目录下添加以下类? .jar) 文gQƈ且将q些 .jar 指定在系l?nbsp;ClassPath 中。(MQ无论在哪种环境中都必须保证pȝ能找到我们设|的 .jar ?BR>        a.数据库驱动程?BR>           数据库?MS SQL SERVER Q以下是MS ?JDBC 驱动。( MS ?JDBC 驱动不是 Hibernate 官方的推荐驱动,在实际的目中,朋友们可以根?Hibernate  开发文中的配|说明进行取舍)   
           msbase.jar,  mssqlserver.jar, msutil.jar
        b.Hibernate 3.X 的类?BR>           发行包下的 hibernate3.jar 文g复制?目QHibernateProjectQ的 lib 目录下?BR>        c.Hibernate需要的W三方类?BR>           发行包?lib 目录下的 .jar 文g复制到项目(HibernateProjectQ的 lib 目录下?BR>           需要注意的是,我们q里全部的 .jar 攑֜了lib中,在实际的开发中可以Ҏ文配置的说明,q行选择?BR>       
2. 建立数据?BR>    数据库名Uͼhbdb
create database hbdb;
    数据表名UͼKELA_STUDENT  
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[KELA_STUDENT]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[KELA_STUDENT]
GO

CREATE TABLE [dbo].[KELA_STUDENT] (
 [StuID] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,        -- PK
 [StuName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,            --学生姓名
 [StuSex] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,                      --学生性别
 [StuAge] [smallint] NULL ,                                                                             --学生q龄
 [StuAddress] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL         --学生地址
) ON [PRIMARY]
GO

3. ?发行包下 ehcache.xml 文g复制?src ?nbsp;
    在Hibernate3? 如果没有q个文g会出?BR>        WARN Configurator:126 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in
         the classpath: jar:file:/D:/J2eeProject/HibernateProject/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
        的错误?BR>    该文件ؓ Hibernate 的本w的 Cache 配置?BR>4. Hibernate 配置
    Hibernate 配置文g主要用于配置数据库连接和Hibernateq行时所需要的各种属性(如,q接池,SQL方言Q是否现实SQL日志{)?BR>    Hibernate 同时支持 xml 格式的配|文件各传统?properties 文g配置形式Q这里采?xml ?BR>    配置文g名默认ؓ hibernate.cfg.xmlQ或 hibernage.propertiesQ,Hibernate在初始化期间自动?classPath中寻找这个文Ӟq读取其中的配置信息Qƈ加蝲?BR>    以下?hibernate.cfg.xml 文gQ在目 HibernateProject 的src 下放以下内容Q:
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "

<hibernate-configuration>
 <session-factory>
  
  <!-- 是否运行期生成的SQL输出到日志以供调?-->
  <property name="hibernate.show_sql">
   true
  </property>
  
  <!-- SQL 方言-->
  <property name="hibernate.dialect">
   org.hibernate.dialect.SQLServerDialect
  </property>
  
  <!-- 数据库用?-->
  <property name="hibernate.connection.username">
   sa
  </property>
  
  <!-- 数据库密?-->
  <property name="hibernate.connection.password">
   123456
  </property>
  
  <!-- 数据?JDBC 驱动-->
   <property name="hibernate.connection.driver_class">
   com.microsoft.jdbc.sqlserver.SQLServerDriver
  </property>
  
  <!-- 数据?URL -->
  <property name="hibernate.connection.url">
   jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hbdb
  </property>
  
  <!-- 事务理cd -->
  <!-- Hibernate 3 对包名做了修?Q?net.sf.hibernate  => org.hibernate Q?->
  <property name="hibernate.transaction.factory_class">
   org.hibernate.transaction.JDBCTransactionFactory
  </property>
  
  <!-- c3p0 q接?-->
  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
  <property name="hibernate.c3p0.max_size">2</property>
  <property name="hibernate.c3p0.min_size">2</property>
  <property name="hibernate.c3p0.timeout">50000</property>
  <property name="hibernate.c3p0.max_statements">100</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <property name="hibernate.c3p0.validate">false</property>
 
  
  <!-- 映射的配|文Ӟ对应数据库表 KELA_STUDENT 的映文Ӟ在后面将看到q个文g的配|?-->
  <mapping resource="com/kela/hb/pojo/KelaStudent.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

5. 日志配置
在Hibernate发行包的etc目录下找?log4j.properties CZ配置文gQ可以修改其中的日志U别Q也可直接用?BR>在src下,攄 log4j.properties 文gQ内容如下:
# log4j #
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=warn, stdout

#讄昄 error以上U别log
log4j.logger.org.hibernate=error 

6. 构徏 POJO cdHibernate映射( .hbm.xml)文g
        说明Q根据数据库定义导出表结构,q自动生成对应的映射文g和POJO java代码Q是实际开发当中最常用的方式,也是专家所推荐的。可以?MiddleGen -- HibernateQHibernate -- Extensions {的工具Q这些工L使用非常的方便,只修修改相应?ant 构徏文g卛_Q在|络上可以很Ҏ的找到这些工L使用Ҏ?BR>        q里采用手工~写 POJO 和映文件的ҎQ是Z开发者更好理?Hibernate q作机制而考虑。付出手工编写会产生疏漏和错误的代hQ我觉得在学习阶D|值得的?BR>      以下是这两个文gQ他们的位置都在   com.kela.hb.pojo 下面?BR>POJOc:com.kela.hb.pojo.KelaStudent
 /**
  * KelaStudent.java
  */
package com.kela.hb.pojo;

import java.io.Serializable;

public class KelaStudent implements Serializable {

 private static final long serialVersionUID = 8365163573354176897L;
 
 String stuID;
 String stuName;
 String stuSex;
 Integer stuAge;
 String stuAddress;
 
 public KelaStudent() {
  
 }

 public String getStuAddress() {
  return stuAddress;
 }

 public void setStuAddress(String stuAddress) {
  this.stuAddress = stuAddress;
 }

 public Integer getStuAge() {
  return stuAge;
 }

 public void setStuAge(Integer stuAge) {
  this.stuAge = stuAge;
 }

 public String getStuID() {
  return stuID;
 }

 public void setStuID(String stuID) {
  this.stuID = stuID;
 }

 public String getStuName() {
  return stuName;
 }

 public void setStuName(String stuName) {
  this.stuName = stuName;
 }

 public String getStuSex() {
  return stuSex;
 }

 public void setStuSex(String stuSex) {
  this.stuSex = stuSex;
 }
}

映射文gQKelaStudent.hbm.xml
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "

<hibernate-mapping>
 
 <class name="com.kela.hb.pojo.KelaStudent" table="KELA_STUDENT">
  
  <!-- id 节点配置了表的主?->
  <id
   name="stuID"                  //POJOcL的ID
   column="StuID"              //数据库中的主键名U?BR>   type="java.lang.String"    //字符cd
  >
    <generator class="uuid.hex"/>   //q里的uuid.hex代表了一U主键的生成方式
  </id>
  
   <property
        name="stuName"       //POJO中的属?BR>      column="StuName"     //属性对应数据库字段的名U?BR>      type="java.lang.String" //属性类?BR>     />
  
  <property
      name="stuSex"
      column="StuSex"
      type="java.lang.String"
     />
  
  <property
      name="stuAge"
      column="StuAge"
      type="java.lang.Integer"
     />
  
  <property
      name="stuAddress"
      column="StuAddress"
      type="java.lang.String"
     />
  
 </class>
</hibernate-mapping>

7. 试代码
HelloTest  . java

package com.kela.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;

public class HelloTest {

    Session session = null;
 
     public void testInsert() {

        Transaction tran = null;

        try {

           //?nbsp; HibernateUtil 得到 hibernate的session,  HibernateUtil .java 文g在后
           session = HibernateUtil.currentSession();
           //启动事务
           tran = session.beginTransaction();
   
           KelaStudent kelaStudent = new KelaStudent();
           //插入数据
           kelaStudent.setStuName("王小?);
           kelaStudent.setStuSex("T");
           kelaStudent.setStuAge(new Integer(26));
           kelaStudent.setStuAddress("甘肃兰州");
          
           //保存q提交事?BR>           session.save(kelaStudent);
           session.flush();
           tran.commit();
   
        } catch (HibernateException he){
   
           System.out.println("q行中发生了错误");
           try {
               HibernateUtil.closeSession();
           } catch (HibernateException he2) {
               System.out.println("关闭 session 没有成功");
           }
        }
 
    }
 
    public static void main(String[] args) {
        System.out.println(" ========= 开始测?==========");
        HelloTest helloTest = new HelloTest();
        helloTest.testInsert();
        System.out.println(" ========= SUCCESS ==========");
    }

}

下面?HibernateUtil  . java
/**
 * HibernateUtil.java
 */
package com.kela.hb.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

   private static Log log = LogFactory.getLog(HibernateUtil.class);

   private static final SessionFactory sessionFactory;

   static {
       try {
           sessionFactory = new Configuration().configure().buildSessionFactory();
       } catch (Throwable ex) {
           log.error("初始?SessionFactory 发生错误.", ex);
           throw new ExceptionInInitializerError(ex);
       }
    }

     public static final ThreadLocal session = new ThreadLocal();

     public static Session currentSession() {
         Session s = (Session) session.get();
         if (s == null) {
            s = sessionFactory.openSession();
            session.set(s);
        }
     return s;
    }

    public static void closeSession() {
        Session s = (Session) session.get();
        if (s != null)
           s.close();
        session.set(null);
    }

}

8. q行l果
    q行 HelloTest.java 文gQ观察数据库中的l果Q可以看C条数据被d了进来?BR>
   数据库结果:
   402880fc07c68f690107c68f6dfd0001          王小?nbsp;        T         26         甘肃兰州
   
   在控制台看到如下日志Q?BR>    Hibernate:
    insert into KELA_STUDENT (StuName, StuSex, StuAge, StuAddress, StuID) values (?, ?, ?, ?, ?)
  
    是q么奇。不需要指?SQL 语句一栯实现SQL的功能?BR>
9. 关于试代码的解?BR>    在Hibernate中session完成持久化操作,要创Z个Session实例大致需?个步骤:
    A. 初始化Hibernate配置理cConfiguration

         //d默认的配|文?hibernate.cfg.xml ?hibernate.properties)来创Z个Configuration
         Configuration config = new Configuration().configure();  
    B. 通过Configurationcȝ实例来创?Session 的工厂类 SessionFactoryQ?BR>        
         SessionFactory sessionFactory = config.buildSessionFactory();

    C. 通过SessionFactory得到Session实例Q?BR>  
         session = sessionFactory.openSession();

    D. 通过Session实例完成持久化操作:

           //启动事务
           tran = session.beginTransaction();
   
           KelaStudent kelaStudent = new KelaStudent();
           //插入数据
           kelaStudent.setStuName("王小?);
           kelaStudent.setStuSex("T");
           kelaStudent.setStuAge(new Integer(26));
           kelaStudent.setStuAddress("甘肃兰州");
          
           //保存q提交事?BR>           session.save(kelaStudent);
           session.flush();
           tran.commit();

      说明Q由于SessionFactory采取了线E安全的设计Q可以有多个U程q发调用Q大多数情况下,一个应用中针对一个数据库׃n一个SessionFactory实例卛_?BR>                  SessionQ这里的Session是Hibernate的SessionQ可以理解成相当于JDBC 的ConnectionQ,它的设计是非U程安全的也是说一个Session实例只可以由一个线E用?BR>                  有了以上两点的考虑Q在 HelloTest.java中在得到Session实例使用了:

           //?nbsp; HibernateUtil 得到 hibernate的session,  HibernateUtil .java 文g在后
           session = HibernateUtil.currentSession();

          
           在HibernateUtil.java 文g中创建SessionQ关闭Session。(q段代码来自于Hibernate文档Q?BR>           q就相当于我们^时从数据库连接池中得?ConnectionQ用完了 close.conn() 是一L道理?BR>
    



Kela 2005-11-22 13:02 发表评论
]]>
kela的笔?ORM产品 ---- hibernate(2) http://www.aygfsteel.com/kela/articles/19895.htmlKelaKelaTue, 15 Nov 2005 07:19:00 GMThttp://www.aygfsteel.com/kela/articles/19895.htmlhttp://www.aygfsteel.com/kela/comments/19895.htmlhttp://www.aygfsteel.com/kela/articles/19895.html#Feedback0http://www.aygfsteel.com/kela/comments/commentRss/19895.htmlhttp://www.aygfsteel.com/kela/services/trackbacks/19895.html        Hibernate有那么多的优点,那么q些优点在我们的应用开发中是如何体现呢Q确切的说我们不是因Z行而用它而是因ؓ它能l我们的开发带来帮助,能提高系l的性能?BR>        Hibernate是持久层的框Ӟ那就的先从持久层说v。看看我们通常的持久层是如何做的?BR>        1. 关于持久层的介绍Q?BR>        MVC作ؓL的系l架构模式,已被来多的开发者所使用。MVC中的MQ也是Model则包含着大量的业务逻辑和数据逻辑Q持久层作ؓModel中的重要l成Q其设计的优劣将对系l的整体表现产生臛_重要的媄响?BR>       “持久层”,也就是在pȝ逻辑层面上,专注于实现数据持久化Q对内存的数据进行固化,通常指保存至住据库)的一个相对独立的领域。也意味着Q我们的pȝ架构中,因该有一个相对独立的逻辑层面Q专注于数据持久化逻辑的实玎ͼ与系l其他部门相对而言Q这个层面应该拥有一个较为清晰和严格的逻辑边界?BR>        2. 持久层的设计
        场景Q(在“深入浅出Hibernate”中一个非常好的例子)Q用戯入网上商店进行购物结,那么他有以下的业务处理逻辑?BR>            1Q根据客户ID取出客户当前{Q如Q普通会员,VIPQ?BR>            2Q根据客LU获得打折比率?BR>            3Q根据总金?× 打着比率计算到实际支付的金额?BR>            4Q将本次实际的支付的金额累积到客L计消贚w额的字段中?BR>            5Q返回实际金额?BR>        AҎQ有的朋友可能这样处理:
          public calss NetShop {
               ......

               /*
                * 购物l算
                */
                public BigDecimal balance(String userID) {
                      conn = ......
                      try {
                            //获取当前{Q?select
                            ......
                     } catch () { }
                     try {
                          //获得打折比率Q?select
                          //计算实际支付金额
                          ......
                    } catch () { }

                   try {
                        //支付的金额累计到篏U消费中Q?update
                        //修改客户现有的余?BR>                        ......
                  } catch () {}


                  //q回实际的消贚w?BR>                  return new BigDecimal(****);
             }
         }
         B. 那另外的一些朋友他们会_在A里面h的业务逻辑和数据访问代码极大的q扰了阅ȝ序的人,而且q样的代码将l日后的l护带来极大的困难(我也是这栯为哦 ~ ~Q。如果我们的实际应用当中的业务逻辑变得非常庞大和复杂的时候,A的做法显然有忧缺点的。于是,有了下面的攚w:
         public calss NetShop {
              ......

              /*
               * 购物l算
               */
             public BigDecimal balance(String userID) {
                A a = new A();
                String gradeStr = null;  //客户U别
                long agioLong = 0.0;

               //获取当前{
               gradeStr = a.getUserGarde(userID);

               //Ҏ{计算打折比率
               agioLong = a.getAgio(gradeStr);

               //累计客户消费金额
               a.updateCustMoney(userID, agioLong);

               //修改客户余额
               a.updateUserBalance(userID, agioLong);
        
              //q回消费金额
              return new BigDecimal(****);

            }
         }

          public class A {
               //dC面对Ҏ
          }
          可以说B的实现方式,是我Q呵呵,大多数可不敢pQ经怋用的方式Q在实际的应用当中结合一些数据库性能上的优化Q连接池Q预~译语句之类的)Q基本上已经实现了,业务和数据层的分R?BR>          然而,在现在客L应用需求和公司考虑可重用等因素的媄响下Q我们有不得不去考虑Q我们的应用能不能实C格意义上的跨数据库用,或者说Q我们的应用从一个数据迁Ud另外一个数据的时候,是不是只做很的改动Q因为,现在有很多的目需要引入第三方的品,它山之石可以ȝ嘛)。带着q样的疑问,那我们是不是会写很多的基于特定数据库的数据层处理代码Q当然了Q这也是个好办法Q。现在我们就要引入Hibernate了,我觉得选择一个比我们自己的实现方式更好的实现方式Q是一个更加聪明的决策。那么Hibernate能干什么?
           1Q减乏味的代码
                无论是AҎq是BҎ我们都少不了大量的数据库q接Q查询,关闭{代码,写得多了也就觉得烦了QHibernate装了数据库持久层大多数技术细节,如事物管理,q接理Qsql执行{?BR>                臛_q点Q我们是需要的?BR>           2Q更加面向对象的设计
                 是说像设计对象一L去设计和操作数据库。这条可能现在还不能理解?BR>           3Q更好的性能
                  我觉得这条好理解多了Q系出名门和专家之手的框Ӟ肯定提供了非怼U的性能优化机制。比如,对连接池QPreparedSatatement ~存Q数据缓存等。这Ҏ们可以大可放心,因ؓ使用者决定了它的优秀?BR>            4Q更好的UL?BR>                   我们只需要简单得修改其的配置参数Q即可实现底层数据库的良好切换(q也是有前提的哦Q可不能使用特定数据库都有的Ҏ)。这条的好处是显而易见的?BR>
            关于引入Hibernate有什么好处,我觉得以上就_了,它确实能帮助我们?/P>

Kela 2005-11-15 15:19 发表评论
]]>
kela的笔?ORM产品 ---- hibernate(1)http://www.aygfsteel.com/kela/articles/19678.htmlKelaKelaMon, 14 Nov 2005 05:23:00 GMThttp://www.aygfsteel.com/kela/articles/19678.htmlhttp://www.aygfsteel.com/kela/comments/19678.htmlhttp://www.aygfsteel.com/kela/articles/19678.html#Feedback0http://www.aygfsteel.com/kela/comments/commentRss/19678.htmlhttp://www.aygfsteel.com/kela/services/trackbacks/19678.html        2. Hibernate的说?BR>            作ؓ一个品应用的开发者了解一些品本w的信息也是必要的?BR>            2001q末QHibernateW一个正式版本对外发布,之后的两q时间Hibernateq速成长v来,2003.6.8 Hibernate2的发布ؓHibernate奠定了成功的基石?003q末QHibernate获得了Jolt 2004大奖以及Hibernate被业内知名开源组lJBoss收纳Q成Z属于JBossl织的子目之一?BR>            Hibernate是一个面向Java环境的ORMlgQ解x案,持久层框ӞQ用来把对象模型表示的对象映到ZSQL的关pL型结构中厅R也是说我们将对象与对象的关系对应到关pd数据库中的表g表格之间的关p,也可以理解成像操作对象一LL作数据库?BR>            Hibernate不仅仅管理Javacd数据库表的映,q提供数据查询,事物理Q缓存管理,延迟加蝲{的实现。可以大q度的减开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是对于开发者通常的数据持久化相关的编EQ务,解放其中?5%?BR>            对于以数据ؓ中心的程序来?它们往往只在数据库中使用存储q程来实现商业逻辑,Hibernate可能不是最好的解决Ҏ;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。不怎样QHibernate一定可以帮助你消除或者包装那些针对特定厂商的SQL代码Qƈ且帮你把l果集从表格式的表示形式转换Cpd的对象去?BR>

Kela 2005-11-14 13:23 发表评论
]]>
վ֩ģ壺 | ³ľ| Ȩ| Ϫ| | | ɽ| ̨ɽ| | ԭ| ʡ| Դ| ̨| ½| üɽ| Ԫ| | | ɽ| Զ| | ľ| ͭɽ| | | ɳ| | | | ɳ| ½| | | | ±| | | | | ̩| |