📄 index.html
字号:
sex | character(1) | weight | real |Indexes: cat_pkey primary key btree (cat_id)</pre></div><p> 你现在可以在你的数据库中首先创建这个表了,如果你需要使用SchemaExport工具把这个步骤自动化,请参阅<a href="#toolsetguide" title="Chapter 19. 工具箱指南">Chapter 19, <i>工具箱指南</i></a>。这个工具能够创建完整的SQL DDL,包括表定义,自定义的字段类型约束,惟一约束和索引。 </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e318"></a>1.4. 与猫同乐</h2></div></div><div></div></div><p> 我们现在可以开始Hibernate的<tt class="literal">Session</tt>了。我们用它来从数据库中存取<tt class="literal">Cat</tt>。首先,我们要从<tt class="literal">SessionFactory</tt>中获取一个<tt class="literal">Session</tt>(Hibernate的工作单元)。 </p><pre class="programlisting">SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();</pre><p> <tt class="literal">SessionFactory</tt>负责一个数据库,也只对应一个XML配置文件(<tt class="literal">hibernate.cfg.xml</tt>)。 </p><p> 这篇教程的关注点在于配置Tomcat的JDBC连接,绑定到JNDI上,以及Hibernate的基础配置。你可以用喜欢的任何方式编写一个Servlet,包含下面的代码,只要确保<tt class="literal">SessionFactory</tt>只创建一次。也就是说你不能把它作为你的Serlvet 的实例变量。一个好办法是用在辅助类中用一个静态的<tt class="literal">SessionFactory</tt>,例如这样: </p><pre class="programlisting">import net.sf.hibernate.*;import net.sf.hibernate.cfg.*;public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (HibernateException ex) { throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex); } } public static final ThreadLocal session = new ThreadLocal(); public static Session currentSession() throws HibernateException { Session s = (Session) session.get(); // Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = (Session) session.get(); session.set(null); if (s != null) s.close(); }}</pre><p> 这个类不但在它的静态属性中使用了<tt class="literal">SessionFactory</tt>,还使用了<tt class="literal">ThreadLocal</tt>来为当前工作线程保存<tt class="literal">Session</tt>。 </p><p> <tt class="literal">Session</tt>不是线程安全的,代表与数据库之间的一次操作。<tt class="literal">Session</tt>通过<tt class="literal">SessionFactory</tt>打开,在所有的工作完成后,需要关闭: </p><pre class="programlisting">Session session = HibernateUtil.currentSession();Transaction tx= session.beginTransaction();Cat princess = new Cat();princess.setName("Princess");princess.setSex('F');princess.setWeight(7.4f);session.save(princess);tx.commit();HibernateUtil.closeSession();</pre><p> 在<tt class="literal">Session</tt>中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。我们使用Hibernate的<tt class="literal">Transaction</tt> API来从底层的事务策略中(本例中是JDBC事务)脱身。这样,如果需要把我们的程序部署到一个由容器管理事务的环境中去(使用JTA),我
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -