因为用到了hibernate-annotation,结果发现简直解放我好多事情,几乎彻底不用操心数据库了,贴出实例,注:代码是别人写的,我只是实现下而已哈
用到的包包:
<classpathentry kind="lib" path="D:/maven/Repository/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/ejb3-persistence.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/cglib/cglib/2.1_3/cglib-2.1_3.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/asm/asm/1.5.3/asm-1.5.3.jar"/> <classpathentry kind="lib" path="D:/maven/Repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
首先实体类:
package test.hibernate.annotation; import java.util.LinkedList; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.GenericGenerator; @SuppressWarnings("serial") @Entity @Table public class Person implements java.io.Serializable { private Integer id; private String name; private String sex; private Integer age; private List list = new LinkedList(); public Person() { } public Person(Integer id) { this.id = id; } // Property accessors @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "increment") public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return this.age; } public void setAge(Integer age) { this.age = age; } @Transient public List getList() { return list; } public void setList(List list) { this.list = list; } }
注释就不跟大家解释了,具体请参见hibernate-annotation文档哈。我主要让大家先跑起来这个实例
接下来HibernateUtil类:
package hello; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import test.hibernate.annotation.Person; public class HibernateUtil { private static final SessionFactory sessionFactory; public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); static { try { sessionFactory = new AnnotationConfiguration() //注意: 建立 SessionFactory于前面的不同 .addPackage("test.hibernate.annotation").addAnnotatedClass(Person.class).configure() .buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static Session getSession() throws HibernateException { return sessionFactory.openSession(); } public static Session currentSession() throws HibernateException { Session s = session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = session.get(); if (s != null) { s.close(); } session.set(null); } }
测试类:
package test.hibernate; import hello.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; import test.hibernate.annotation.Person; public class Test { public static void main(String[] args) { Session s = HibernateUtil.currentSession(); Transaction tx = s.beginTransaction(); // Person p = (Person) s.load(Person.class, 1); // System.out.println(p.getName()); Person p = new Person(); p.setAge(19); p.setName("icerain"); p.setSex("male"); s.save(p); s.flush(); /* Person p2 = (Person) s.get(Person.class, new Integer(1)); System.out.println(p2.getName()); p2.setName("ice.."); s.saveOrUpdate(p2); s.flush(); Person p3 = (Person) s.get(Person.class, new Integer(2)); System.out.println(p3.getName()); s.delete(p3); */ tx.commit(); try { System.out.println(p.getName()); } catch (Exception e) { e.printStackTrace(); } HibernateUtil.closeSession(); } }
hibernate.cfg.xml:放在classpath目录下,hibernate会自己寻找
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.password">3645466</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> <property name="hibernate.transaction.auto_close_session">false</property> <property name="hibernate.hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration>
哦了,跑test.java吧,数据库表hibernate会根据person实体类自动创建。