hibernate入门

这篇具有很好参考价值的文章主要介绍了hibernate入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hibernate 是一个开源的 ORM(对象关系映射)框架,它可以将 Java 对象与数据库表进行映射,从而实现面向对象的数据持久化。使用 Hibernate,可以避免手动编写 SQL 语句,从而提高开发效率,并且可以轻松地切换不同的数据库。

基础概念

entity 实体类是映射到数据库表中的 Java 类,它包含了与数据库表中列相对应的属性,并且可以使用注解或 XML 文件进行映射。
MySql table 关系型数据库中的表格
hibernate入门
hibernate负责互相转换两者。将entity存入数据库,将数据库中的数据取出并创建实体类的实例提使用者。

依赖

<dependencies>
  <!-- hibernate 核心 -->
  <dependency>
      <groupId>org.hibernate.orm</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>6.2.7.Final</version>
  </dependency>

  <!--  jdbc 实现 -->
  <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.0.33</version>
  </dependency>
</dependencies>

配置类

maven项目将配置文件hibernate.cfg.xml放置再resource目录下即可文章来源地址https://www.toymoban.com/news/detail-635087.html

<?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="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jpa_study?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">a1b2c3</property>

        <!-- 显示sql语句 -->
        <property name="show_sql">true</property>
        <!-- 格式化sql -->
        <property name="format_sql">true</property>
        <!-- sql方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 自动操作:创建-删除 -->
        <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <!-- 配置sessionFactory.getCurrentSession()的上下文 -->
        <property name="current_session_context_class">thread</property>

        <mapping class="org.example.entity.User"/>
    </session-factory>
</hibernate-configuration>

工具类

package org.example.util;

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

import java.util.function.Consumer;
import java.util.function.Function;

public class SessionFactoryUtil {

    private static final SessionFactory sessionFactory;

    static {
        // 构建会话工厂(configure未指定参数默认查找classpath:hibernate.cfg.xml)
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }

    /**
     * 执行sql操作
     * @param callback 回调函数
     */
    public static void execute(Consumer<Session> callback) {
        Session session = sessionFactory.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
            callback.accept(session);
        } catch (Exception e) {
            transaction.rollback();
            e.printStackTrace();
        }
        transaction.commit();
    }

    /**
     * 执行sql查询操作
     * @param callback 回调函数
     * @return 回调函数的返回值
     * @param <R> 回调函数的返回值
     */
    public static <R> R query(Function<Session, R> callback) {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        try {
            R r = callback.apply(session);
            transaction.commit();
            return r;
        } catch (Exception e) {
            transaction.rollback();
            e.printStackTrace();
            return null;
        }
    }
}

Dao层

package org.example.dao;

import org.example.entity.User;
import org.example.util.SessionFactoryUtil;

import java.util.List;

public class UserDao {

    public void save(User user) {
        SessionFactoryUtil.execute(session -> session.persist(user));
    }

    public void update(User user) {
        SessionFactoryUtil.execute(session -> session.merge(user));
    }

    public void delete(User user) {
        SessionFactoryUtil.execute(session -> session.remove(user));
    }

    public User findById(Long id) {
        return SessionFactoryUtil.query(session -> session.get(User.class, id));
    }

    public List<User> findAll() {
        return SessionFactoryUtil.query(session -> session.createQuery("from User", User.class).list());
    }

    public List<User> findByName(String likeContent) {
        return SessionFactoryUtil.query(session ->
                // 创建query,使用HQL(Hibernate Query Language)查询
                // 1.不用select *
                // 2.参数用?1 ?2 ?3这样的占位符
                // 3.参数的序号从1开始
                session.createQuery("from User as u where u.name like ?1", User.class)
                        // 设置参数
                        .setParameter(1, "%" + likeContent + "%")
                        // 获取list
                        .list());
    }
}

