您的位置:首页 > 其它

【Hibernate】基础语义

2016-08-16 22:39 204 查看
【回顾】
    在上篇博客中,我们通过简单地保存用户数据实例,学习了如何进行Hibernate配置,从而建立实体类与数据库表的映射关系,在不用写执行语句的情况下,实现对数据库表的操作。
    本篇博客,将回到Hibernate的具体配置,了解一下配置中的一些基础语义。

【基础】

1. Configuration

    Configuration类负责管理Hibernate的配置信息。Hibernate运行时需要获取一些底层实现的基本信息。其中几个关键属性包括:

    数据库URL、数据库用户、数据库用户密码、数据库JDBC驱动类和数据库适配器(dialect)。

    这些属性都是在Hibernate配置文件(hibernate.hbm.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>
<!-- mysql数据库连接驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库连接地址 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<!-- 连接数据库用户名和密码 -->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>

当我们调用:

    Configuration cfg = new Configuration().Configure();
时,Hibernate会自动在当前的ClassPath中搜寻hibernate.hbm.xml文件并将其加载至内存中,作为后继操作的基础配置。
    如果不希望用默认的hibernate.hbm.xml文件,我们也可以自己指定配置文件:
File file =new File("E:\\hibernate_first\\myhibernate.xml");
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure(file);

2. SessionFactory

    SessionFactory负责创建session实例,我们可以通过Configuration实例来构建SessionFactory:
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory = cfg.buildSessionFactory();

    Configuration实例cfg会根据当前的数据库配置信息,构造SessionFactory并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息。

    也就是说,之后cfg的任何变更将不会影响到已经创建的SessionFactory实例。如果需要使用基于改动后的实例,那么就需要从cfg中重新构建一个SessionFactory实例。同样,如果应用需要访问多个数据库,那么就需要针对每一个数据库,分别创建对应的SessionFactory实例。

    SessionFactory中保存了当前数据库配置的所有映射关系,同时也负责维护缓存。

3. session

    session是Hibernate持久化操作的基础。需要注意的是,这里的session和我们说的web层的session并没有关系。Hibernate Session对于Hibernate来说,就好比是JDBC Connection对于JDBC一样。

    session作为Hibernate管理核心,提供了众多持久化方法,如save、update、delete等。通过这些方法,我们就可以进行增删改查操作。

    而session是非线程安全的,一个session实例只可由一个线程使用。Session实例由SessionFactory构建:
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory = cfg.buildSessionFactory();
//取得session
session = factory.openSession();
    之后我们就可以调用save、delete、update等方法。
Save:
//新增一条用户数据
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存User对象
session.save(user);
Get:
//获取表中id为1的用户数据
User user = (User)session.get(User.class, new Integer(1));
Delete:
//获取表中id为1的用户数据
User user= (User)session.get(User.class, new Integer(1));
//删除该数据
session.delete(user);

【总结】

    通过本篇博客对Hibernate配置的基础学习,可以说对上篇博客中的代码实例理解得更加深刻了。学习就是这样一个过程:实践与理论互相补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: