首页 > 代码库 > Hibernate4注解简单例子

Hibernate4注解简单例子

  今天经理叫我和搭档做一个文件版本管理工具的Demo给客户,ORM要求需要使用Hibernate4,使用注解开发,之前一直都是在玩Mybatis,hibernate都忘光了...所以重新写了个Hibernate的例子来学习注解。

  废话不多说,切入正题。首先建个java项目,引入如下jar包:

  

 

  其中大部分jar包来自hibernate-release-4.2.13.Final/lib/required目录下的所有jar包以及mysql的驱动jar包,请忽视log4j的包,可有可无...只是个简单例子..

  既然要使用Hibernate肯定要配置数据库连接参数什么的,hibernate.cfg.xml文件如下,放置在classpath下:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5     <hibernate-configuration> 6         <session-factory> 7             <!--  --> 8             <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 9             10             <property name="show_sql">true</property>11 12             <property name="connection.url">jdbc:mysql://localhost:3306/myex</property>13             <property name="connection.username">root</property>14             <property name="connection.password">root</property>15             <property name="connection.driver_class">com.mysql.jdbc.Driver</property>16             <property name="format_sql">true</property>17             18             <mapping class="entity.UserInfo"/>19         </session-factory>    20 </hibernate-configuration>

  有没有发现mapping和传统的有点不一样...对之前使用 *.hbm.xml 文件来描述POJO于数据库表的映射关系,现在把这些关系描述放到了POJO的注解中,这样省去了麻烦的配置文件,但是对于不熟悉Hibernate注解开发的人来说(不如说我),有些不习惯,马上来看代码:

 1 package cn.lyy.entity; 2  3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5  6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.GeneratedValue; 9 import javax.persistence.Id;10 import javax.persistence.Table;11 import javax.persistence.Temporal;12 import javax.persistence.TemporalType;13 14 import org.hibernate.annotations.GenericGenerator;15 16 @Entity17 @Table(name = "USER_INFO")18 public class UserInfo {19 20     @Id21     @GeneratedValue(generator="hibernate-uuid")22     @GenericGenerator(name = "hibernate-uuid", strategy = "uuid")23     @Column(name = "ID",unique=true,nullable=false,length=32)24     private String id;25 26     @Column(name = "NAME")27     private String name;28 29     @Column(name = "AGE")30     private Integer age;31 32     @Column(name = "REG_TIME")33     @Temporal(TemporalType.DATE)34     private Date regTime;35 36     public String getName() {37         return name;38     }39 40     public void setName(String name) {41         this.name = name;42     }43 44     public Integer getAge() {45         return age;46     }47 48     public void setAge(Integer age) {49         this.age = age;50     }51 52     public Date getRegTime() {53         return regTime;54     }55 56     public void setRegTime(Date regTime) {57         this.regTime = regTime;58     }59 60     public String getId() {61         return id;62     }63 64     public void setId(String id) {65         this.id = id;66     }67 }

这个类对应数据库表如下:

1 DROP TABLE IF EXISTS `user_info`;2 CREATE TABLE `user_info` (3   `ID` varchar(32) NOT NULL,4   `NAME` varchar(32) default NULL,5   `AGE` int(8) default NULL,6   `REG_TIME` date default NULL,7   PRIMARY KEY  (`ID`)8 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

好了,现在数据库表有了,POJO类有了,Hibernate的配置信息有了,可以开始写小例子了,但是每次都去创建SessionFactory过于耗费资源,而且重复代码太多,先写个工具类为测试函数提供session,工具类如下:

 1 package cn.lyy.test; 2  3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.AnnotationConfiguration; 6 import org.hibernate.cfg.Configuration; 7  8 public class HibernateUtils { 9     10     private static SessionFactory sessionfactory = null;11     12     static {13         Configuration cfg = new AnnotationConfiguration().configure("hibernate.cfg.xml");14         sessionfactory = cfg.buildSessionFactory();15     }16     17     public static Session getSession(){18         return  sessionfactory.openSession();19     }20 }

 

然后开始测试一下Hibernate的注解配置是否好用吧

 1 package cn.lyy.test; 2  3 import java.io.Serializable; 4 import java.util.Date; 5 import java.util.List; 6  7 import org.hibernate.Criteria; 8 import org.hibernate.Session; 9 import org.hibernate.Transaction;10 import org.hibernate.criterion.Restrictions;11 import org.junit.Test;12 13 import cn.lyy.entity.UserInfo;14 15 public class MyTest {16     17     @Test18     public void fun0(){19         UserInfo a = new UserInfo();20         a.setAge(3);21         a.setName("haah");22         a.setRegTime(new Date());23         24         Session session = HibernateUtils.getSession();25         Transaction tx = session.beginTransaction();26         Serializable save = session.save(a);27         tx.commit();28         session.close();29         System.out.println(save);30     }31     32     @Test33     public void fun1(){34         Session session = HibernateUtils.getSession();35         Criteria criteria = session.createCriteria(UserInfo.class);36         criteria.add(Restrictions.eq("name", "haah"));37         List<UserInfo> list = criteria.list();38         UserInfo info = list.get(0);39         session.close();40         System.out.println(info);41     }42 }

于是,一个最最最最简单的Hibernate例子出现了...回顾一下,使用*.hbm.xml是为了描述POJO类对应数据库表之间的映射关系以及POJO类之间的关联关系,而注解把这种描述放置在注解中,通过反射机制获取到这些描述信息,方便了我们这些屌丝程序员,不用再xml和java类之间切来切去的写代码了,边写POJO类就边把映射关系描述清楚了。

 

又及:还是喜欢Mybatis直接写SQL过瘾.....个人爱好,个人爱好哈哈哈