• 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("tom@yahoo.com");
        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();
      
      }
    }
  • 相关阅读:
    WinAPI: SetRect 及初始化矩形的几种办法
    [书目20080225]软件工程与项目管理解析
    [转]npkcrypt 服务启动失败
    CPU是为用户服务的
    Web.config基础
    VBScript学习
    [书目20080130]如何成功管理一个软件项目
    [转]DB2常用命令大全
    [转]C++语法概括及其示例(示例代码下载)
    用友华表Cell产生柱状图表
  • 原文地址:https://www.cnblogs.com/HCCZX/p/3405732.html
Copyright © 2020-2023  润新知