Hibernate初级

文章来源: http://blog.csdn.net/jiuqiyuliang/article/details/39078749/

持久化(Persistence),把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

Hibernate是对JDBC进一步封装

是持久层的框架

Hibernate是开源的一个ORM(对象关系映射)框架:

ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。


Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。

1、Configuration接口:负责配置并启动Hibernate

2、SessionFactory接口:负责初始化Hibernate

3、Session接口:负责持久化对象的CRUD操作

4、Transaction接口:负责事务

5、Query接口和Criteria接口:负责执行各种数据库查询

注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。

 实例项目:

User.java

package com.kangjie.User;


import java.util.Date;  

public class User {  
    private String id;  
    private String name;  
    private String password;  
    private Date createTime;  
    private Date expireTime;  
      
    public String getId() {  
        return id;  
    }  
    public void setId(String 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 getCreateTime() {  
        return createTime;  
    }  
    public void setCreateTime(Date createTime) {  
        this.createTime = createTime;  
    }  
    public Date getExpireTime() {  
        return expireTime;  
    }  
    public void setExpireTime(Date expireTime) {  
        this.expireTime = expireTime;  
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password
                + ", createTime=" + createTime + ", expireTime=" + expireTime
                + "]";
    }  
  
} 

App.java

package com.kangjie.User;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App {

    private static SessionFactory sessionFactory;

    static {
        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
        sessionFactory = cfg.buildSessionFactory(); // 生成Session工厂
    }

    @Test
    public void testSave() throws Exception {
        User user = new User();
        user.setName("jiuqiyuliang");  
        user.setPassword("123456");  
        user.setCreateTime(new Date());  
        user.setExpireTime(new Date()); 

        Session session = sessionFactory.openSession(); //打开一个新的Session
        Transaction tx = session.beginTransaction(); // 开始事务

        session.save(user);

        tx.commit(); //提交事务
        session.close(); // 提交事务
    }

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 package="com.kangjie.User">
    
    <class name="User" table="User">
        <id name="id">  
            <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->  
            <generator class="uuid"></generator>  
        </id>  
        <property name="name"></property>  
        <property name="password"></property>  
        <property name="createTime" type="date"></property>  
        <property name="expireTime" type="date"></property> 
    </class>
    
</hibernate-mapping>

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory name="foo">
        <!-- 配置数据库信息 --> 
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://139.196.170.62:3307/mysite</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">kangjie</property>
        <property name="hibernate.connection.password">Kangjie_456</property>

        <!-- 其他配置 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 
        <property name="hibernate.format_sql">false</property>
        
            create:先删除,再创建
            update:如果表不存在就创建,不一样就更新,一样就什么都不做。
            create-drop:初始化时创建表,SessionFactory执行close()时删除表。
            validate:验证表结构是否一致,如果不一致,就抛异常。
         
        <property name="hbm2ddl.auto">update</property>
    -->
    
        <!-- 导入映射文件 -->
        <mapping resource="com/kangjie/User/User.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
原文地址:https://www.cnblogs.com/taiguyiba/p/6219457.html