Hibernate 3.0 HelloWorld

 说明

基于Hibernate 3.0,Mysql5.0,java jdk 1.7,运行需要的lib 库,从http://files.cnblogs.com/HCCZX/Hibernate_Lib.rar  下载。
下面开始一步步写代码

 

1.创建数据库

drop database if exists SAMPLEDB;

create database SAMPLEDB;

use SAMPLEDB;



create table CUSTOMERS (

  ID bigint not null primary key,

  NAME varchar(15) not null,

  EMAIL varchar(128) not null,

  PASSWORD varchar(8) not null,  

  PHONE int ,  

  ADDRESS varchar(255),

  SEX char(1) ,

  IS_MARRIED bit,

  DESCRIPTION text,

  IMAGE blob,

  BIRTHDAY date,

  REGISTERED_TIME timestamp

);

2.添加java  VO 对象,也叫 pojo,javabean,不知为啥这么多个叫法。

package mypack;



import java.io.Serializable;

import java.sql.Date;

import java.sql.Timestamp;



public class Customer implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String name;

    private String email;

    private String password;

    private int phone;

    private String address;

    private char sex;

    private boolean married;

    private String description;

    private byte[] image;

    private Date birthday;

    private Timestamp registeredTime;



    public Customer() {

    }



    public Long getId() {

        return id;

    }



    @SuppressWarnings("unused")

    private void setId(Long id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public String getEmail() {

        return email;

    }



    public void setEmail(String email) {

        this.email = email;

    }



    public String getPassword() {

        return password;

    }



    public void setPassword(String password) {

        this.password = password;

    }



    public int getPhone() {

        return phone;

    }



    public void setPhone(int phone) {

        this.phone = phone;

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address;

    }



    public char getSex() {

        return sex;

    }



    public void setSex(char sex) {

        this.sex = sex;

    }



    public boolean isMarried() {

        return married;

    }



    public void setMarried(boolean married) {

        this.married = married;

    }



    public String getDescription() {

        return description;

    }



    public void setDescription(String description) {

        this.description = description;

    }



    public byte[] getImage() {

        return this.image;

    }



    public void setImage(byte[] image) {

        this.image = image;

    }



    public Date getBirthday() {

        return this.birthday;

    }



    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }



    public Timestamp getRegisteredTime() {

        return this.registeredTime;

    }



    public void setRegisteredTime(Timestamp registeredTime) {

        this.registeredTime = registeredTime;

    }



}

3.添加Hibernate 对象关系映射文件

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">



<hibernate-mapping>

  <class name="mypack.Customer" table="CUSTOMERS">

     

    <id name="id" column="ID" type="long">

      <generator class="increment"/>

    </id>

    <property name="name"  column="NAME"  type="string" not-null="true" />  

    <property name="email"     column="EMAIL"     type="string" not-null="true" /> 

    <property name="password"  column="PASSWORD"  type="string" not-null="true"/> 

    <property name="phone"     column="PHONE"     type="int" /> 

    <property name="address"   column="ADDRESS"   type="string" /> 

    <property name="sex"       column="SEX"       type="character"/>  

    <property name="married"   column="IS_MARRIED"  type="boolean"/>      

    <property name="description"   column="DESCRIPTION"  type="text"/>      

    <property name="image"         column="IMAGE"        type="binary"/>

    <property name="birthday"      column="BIRTHDAY"     type="date"/>

    <property name="registeredTime" column="REGISTERED_TIME"  type="timestamp"/>  



  </class>



</hibernate-mapping>

4.添加Hibernate  配置文件 hibernate.properties

hibernate.dialect=org.hibernate.dialect.MySQLDialect

hibernate.connection.driver_class=com.mysql.jdbc.Driver

hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDB

hibernate.connection.username=root

hibernate.connection.password=aaaaaa

hibernate.show_sql=true

5.添加底层操作代码

package mypack;



import javax.servlet.*;



import org.hibernate.*;

import org.hibernate.cfg.Configuration;



import java.io.*;

import java.sql.Date;

import java.util.*;



public class BusinessService{

  public static SessionFactory sessionFactory;

  

  /** 初始化Hibernate,创建SessionFactory实例 */

  static{

    try{

      // 根据默认位置的Hibernate配置文件的配置信息,创建一个Configuration实例

      Configuration config = new Configuration();

      //加载Customer类的对象-关系映射文件

      config.addClass(Customer.class);

      // 创建SessionFactory实例 */

      sessionFactory = config.buildSessionFactory();

    }catch(RuntimeException e){e.printStackTrace();throw e;}

  }

  

  /** 查询所有的Customer对象,然后调用printCustomer()方法打印Customer对象信息 */

  public void findAllCustomers(ServletContext context,PrintWriter out) throws Exception{

    Session session = sessionFactory.openSession(); //创建一个会话

    Transaction tx = null;

    try {

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

      Query query=session.createQuery("from Customer as c order by c.name asc");

      @SuppressWarnings("unchecked")

       List<Customer> customers=query.list();

      for (Iterator<Customer> it = customers.iterator(); it.hasNext();) {

         printCustomer(context,out,it.next());

      }



      tx.commit(); //提交事务



    }catch (RuntimeException e) {

      if (tx != null) {

         tx.rollback();

      }

      throw e;

    } finally {

       session.close();

    }

  }



  /** 持久化一个Customer对象 */

  public void saveCustomer(Customer customer){

    Session session = sessionFactory.openSession();

    Transaction tx = null;

    try {

      tx = session.beginTransaction();

      session.save(customer);

      tx.commit();



    }catch (RuntimeException e) {

      if (tx != null) {

        tx.rollback();

      }

      throw e;

    } finally {

      session.close();

    }

  }



  /** 按照OID加载一个Customer对象,然后修改它的属性 */

  public void loadAndUpdateCustomer(Long customer_id,String address){

    Session session = sessionFactory.openSession();

    Transaction tx = null;

    try {

      tx = session.beginTransaction();



      Customer c=(Customer)session.get(Customer.class,customer_id);

      c.setAddress(address);

      tx.commit();



    }catch (RuntimeException e) {

      if (tx != null) {

        tx.rollback();

      }

      throw e;

    } finally {

      session.close();

    }

  }



  /**删除Customer对象 */

  public void deleteCustomer(Customer customer){

    Session session = sessionFactory.openSession();

    Transaction tx = null;

    try {

      tx = session.beginTransaction();

      session.delete(customer);

      tx.commit();



    }catch (RuntimeException e) {

      if (tx != null) {

        tx.rollback();

      }

      throw e;

    } finally {

      session.close();

    }

  }

  

  /** 选择向控制台还是Web网页输出Customer对象的信息 */

  private void printCustomer(ServletContext context,PrintWriter out,Customer customer)throws Exception{

     if(context!=null)

       printCustomerInWeb(context,out,customer);

     else

       printCustomer( out,customer);

  }

  

  /** 把Customer对象的信息输出到控制台,如DOS 控制台*/

  private void printCustomer(PrintWriter out,Customer customer)throws Exception{

    byte[] buffer=customer.getImage();

    FileOutputStream fout=new FileOutputStream("photo_copy.gif");

    fout.write(buffer);

    fout.close();



    out.println("------以下是"+customer.getName()+"的个人信息------");

    out.println("ID: "+customer.getId());

    out.println("口令: "+customer.getPassword());

    out.println("E-Mail: "+customer.getEmail());

    out.println("电话: "+customer.getPhone());

    out.println("地址: "+customer.getAddress());

    String sex=customer.getSex()=='M'? "男":"女";

    out.println("性别: "+sex);

    String marriedStatus=customer.isMarried()? "已婚":"未婚";

    out.println("婚姻状况: "+marriedStatus);

    out.println("生日: "+customer.getBirthday());

    out.println("注册时间: "+customer.getRegisteredTime());

    out.println("自我介绍: "+customer.getDescription());



  }



  /** 把Customer对象的信息输出到动态网页 */

  private void printCustomerInWeb(ServletContext context,PrintWriter out,Customer customer)throws Exception{

    //保存照片

    byte[] buffer=customer.getImage();

    String path=context.getRealPath("/");

    FileOutputStream fout=new FileOutputStream(path+"photo_copy.gif");

    fout.write(buffer);

    fout.close();



    out.println("------以下是"+customer.getName()+"的个人信息------"+"<br>");

    out.println("ID: "+customer.getId()+"<br>");

    out.println("口令: "+customer.getPassword()+"<br>");

    out.println("E-Mail: "+customer.getEmail()+"<br>");

    out.println("电话: "+customer.getPhone()+"<br>");

    out.println("地址: "+customer.getAddress()+"<br>");

    String sex=customer.getSex()=='M'? "男":"女";

    out.println("性别: "+sex+"<br>");

    String marriedStatus=customer.isMarried()? "已婚":"未婚";

    out.println("婚姻状况: "+marriedStatus+"<br>");

    out.println("生日: "+customer.getBirthday()+"<br>");

    out.println("注册时间: "+customer.getRegisteredTime()+"<br>");

    out.println("自我介绍: "+customer.getDescription()+"<br>");

    out.println("<img src='photo_copy.gif' border=0><p>");

  }

   public void test(ServletContext context,PrintWriter out) throws Exception{



    Customer customer=new Customer();

    customer.setName("Tom");

    customer.setEmail("[email protected]");

    customer.setPassword("1234");

    customer.setPhone(55556666);

    customer.setAddress("Shanghai");

    customer.setSex('M');

    customer.setDescription("I am very honest.");

    

    //设置Customer对象的image属性,它是字节数组,存放photo.gif文件中的二进制数据

    //photo.gif文件和BusinessService.class文件位于同一个目录下 

    InputStream in=this.getClass().getResourceAsStream("photo.gif");

    byte[] buffer = new byte[in.available()];

    in.read(buffer);

    customer.setImage(buffer);

    //设置Customer对象的birthday属性,它是java.sql.Date类型 

    customer.setBirthday(Date.valueOf("1980-05-06"));



    saveCustomer(customer);



    findAllCustomers(context,out);

    loadAndUpdateCustomer(customer.getId(),"Beijing");

    findAllCustomers(context,out);

    deleteCustomer(customer);

  }



  public static void main(String args[]) throws Exception {

    new BusinessService().test(null,new PrintWriter(System.out,true));

    sessionFactory.close();

  

  }

}

 

你可能感兴趣的:(helloworld)