Hibernate的XML和annotation两种方式简单例子

来源:互联网 发布:excel如何制作数据库 编辑:程序博客网 时间:2024/06/05 05:36
Hibernate概述:

ORM的全称Object/Relation Mapping ,对象/关系数据库映射。可以理解是一种规范,基本特征是完成面向对象的编程语言到关系数据库的映射。

Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于Sql的关系模型数据库结构中去。
Hibernate中的底层依然是基于JDBC的,因此在应用程序中使用Hibernate执行持久化时一定少不了JDBC的驱动
下面小例子XML方式:
1.建立类Student,就是相当于一个POJO类。这个类主要的作用就是一个简单类,用于数据库表的字段的映射。
  1. package com.hibernate.model;
  2. public class Student {
  3. private int id;
  4. private String name;
  5. private int age;
  6. public int getId() {
  7. return id;
  8. }
  9. public void setId(int id) {
  10. this.id = id;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. }
2.这个普通的类还不具有持久化操作的能力,为了使其具备持久化操作的能力,这个方式采用的是XML的方式Student.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.hibernate.model">
  6. <class name="Student">
  7. <!--主键 -->
  8. <id name="id" > </id>
  9. <!--其他属性 -->
  10. <property name="name"/>
  11. <property name="age"/>
  12. </class>
  13. </hibernate-mapping>
3.以上的XML文件持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据表列之间的对应关系。对于连接数据库的类型等通用的信息需要Hibernate的配置信息,配置信息需要指定的配置文件。hibernate.cfg.xml
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!-- Database connection settings 数据库配置文件-->
  8. <!-- 指定数据库所用的驱动-->
  9. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  10. <!-- 指定数据库的url,hibernate连接的数据库名-->
  11. <property name="connection.url">jdbc:mysql://localhost/hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
  12. <!--指定数据库连接的用户名 -->
  13. <property name="connection.username">root</property>
  14. <!--数据库连接用的密码 -->
  15. <property name="connection.password">123</property>
  16. <!-- JDBC connection pool (use the built-in) 实际开发中不用hibernate的连接池-->
  17. <property name="connection.pool_size">1</property>
  18. <!-- SQL dialect 数据库方言-->
  19. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  20. <!-- Enable Hibernate's automatic session context management -->
  21. <!-- <property name="current_session_context_class">thread</property> -->
  22. <!-- Disable the second-level cache -->
  23. <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
  24. <!-- Echo all executed SQL to stdout 显示sql语句-->
  25. <property name="show_sql">true</property>
  26. <!-- Drop and re-create the database schema on startup 自动创建表的-->
  27. <property name="hbm2ddl.auto">create </property>
  28. <!-- 罗列所有的映射文件-->
  29. <mapping resource="com/hibernate/model/Student.hbm.xml"/>
  30. <!--这种方式是利用注解的方式 -->
  31. <mapping class="com.hibernate.model.Teacher"/>
  32. </session-factory>
  33. </hibernate-configuration>
4.进行测试
  1. package com.hibernate.test;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.Configuration;
  5. import com.hibernate.model.Student;
  6. public class StudentTest {
  7. public static void main(String[] args) {
  8. Student s=new Student();
  9. s.setId(1);
  10. s.setAge(1);
  11. s.setName("tom");
  12. //实例化Configuration
  13. Configuration cfg=new Configuration();
  14. //以Configuration默认加载Hibernate创建SessionFactory
  15. SessionFactory sf=cfg.configure().buildSessionFactory();
  16. //创建Session
  17. Session session=sf.openSession();
  18. //开始事务
  19. session.beginTransaction();
  20. //保存信息
  21. session.save(s);
  22. //获得事务并且提交
  23. session.getTransaction().commit();
  24. //关闭Session
  25. session.close();
  26. sf.close();
  27. }
  28. }
SessionFactory:这是Hibernate关键的对象,它是单个数据库映射关系经过编译后的内存镜像,它也是线程安全。它是生成Session的工厂,本身依赖ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据库可以提供可选的二级缓存。
Session:它是应用程序与持久化之间的操作的单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象的生存期很短。底层封装了JDBC的连接 ,也是Transaction的工厂。Session对象持有一个必选的一级缓存。
持久化对象:系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化状态。
事务:代表一个原子操作,它具有数据库事务的概念,虽然事务操作是可选的,但是所有的持久化操作都应该在事务管理中。

接下来运用注解的方式进行。建立Teacher类。
  1. package com.hibernate.model;
  2. import javax.persistence.Entity;
  3. import javax.persistence.Id;
  4. //表示实体类
  5. @Entity
  6. public class Teacher {
  7. private int id;
  8. private String name;
  9. private String title;
  10. //一般都放在get 方法这边·@Id表示主键
  11. @Id
  12. public int getId() {
  13. return id;
  14. }
  15. public void setId(int id) {
  16. this.id = id;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public String getTitle() {
  25. return title;
  26. }
  27. public void setTitle(String title) {
  28. this.title = title;
  29. }
  30. }
这里就可以舍弃掉Teacher.hbm.xml.利用两个注解就可以搞定,但是在Hibernate.cfg.xml中要加入
  1. <!--这种方式是利用注解的方式 -->
  2. <mapping class="com.hibernate.model.Teacher"/>


 

0 0