到了这里,关于hibernate入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hibernate 配置文件(hibernate.cfg.xml、hbm.xml)

      目录 Hibernate.xml  1、数据库的基本信息。 2、集成 C3P0,设置数据库连接池信息。 3、Hibernate 基本信息。  4、注册实体关系映射文件。  实体关系映射文件 (实体类文件名.hbm.xml) 1、hibernate-mapping标签的属性 2、class标签的属性  2.1、dynamic-insert:动态添加 (默认为false)

    2023年04月08日
    浏览(41)
  • 9.3. Hibernate框架

    Hibernate是一个开源的持久层框架,它可以帮助我们将Java对象映射到数据库表中,并实现对象的持久化操作。Hibernate提供了丰富的API,可以方便地进行CRUD(增删改查)操作,而无需手动编写复杂的JDBC代码。 9.3.1. Hibernate核心组件 Hibernate主要包含以下几个核心组件: SessionFact

    2024年02月08日
    浏览(50)
  • 框架分析(9)-Hibernate

    link 主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。 Hibernate是一个开源的Java持久化框架,它提供了一种将Java对象映射到数据库表的方法,使得开发人员可以使用面向对象的方式来

    2024年02月10日
    浏览(85)
  • Hibernate Validator 组件

    Hibernate Validator 组件介绍 Hibernate Validator 是一个基于 Java 的验证框架,它提供了强大且灵活的验证功能,用于验证 JavaBean 对象的状态。它是基于 JSR 380 规范(Bean Validation 2.0)的实现,并且可以与任何 Java 应用程序集成。 Hibernate Validator 的目标是提供一种方便、易于使用的验证

    2024年02月11日
    浏览(39)
  • hibernate 懒加载

    @Entity @Table(name = \\\"Student\\\") public class StudentInformation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int rollno; private String name; // Mapping to the other table @OneToMany(mappedBy =\\\"stud\\\" ,cascade = CascadeType.ALL,fetch= FetchType.LAZY ) private SetAddress addressSet=new HashSet();; public StudentInformation() { } public St

    2024年02月09日
    浏览(91)
  • MyBatis和Hibernate的区别

    Hibernate 和 MyBatis 都是目前业界中主流的对象关系映射(ORM)框架,它们的主要区别如下。 1)sql 优化方面 Hibernate 使用 HQL(Hibernate Query Language)语句,独立于数据库。不需要编写大量的 SQL,就可以完全映射,但会多消耗性能,且开发人员不能自主的进行 SQL 性能优化。提供了

    2024年02月09日
    浏览(35)
  • MyBatis与Hibernate的区别

    目录 1、MyBatis与Hibernate 1.1 Hibernate简介 1.2 MyBatis简介 2、开发对比 2.1 开发速度 2.2 开发社区 2.3 开发工作量 3、优化对比 3.1 Hibernate的调优方案 3.2 Mybatis调优方案 3.3 SQL优化方面 3.4 扩展性方面 4、对象管理与抓取策略 4.1 对象管理 4.2 抓取策略 5、缓存机制 5.1 Hibernate缓存 5.2 MyB

    2024年04月28日
    浏览(33)
  • 【hibernate validator】(五)分组约束

    https://blog.zysicyj.top/ 定义一个超级跑车 使用组继承 定义序列组 使用序列组 定义一个具有重定义的默认组的类 使用重新定义的默认组 实现和使用默认组序列 必须集合@Valid哦,否则报错 本文由 mdnice 多平台发布

    2024年02月11日
    浏览(37)
  • 排查及处理hibernate自动更新(无缘故的)实体数据及表数据的根本问题,hibernate脏读更新,注意非常实用

    这里我默认大家都对hibernate的实体时态问题有所了解,并且知道hibernate是有内存快照机制,会自动更新数据库。 但是我们在开发过程中总是会无缘无故就更新数据库了,导致会在一些只读的spring事务中报错。这使我们抓狂,往往遇到这个情况我们仔细查看代码后也没有发现哪

    2024年02月16日
    浏览(42)
  • Hibernate(Spring Data)抓取策略

    本文将深入讨论Hibernate中的抓取策略,介绍不同类型的抓取策略以及它们的使用场景和注意事项。 即时加载是指在查询主实体时立即加载相关联的实体对象。这种策略会在查询时一次性加载所有关联的实体对象,可以减少数据库查询次数。 延迟加载是指在访问关联属性时才

    2024年02月10日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包