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 @Entity
17 @Table(name = "USER_INFO")
18 public class UserInfo {
19 
20     @Id
21     @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     @Test
18     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     @Test
33     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过瘾.....个人爱好,个人爱好哈哈哈

Hibernate4注解简单例子,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。