您的位置:首页 > 其它

初识Hibernate框架

2016-08-28 13:48 260 查看
引、
    之前在学校接触了Java的hibernate框架,觉得很强大。放假了,有时间好好看一看hibernate的相关技术。最近在imooc上看了相关的视频,写一篇博客总结一下。

一、了解:
    Hibernate是一个ORM(Object Relational Mapping,对象关系映射)框架,对JDBC进行了轻量级的封装。使得程序员可以用面向对象的方法来进行数据库编程,使我们更容易用Java对数据库进行各种操作,完成数据持久化(我觉得就是实时同步)的任务。

二、配置:
    知道了Hibernate是什么,有什么用之后,我们来着手尝试一下。但是首先,要配置。

    我用的是Eclipse,在Java web工程下:
    1、jar包
将hibernate所需的jar包都拷贝到WEB-INF\lib目录下,然后build path添加到配置文件中。所需的包可以在其官网下载,然后还要添加所要用jdbc的jar包。

    2、hibernate.cfg.xml配置
    在src目录下创建hibernate.cfg.xml,也就是config文件。
    贴一段配置代码示例:<?xml version="1.0" encoding="UTF-8"?>
<!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>  
        <property name="show_sql">true</property>  
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/lesson?useUnicode=true&characterEncoding=utf8</property>  
        <property name="hibernate.connection.username">root</property>  
        <property name="hibernate.connection.password">root</property>  
        <property name="hbm2dddl.auto">update</property>
        <mapping resource="com/ouc/domains/TUser.hbm.xml"/>
        <mapping resource="com/ouc/domains/TUrl.hbm.xml"/>
    </session-factory>
</hibernate-configuration>    关于以上参数,从上往下:
        <property>控制台打印sql语句,使用mysql方言,使用mysql数据库,数据库连接,用户名root,密码root,操作表的方式</property>
        <mapping/>里是两个实体类,对应数据库中的两张表。(实体类直接对应数据库中的表)

    3、TUser.hbm.xml

    TUser是其中一个实体类的名字,这里对应了数据库里的user表。对每一个实体类需要创建一个xml配置文件。配置代码示例:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ouc.domains">
<class name="TUser" table="t_user">
<id name="id" column="id">
<generator class="identity"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
</class> 
</hibernate-mapping>    其中对应关系:package-包名。class-类名,table-数据库表名。id-主键,name-类中属性名,column-数据库表列名。identity-主键increment自增。property-属性对应。

    配置的属性还有单表映射,一对多<one-to-many>,多对一<many-to-one>的表映射,如果进行过了双向配置,可以使用inverse关键字来实现控制。添加表的映射之后使得数据表之间关系更易于管理,就是数据库中添加外键一样,还可以用cascade等参数使其更加方便。

    

    4、添加工具类HibernateUtil.java
    在util包下新建HibernateUtil类。不多说,上代码:package com.ouc.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {

public static SessionFactory sessionFactory;

public HibernateUtil() 
{

}

static {
try {
/** 此方法在Hibernate4中被标记为过时 */
// sessionFactory = new
// Configuration().configure().buildSessionFactory();

/** Hibernate4取得SessionFactory的方法 */
Configuration cfg = new Configuration().configure();  //创建配置对象
ServiceRegistry serviceRegistry = new
b148
 ServiceRegistryBuilder()  
.applySettings(cfg.getProperties()).buildServiceRegistry(); //创建服务注册对象
sessionFactory = cfg.buildSessionFactory(serviceRegistry);  //创建会话工厂
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

}    我们通过sessionFactory就拿到session,然后可以进行各种操作了。

三、使用:
    Hibernate中使用HQL(Hibernate Query Language)进行查询,数据库中使用的SQL(Structured Query Language,结构化查询语言)进行查询,两者的语法几乎是一样的。

    写个Test测试一下,代码:package com.ouc.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.ouc.domains.TUser;

public class TestUtil {
public static void main(String[] args) {
Session session = HibernateUtil.sessionFactory.openSession();
String hql=" from TUser";
Query query= session.createQuery(hql);
List<TUser> users=query.list();
for(TUser u:users){
System.out.println(u.getId()+","+u.getUsername()+","+u.getPassword());
}
}
}    上面要注意一个问题,debug了半天- - 太粗心了,用了hibernate就是面向对象编程了,所以在查找表的时候不是from tableName,而是要写from className。
    比如上面的hql用的from TUser,一开始写了from t_user就报错,提示没有映射。发现配置文件并没有问题,才想到这里写错了。

    看看结果,数据库中的数据:

    



    控制台输出结果:




    可以,很正确。

五、总结
    经过这一小段时间的视频学习,虽然学得不多也不深入,不过这样也算是初步认识了Hibernate框架,还要不断学习!技术的世界很广阔,为了去看看那些技术的秘密,也为了更好的明天,还要不断学习。加油吧,晚安少年。

本文出自 “Sunny” 博客,请务必保留此出处http://qmkkd.blog.51cto.com/9511687/1828711
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: