Hibernate初学---注解配置
ssh框架是每个java程序员的基本功,工作中虽然没有用到,还是学习一下,做点学习笔记,算是一点积累吧。
废话不多说,先上手来一个简单的demo,感受一把。
开发工具:myeclipse 10
数据库:mysql
创建个简单的java工程,
第一步,创建一个学生类,代码如下:
package com.huawei.vo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Students { private int sid; private String sname; @Id //设置主键 @GeneratedValue(strategy = GenerationType.AUTO) //主键自动增长策略 public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
hibernate的orm技术很出名,可以把java对象直接映射成表,hibernate提供了两种方式用来描述对象到表的映射关系,
第一种是通过创建映射描述配置文件,名字也要很规范,要起成Students.hbm.xml,这种方式我不喜欢,而且我在想要是领域对象多了,
那不是要搞一堆映射文件啊,果断放弃之。
第二种就是基于注解的方式,看起来代码也很优雅,如上面的代码。也就是说领域对象学生中同时已经包括了对象到表的映射关系。
第二步,在src目录下新建hibernate的配置文件hibernate.cfg.xml,配置如下:
<?xml version=‘1.0‘ encoding=‘UTF-8‘?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory name="mysql"> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="dialect"> org.hibernate.dialect.MySQL5Dialect </property> <!-- 后台打印sql便于调试 --> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="current_session_context_class">thread</property> <mapping class="com.huawei.vo.Students" /> </session-factory> </hibernate-configuration>
一定要在sessionFactory中把映射关系的类通过<mapping>标签加载进去。这样就算配置好了。
用getCurrentSession()获取session的时候一定要把current_session_context_class属性设置成thread
第三步,写一个单元测试类吧,代码如下:
package com.huawei.vo; import junit.framework.TestCase; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.AnnotationConfiguration; public class TestStudents extends TestCase{ private static SessionFactory sessionFactory; @Override protected void setUp() throws Exception { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } @Override protected void tearDown() throws Exception { sessionFactory.close(); } public void testSave() { Session session = sessionFactory.getCurrentSession(); Transaction tx = session.beginTransaction(); try { Students s = new Students(); s.setSname("yaoying"); session.save(s); tx.commit(); } catch (Exception ex) { tx.rollback(); } } }
这里session的获取有两种方式:
1、通过sessionFactory的openSession()获取。
2、通过sessionFactory的getCurrentSession()获取。
由于第二种方式获取的session是跟当前线程绑定的,也就是说只要是单线程操作每次获得的是同一个session,而且hibernate在事务的提交和回滚后会
自动帮你完成session的关闭操作,如果是openSession每次会获得一个新的session实例,需要手动完成session的关闭。
最后,执行testSave成功后会看到绿色的进度条。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。