Hibernate 3.0 HelloWorld

时间:2023-03-10 01:36:03
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(); }
}