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