Hibernate入门

来源:互联网 发布:知乎更新图标 编辑:程序博客网 时间:2024/06/06 00:31
    Hibernate是一个轻量级的ORMapping框架.
    ORMapping基本对应规则:
    1:类跟表相对应
    2:类的属性跟表的字段相对应
    3:类的实例与表中具体的一条记录相对应
    4:一个类可以对应多个表,一个表也可以对应对个类
    5:DB中的表可以没有主键,但是Object中必须设置主键字段
    6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 
    7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
    Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。


    Hibernate的核心组件
    在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
    除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
    1)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
    2)SessionFactory(org.hibernate.SessionFactory)接口:针对单个数据库映射关系经过编译后的内存镜像,是重量级线程安全的(不可变)。 它是产生Session实例的工厂,本身要用到ConnectionProvider。
    3)Session(org.hibernate.Session)接口:表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。session会关联一个connection,session是持久化的管理器,非线程安全的。其生命周期最好跟事务一致,事务完成就将其关闭。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
   4)Query(org.hibernate.Query)接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
   5)Transaction(org.hibernate.Transaction)接口:用来管理Hibernate事务,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
   6)ConnectionProvider (org.hibernate.connection.ConnectionProvider):生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。
   7)TransactionFactory (org.hibernate.TransactionFactory):生成Transaction对象实例的工厂。

    Hibernate的运行过程如下:
    A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
    B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。


    Hibernate简单示例:hibernate-release-4.3.10.Final\lib\required\*.jar、mysql-connector-java-5.1.6-bin.jar

hibernate.cfg.xml配置

<!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">com.mysql.jdbc.Driver</property><!-- 数据库方言信息,可以指定不同数据库的分页 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://127.0.0.1:3306/zero</property><property name="connection.username">root</property><property name="connection.password">123456</property><property name="connectio.useUnicode">true</property><property name="connection.characterEncoding">utf-8</property><!-- 显示sql语句 --><property name="hibernate.show_sql">true</property><!-- <property name="hibernate.format_sql">true</property> --><mapping resource="com/zero/hibernate/vo/User.hbm.xml" /></session-factory></hibernate-configuration>
vo类:
public class User {private int id;private String name;private String password;private Date birthday;public User() {}public User(String name, String password, Date birthday) {this.name = name;this.password = password;this.birthday = birthday;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}
User.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.zero.hibernate.vo.User" table="t_user"><id name="id" column="userID"><generator class="native" /><!-- 主键 --><!-- native/uuid --></id><property name="name" /><property name="password" /><property name="birthday" /></class></hibernate-mapping>

测试:

public class TestDB {public static void main(String[] args) {// init();addUser();Query saQuery = null;}public static void init() {// 默认读取hibernate.cfg.xmlConfiguration cfg = new Configuration().configure();// 将hbm生成ddl,创建数据库SchemaExport export = new SchemaExport(cfg);export.create(true, true);}public static void addUser() {// 创建SessionFactorySessionFactory factory = null;/** 此方法在Hibernate4中被标记为过时 */// factory = new Configuration().configure().buildSessionFactory();Configuration cfg = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();factory = cfg.buildSessionFactory(serviceRegistry);// 取得sessionSession session = null;try {session = factory.openSession();session.beginTransaction();User user = new User("zero", "123456", new Date());// 保存数据session.save(user);// 提交事务session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally {if (session != null) {if (session.isOpen()) {session.close();}}}}}


0 0
原创粉丝点击