hibernate你必须知道的知识点(敲黑板,划重点)!

ORM,object relation mapping 对象关系映射,底层是对JDBC的封装,来对数据库进行crud操作。

 

1.hibernate映射配置文件

 

    xxx.hbm.xml

    <引入dtd约束>

 

    <!--配置映射的实体类-->

    <class name="实体类全路径" table="数据库表名">

 

        <!--配置实体类的id类型字段,一般在数据库中作为主键的属性,native代表自增>

        <id name="实体类中id属性全名" column="数据库对应的字段名,一般和name一样即可">

            <generator class="native"></generator>    

        </id>

 

        <!--配置实体类其他属性-->

        <property name="实体类中属性名字" column="数据库中的字段名,一般和name一致即可"/>

    <class>

 

2.hibernate核心配置文件

 

放置于src下面,名字是hibernate.cfg.xml

 

<session-factory>

<!--配置数据库信息,四大参数-->

<property name="数据库驱动">com.mysql.jdbc.Driver</property>

<property name="...url">jdbc:mysql://localhost:3306/数据库名</property>

<property name="username">用户名</property>

<property name="passwrord">密码</property>

 

<!--配置hibernate信息-->

<!--输出底层的sql语句-->

<property name="hibernate.show_sql">true</property>

<!--格式化输出的sql语句-->

<property name="hibernate.format_sql">true</property>

<!--自动构建数据库表-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!--配置数据库方言-->

<property name="hibernate.dialect>...</property>

 

<!--配置实体类映射文件-->

<mapping resources="实体类映射文件的全路径,把.改为/"/>

 

3.实现添加操作

 

第一步 加载核心配置文件

Configuration cfg = new Configuration();

cfg.configure();

第二部 创建SessionFactory对象

SessionFactory sessionFactory = cfg.buildSessionFactory();

第三部 通过SessionFactory对象创建Session

Session session = sessionFactory.openSession();

第四部 开启事务

Transaction tx = session.beginTransaction();

第五步 编写具体逻辑crud操作

User user = new User();

user.setSid(101);

user.setSname("霸天虎");

session.save(user);

第六步 提交事务

tx.commit();

第七部 关闭资源

session.close();//后打开的先关闭

sessionFactory.close();//先打开的后关闭

 

4.hibernate的核心api

Configuration

    1.读取src下的hibernate.cfg.xml配置文件

    2.读取实体类映射文件xxx.hbm.xml映射文件

    3.配置访问数据库的参数,驱动、url、username、password

    4.管理hibernate的配置信息

SessionFactory 

    1.使用Configuration的buildSessionFactory方法构建SessionFactory,在构建SessionFactory的时候会根据映射生成表;

    2.创建SessionFactory的过程特别消耗资源

        因此我们通常一个项目只创建一个SessionFactory,通过编写工具类,在工具类中的静态代码块构建SessionFactory,保证只有在类加载时会执行静态代码块创建SessionFactory的实例,然后对外提供静态的get方法,用来获取SessionFactory。

Session

    1.调用session中的方法对数据库进行crud操作

        添加 save()

        删除 delete()

        修改 update()

        根据id查询 get()

    2.session对象是单线程对象,不能供用,只能够自己使用。

Transaction

    事务涉及到的两个操作,commit()提交和rollback()回滚

    涉及到的四个特性

    原子性:多个操作绑定在一起,要么全部成功,要么全部失败;

    一致性:比如转账,事务成功或者失败前后,转账人资金和被转账人资金的总和是一致的;

    隔离性:事务之间是相互隔离的,一个事务的操作和数据不能和其他事物交互。

    持久性:事务提交完成之后,数据库中的数据改变必须是持久的。

 

5.主键生成策略

    <id name="实体类id属性名" column="数据库表中id字段名">

        <generator class="这个值有很多种"></generator>

        1.native࿱

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hibernate和MyBatis都是Java中常用的ORM框架,但它们在设计和使用上有很大的差异。 Hibernate是一个全自动ORM框架,它使用对象关系映射技术将Java类映射到关系数据库中的表。Hibernate自动维护类和表之间的映射关系,可以自动生成SQL语句,开发人员无需手动编写。Hibernate非常适合处理复杂的关系型数据。 MyBatis则是一个半自动ORM框架,它使用XML或注解将SQL语句映射到Java方法中。MyBatis通过将SQL和Java代码分离,允许开发人员灵活控制SQL执行的细节,能够满足更加复杂的需求。MyBatis通常被认为是更加灵活和易于调试的ORM框架。 关于它们的优劣,这取决于具体的使用场景和开发人员的个人偏好。一般来说,如果您的应用程序需要处理复杂的关系型数据,Hibernate可能更适合您。如果您需要更细粒度地控制SQL执行细节或对SQL调优有特殊需求,MyBatis可能更适合您。 ### 回答2: Hibernate和MyBatis都是Java中的ORM(对象关系映射)框架,用于处理Java对象和数据库之间的数据映射关系。它们有各自的特点和适用场景。 Hibernate是一个全自动的ORM框架,它提供了大量的高级特性和功能,可以轻松处理复杂的映射关系,使开发者可以更快速地开发和维护数据库相关的代码。Hibernate具有良好的透明性,开发者不需要编写大量的SQL语句,只需对实体类进行简单配置和映射,就可以完成对数据库的操作。它也提供了一级、二级和查询缓存等缓存机制,可以提高系统的性能。 然而,Hibernate的配置和学习曲线相对较 steepend,对于初学者来说可能比较复杂。Hibernate对于简单查询的性能比MyBatis稍弱,因为它会将查询语句翻译为完全通用SQL,而不是针对特定的查询进行优化。 相比之下,MyBatis是一个轻量级的ORM框架,它倾向于将数据库操作的控制权交给开发者。MyBatis使用XML或注解配置数据库操作语句,使开发者可以灵活地编写SQL语句,更好地优化和控制查询性能。MyBatis较为适用于对数据库操作较为熟悉的开发者,可以根据需求自由地编写和优化SQL语句。 然而,MyBatis相对于Hibernate缺乏一些高级特性,如二级缓存和自动关联映射等。同时,MyBatis没有提供与数据库的直接交互,需要开发者手动编写和维护SQL语句。 综上所述,Hibernate适用于复杂的数据映射场景和初学者,可以快速开发和维护数据库相关的代码。而MyBatis适用于对SQL优化和灵活性要求较高的开发者,可以更好地控制查询性能和SQL语句。具体选择哪个框架取决于项目需求和开发者的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值