Hibernate入门

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/heyguiji/article/details/91891231

Hibernate

1.Hibernate介绍

(1)简介

Hibernate 是由 Gavin King 于 2001 年创建的开放源代码的对象关系框架。它强大且高效的构建具有关系对象持久性和查询服务的 Java 应用程序。

Hibernate 将 Java 类映射到数据库表中,从 Java 数据类型中映射到 SQL 数据类型中,并把开发人员从 95% 的公共数据持续性编程工作中解放出来。

Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象。Hibernate 优势

  • Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。
(2)支持的数据库

Hibernate 支持几乎所有的主要 RDBMS。以下是一些由 Hibernate 所支持的数据库引擎。

  • HSQL Database Engine
  • DB2/NT
  • MySQL
  • PostgreSQL
  • FrontBase
  • Oracle
  • Microsoft SQL Server Database
  • Sybase SQL Server
  • Informix Dynamic Server
(3)支持的技术

Hibernate 支持多种多样的其它技术,包括以下:

  • XDoclet Spring
  • J2EE
  • Eclipse plug-ins
  • Maven

2.Hibernate配置

(1)Hibernate.cfg.xml文件配置
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 方言(不同数据库中,sql语句略有区别,指定方言可以让hibernate生成sql语句时针对数据库的方言生成),便于hibernate对象操作转化为合适的数据库语句-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 配置数据库连接-->
        <property name="connection.url">jdbc:mysql://localhost:3306/user?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=UTF-8</property>
        <!-- 配置数据库驱动文件-->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <!--数据库用户名  -->
        <property name="connection.username">root</property>
        <!--数据库密码  -->
       <property name="connection.password">root</property>
        <!--是否显示sql语句,sql一般会很难看  默认为false-->
        <property name="show_sql">true</property>
        <!--下一个层级的映射文件,用来配置bean对象与数据表之间的关系  -->
        <mapping resource="com/example/UserInfoEntity.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

(2)配置表与实体对象的关系配置

<?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">
<!-- package属性:填写一个包名,在后面的属性配置中可以直接写简答类名-->
<hibernate-mapping package="com.example">
<!--
    class元素:配置实体与表的对应关系
                name:完整类名
                table:数据库表名
-->
    <class name="UserInfoEntity" table="user_info" schema="user">
        <!--
            id;配置主键映射的属性
                name:填写主键对应的属性名
                column:填写表中的主键列名
        -->
        <id name="id" column="id"/>
        <!--
            property元素:除id之外的普通属性映射
                           name:填写属性名
                          column:填写表中对应的列名
                          type(可选):填写列(属性)的类型
                          			  hibernate会自动检测实体的属性类型,建议不填
                                       每个类型有三种填法:java类型|hibernate类型|数据库类型
        -->
        <property name="username" column="username"/>
        <property name="password" column="password"/>
        <property name="nickname" column="nickname"/>
        <property name="sex" column="sex"/>
    </class>
</hibernate-mapping>

3.Hibernate API详解

		//1.创建对象,调用空参构造
        Configuration conf = new Configuration();
        //2.读取指定主配置文件 --->空参构造,加载src下的hibernate.cfg.xml文件
        conf.configure();
        //3.根据配置信息,创建SessionFactory对象
        SessionFactory sessionFactory = conf.buildSessionFactory();
        /*
          <!--SessionFactory功能:用户创建数据库核心对象Session对象的工厂

                       简单来说就是功能就是创建session对象

                 注意:a.sessionFactory  负责保存和使用所有配置信息,消耗内存资源很大

                      b.session属于线程安全的对象设计

                 结论:保证在web项目中,只创建一个sessionFactory对象*/

       //4.获得session
      //打开一个新的session
      sessionFactory.openSession();
      //获得一个与线程绑定的session对象
      sessionFactory.getCurrentSession();

session对象功能:表达hibernate框架与数据库之间的连接(会话)

​ 类似于JDBC中的connection对象,还可以完成对数据库中的增删改查

​ session是hibernate操作数据库的核心对象

package test;
import com.example.UserInfoEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class test {
    public static void main(String [] args) {
        Configuration conf = new Configuration().configure();
        SessionFactory sessionFactory = conf.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction1 = session.beginTransaction();
        //增加
        /*UserInfoEntity u = new UserInfoEntity();
        u.setId("5");
        u.setNickname("轨迹11");
        u.setUsername("黄阳11");
        u.setPassword("1231");
        u.setSex("男");
        session.save(u);*/
        /*查询 
        UserInfoEntity u = session.get(UserInfoEntity.class, "1");
        System.out.println(u);*/
        /*修改
        UserInfoEntity u = session.get(UserInfoEntity.class, "1");
        u.setNickname("李四1111");
        session.update(u);*/
        /*删除
        UserInfoEntity u = session.get(UserInfoEntity.class, "1");
        session.delete(u);*/
        transaction1.commit();//提交事务
        session.close();//释放资源
        sessionFactory.close();//释放资源
    }
}

总结基本步骤:

  • 获得configuration对象
  • 获得sessionFactory对象
  • 获得session对象
  • 获得transaction对象并开启事务
  • 执行数据操作(增删改查)
  • 提交事务
  • 释放资源

4.Hibernate简单封装

`package Utils;`

`import org.hibernate.Session;`
`import org.hibernate.SessionFactory;`
`import org.hibernate.cfg.Configuration;`

`public class hibernateUtils {`
    `private static SessionFactory sessionFactory;`
    `static {`
        `Configuration conf = new Configuration().configure();`
       `sessionFactory = conf.buildSessionFactory();`
    `}`
    `//获得全新session`
    `public static Session openSession(){`
        `Session session = sessionFactory.openSession();`
        `return session;`
    `}`
    `//获得与线程绑定的session`
    `public static Session getCurrentSession(){`
        `Session session = sessionFactory.getCurrentSession();`
        `return session;`
    `}`
    `public static void main(String [] args) {`
        `System.out.println(hibernateUtils.openSession());`
    `}`
`}`
展开阅读全文

没有更多推荐了,返回首页