zoukankan      html  css  js  c++  java
  • 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();
      
      }
    }
  • 相关阅读:
    172. Factorial Trailing Zeroes
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    91. Decode Ways
    LeetCode 328 奇偶链表
    LeetCode 72 编辑距离
    LeetCode 226 翻转二叉树
    LeetCode 79单词搜索
    LeetCode 198 打家劫舍
    LeetCode 504 七进制数
  • 原文地址:https://www.cnblogs.com/HCCZX/p/3405732.html
Copyright © 2011-2022 走看看