`
senton
  • 浏览: 201194 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

Hibernate学习笔记

阅读更多

J2EE体系结构分为三层:
1.表示层(JSP/Servlet)
2.业务层(EJB/Session Bean)
3.数据层(JDBC/EJB(Entiry Bean))。
EJB诞生于98/99年,性能存在很大问题,占用服务器资源多,导致机器瘫痪等严重后果.EJB对数据层的解决方案:实体Bean,使用的是代理模式.
EJB3.0:持久层,没有实体Bean,发布于2006年5月8号,吸收了Hibernate的思想,但是EJB必须要在服务器上才能运行,Hibernate脱离服务器.

Servlet存在的问题:编写HTML代码非常困难,2000年5月诞生了Struts解决了表示层的问题.

Hibernate所在的层次:位于数据层,解决怎么连接数据库.更确切的说是解决ORM,性能高,完整的ORM解决方案.它诞生于2001年,是Gavin King

业余时间的作品.从此,java开发人员对EJB的狂热追捧结束。

业务层:2004年出来的Spring解决了业务层的问题.

 调用  调用  调用
Struts-------->Spring-------->Hibernate--------->Database

Hibernate核心思想:将数据库中的数据映射到JavaBean对象上,并可直接将对象属性上的数据写到数据库相应字段上。

下面来开始写第一个Hibernate程序:
1.创建一个JavaBean,User.java,提供一些了getter,setter方法来操作里面的属性,此Bean对应数据库中的users表:
package cn.itcast;

public class User {
 private int id;

 private String name;

 private int age;

 private int gender;
 
 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public int getGender() {
  return gender;
 }

 public void setGender(int gender) {
  this.gender = gender;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

2.创建Hibernate配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
 <!-- SessionFactory配置 -->
 <session-factory>
  <!-- 指定jdbc驱动 -->
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <!-- 指定URL -->
  <property name="connection.url">jdbc:mysql:///hibernate</property>
  <!-- 指定用户名 -->
  <property name="connection.username">root</property>
  <!-- 指定密码 -->
  <property name="connection.password">tianxiangdong</property>
  <!-- 指定MYSQL对应的Dialect以匹配其平台特性 -->
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <!-- 是否将运行期生成的SQL语句输出到控制台 -->
  <property name="show_sql">true</property>
  <!-- 是否格式化输出的SQL语句 -->
  <property name="format_sql">true</property>
  <!-- 映射文件配置,注意文件名必须包含其相对于根的全路径 -->
  <mapping resource="cn/itcast/User.hbm.xml" />
 </session-factory>
</hibernate-configuration>

3.创建类表映射配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 根元素,这是固定的 -->
<hibernate-mapping>
 <!-- name属性指定映射类名,table属性指定此类所对应的数据库表名-->
 <class name="cn.itcast.User" table="users">
  <!-- id子元素定义了实体的标识列,指定了当前映射类名的id对应表中的id -->
  <id name="id" column="id">
   <!-- 因为各种数据库的标识列生成方式有所不同,这里指定id生成方式 -->
   <generator class="identity" />
  </id>
  <!--
   属性/字段映射,如果名字相同,可以忽略后面的cloumn,
   例如下面的<property name="gender" column="gender" />
   可以换成<property name="gender"/>
  -->
  <property name="name" column="user_name" />
  <property name="age" column="use_age" />
  <property name="gender" column="gender" />
 </class>
</hibernate-mapping>

4.编写客户端的类来测试:
package cn.itcast;

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

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

public class Client {

 public static void main(String[] args) {
  /**
   * Configuration负责管理Hibernate配置信息.当我们调用下面这条语句时,
   * Hibernate会在当前的CLASSPATH中搜寻hibernate.cfg.xml文件,并将
   * 其加载到内存中.                                            
   * Configuration对象的configure方法,提供了不同的形式:
   * Configuration configure()
   * Configuration configure(org.w3c.dom.Document document)
   * Configuration configure(File configFile)
   * Configuration configure(String resource)
   * Configuration configure(URL url)
   * 在使用时,可以根据不同的需要做不同的配置。
   */
  Configuration config = new Configuration().configure();

  /**
   * Configuration实例config会根据配置信息构造出SessionFactory实例.
   * Hibernate建议一个应用程序只能有一个SessionFactoty实例
   */
  SessionFactory factory = config.buildSessionFactory();
  
  /**
   * Session是Hibernate持久化操作的基础.它的实例由SessionFactory
   * 负责创建.Hibernate建议一个线程只创建一个session,
   */
  Session session = null;
  
  try {
   session = factory.openSession();

   /**
    * 开始一个事务
    */
   session.beginTransaction();

   /**
    * session的save方法
    */
   // User user = new User();
   // user.setName("lisi");
   // user.setAge(56);
   // user.setGender(0);
   // session.save(user);
   /**
    * get方法
    */
   //User user = (User)session.get(User.class,2);
   /**
    * update方法
    */
   //User user = (User)session.get(User.class,2);
   //user.setAge(33);
   /**
    * delete方法
    */
   //  User user = (User)session.get(User.class,2);
   //  session.delete(user);
   //也可以通过HQL指定删除条件
   //  session.createQuery("delete User where id=2").executeUpdate();

   /**
    * 通过Query接口进行数据查询
    */
   List list = session.createQuery(" from User").list();
   Iterator iterator = list.iterator();
   User user = new User();

   while (iterator.hasNext()) {
    user = (User) iterator.next();
    System.out.println(user.getId() + "\t" + user.getName() + "\t"
      + user.getAge() + "\t" + user.getGender());
   }

   /**
    * 提交事务
    */
   session.getTransaction().commit();
  } catch (Exception e) {
   /**
    * 发生异常则回滚
    */
   session.getTransaction().rollback();
   e.printStackTrace();   
  } finally{
   /***
    * 关闭session
    */
   session.close();
   /**
    *
    */
   session = null;
  }  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics