首页 > 代码库 > 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过瘾.....个人爱好,个人爱好哈哈哈