天天看点

DAO+Factory+Hibernate的学习。。

看了很多的书了,想着实践一下,就参考了书上的例子写了一点,呵呵刚入门很简单的东西,只有后台写的测试类而已,还望各位指教。

我的开发环境 Eclipse3.3+Myeclipse6.0,因为Myeclipse集成了Hibernate,而且6.0最高的版本是Hibernate3.1..

数据库是MySql5.0

1.首先建库: 

 `login`.CREATE DATABASE `login` ;

 DROP TABLE IF EXISTS `login`.`person`;

CREATE TABLE  `login`.`person` (

  `id` varchar(20) character set utf8NOT NULL default '',

  `name` varchar(45) character set utf8NOT NULL default '',

  `password` varchar(45) character set utf8NOT NULL default '',

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入两条测试数据。

2.打开Myeclipse6.0,添加下载的MySql的驱动,建立数据库的一个连接。

3.新建WEB工程,为工程加入Hibernate支持,注意不建立SessionFactory我们可以自己建立一个,

配置文件如下:

java 代码

  1. <?xml version='1.0' encoding='UTF-8'?>   
  2. <!DOCTYPE hibernate-configuration PUBLIC   
  3.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
  5. <!-- Generated by MyEclipse Hibernate Tools.                   -->   
  6. <hibernate-configuration>   
  7. <session-factory>   
  8.     <property name="connection.username">root</property>   
  9.     <property name="connection.url">   
  10.         jdbc:mysql://localhost:3306/login   
  11.     </property>   
  12.     <property name="dialect">   
  13.         org.hibernate.dialect.MySQLDialect   
  14.     </property>   
  15.     <property name="myeclipse.connection.profile">jnetstore</property>   
  16.     <property name="connection.password">sa</property>   
  17.     <property name="connection.driver_class">   
  18.         com.mysql.jdbc.Driver   
  19.     </property>   
  20.     <property name="show_sql">true</property>   
  21.     <mapping resource="cn/will/vo/Person.hbm.xml" />   
  22. </session-factory>   
  23. </hibernate-configuration>  

然后新建POJO类Person.java

代码如下:

java 代码

  1. package cn.will.vo;   
  2. public class Person {   
  3.     private String id;   
  4.     private String name;   
  5.     private String password;   
  6.     public String getId() {   
  7.         return id;   
  8.     }   
  9.     public void setId(String id) {   
  10.         this.id = id;   
  11.     }   
  12.     public String getName() {   
  13.         return name;   
  14.     }   
  15.     public void setName(String name) {   
  16.         this.name = name;   
  17.     }   
  18.     public String getPassword() {   
  19.         return password;   
  20.     }   
  21.     public void setPassword(String password) {   
  22.         this.password = password;   
  23.     }   
  24. }   

3.新建DAO接口类PersonOperate.java

java 代码

  1. package cn.will.dao;   
  2. import java.util.List;   
  3. import cn.will.vo.Person;   
  4. public interface PersonOperate {   
  5.     public void insert(Person p) throws Exception;   
  6.     public void update(Person p) throws Exception;   
  7.     public Person queryById(String id) throws Exception;   
  8.     public void delete(Person p) throws Exception;   
  9.     public void delete(String id) throws Exception;   
  10.     public List queryAll()throws Exception;   
  11.     public List queryByLike(String cond)throws Exception;   
  12. }   

4.建立工厂类,这里使用了两个工厂,一个是Session工厂SessionFactory.java,一个是操作的工厂DAOFactory.java

java 代码

  1. package cn.will.factory;   
  2. import org.hibernate.Session;   
  3. import org.hibernate.cfg.Configuration;   
  4. public class SessionFactory {   
  5.     public static Session getSession(){   
  6.         Session session=null;   
  7.         session =new Configuration().configure().buildSessionFactory().openSession();   
  8.         return session;   
  9.     }   
  10. }   

java 代码

  1. package cn.will.factory;   
  2. import cn.will.dao.PersonOperate;   
  3. import cn.will.impl.PersonOperateImpl;   
  4. public class DAOFactory {   
  5.     public static PersonOperate getOperate(){   
  6.         return new  PersonOperateImpl();       
  7.     }   
  8. }   

5.DAO的实现类PersonOperateImpl.java

java 代码

  1. package cn.will.impl;   
  2. import java.util.Iterator;   
  3. import java.util.List;   
  4. import org.hibernate.Query;   
  5. import org.hibernate.Session;   
  6. import org.hibernate.Transaction;   
  7. import cn.will.dao.PersonOperate;   
  8. import cn.will.factory.SessionFactory;   
  9. import cn.will.vo.Person;   
  10. public class PersonOperateImpl implements PersonOperate {   
  11.     private Session session=null;   
  12.     public PersonOperateImpl() {   
  13.         this.session = SessionFactory.getSession();   
  14.     }   
  15.     public void delete(Person p) throws Exception {   
  16.         Transaction tran = this.session.beginTransaction() ;   
  17.         // 执行语句   
  18.         this.session.delete(p) ;   
  19.         // 提交事务   
  20.         tran.commit() ;   
  21.     }   
  22.     public void delete(String id) throws Exception {   
  23.         String hql = "DELETE Person WHERE id=?" ;   
  24.         Query q = this.session.createQuery(hql) ;   
  25.         // 把参数设置   
  26.         q.setString(0,id) ;   
  27.         // 执行更新语句   
  28.         q.executeUpdate() ;   
  29.         // 进行事务处理   
  30.         this.session.beginTransaction().commit() ;   
  31.     }   
  32.     public void insert(Person p) throws Exception {   
  33.         // 开始事务   
  34.         Transaction tran = this.session.beginTransaction() ;   
  35.         // 执行语句   
  36.         this.session.save(p) ;   
  37.         // 提交事务   
  38.         tran.commit() ;   
  39.         // 关闭Session   
  40.         this.session.close() ;   
  41.     }   
  42.     public List queryAll() throws Exception {   
  43.         List l = null ;   
  44.         String hql = "FROM Person as p" ;   
  45.         Query q = this.session.createQuery(hql) ;   
  46.         l = q.list() ;   
  47.         return l ;   
  48.     }   
  49.     public Person queryById(String id) throws Exception {   
  50.         Person p = null ;   
  51.         // 使用Hibernate查询语言   
  52.         String hql = "FROM Person as p WHERE p.id=?" ;   
  53.         // 通过Query接口查询   
  54.         Query q = this.session.createQuery(hql) ;   
  55.         q.setString(0,id) ;   
  56.         List l = q.list() ;   
  57.         Iterator iter = l.iterator() ;   
  58.         if(iter.hasNext())   
  59.         {   
  60.             p = (Person)iter.next() ;   
  61.         }   
  62.         return p ;   
  63.     }   
  64.     public List queryByLike(String cond) throws Exception {   
  65.         List l = null ;   
  66.         String hql = "FROM Person as p WHERE p.name like ?" ;   
  67.         Query q = this.session.createQuery(hql) ;   
  68.         q.setString(0,"%"+cond+"%") ;   
  69.         l = q.list() ;   
  70.         return l ;   
  71.     }   
  72.     public void update(Person p) throws Exception {   
  73.         // 开始事务   
  74.         Transaction tran = this.session.beginTransaction() ;   
  75.         // 执行语句   
  76.         this.session.update(p) ;   
  77.         // 提交事务   
  78.         tran.commit() ;   
  79.     }   
  80. }   

6.打开DB Browser窗口,找到第二步建立的数据库连接,找到login数据库,找到person表,右键选择Hibernate Reverse Engineering,在Hibernate Mapping file(*.hbm.xml) for each database table前打勾,在java package选择存放路径,这里选择cn.will.vo,下一步,ID generater选择assigned,下一步,完成.得到person.hbm.xml的代码如下:

java 代码

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  4. <!--    
  5.     Mapping file autogenerated by MyEclipse Persistence Tools   
  6. -->   
  7. <hibernate-mapping>   
  8.     <class name="cn.will.vo.Person" table="person" catalog="login">   
  9.         <id name="id" type="java.lang.String">   
  10.             <column name="id" length="20" />   
  11.             <generator class="assigned" />   
  12.         </id>   
  13.         <property name="name" type="java.lang.String">   
  14.             <column name="name" length="45" not-null="true" />   
  15.         </property>   
  16.         <property name="password" type="java.lang.String">   
  17.             <column name="password" length="45" not-null="true" />   
  18.         </property>   
  19.     </class>   
  20. </hibernate-mapping>   

7.加入测试类TestPersonOperate.java,代码如下:

java 代码

  1. package cn.will.test;   
  2. import java.util.Iterator;   
  3. import java.util.List;   
  4. import cn.will.factory.DAOFactory;   
  5. import cn.will.vo.Person;   
  6. public class TestPersonOperate {   
  7.     public static void main(String[] args)throws Exception {   
  8.         // TODO Auto-generated method stub   
  9.     }   
  10. }   

8.运行..进行如下查询时可以正确执行得到预期结果.

总结:本人因为是初学所以难免又不对的地方,这是我按照自己的理解写的,希望和大家共同学习,希望..