基于IDEA使用maven创建hibernate项目

1、创建maven项目

2、导入hibernate需要的jar包

复制代码
        <!--hibernate核心依赖-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.1.Final</version>
        </dependency>

        <!--    导入MySQL的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

3、新建所需的文件夹,如果有就不用添加

resources文件夹

hibernate文件

4、完整的结构如下

5、对hibernate的文件进行设置

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>
        <!--配置所使用的Hibernate方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>

        <!-- Hibernate 连接数据库的基本信息 -->
        <property name="connection.username">数据库用户名</property>
        <property name="connection.password">数据库密码</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">数据库连接地址</property>

        <!-- Hibernate 的基本配置 -->
        <!-- Hibernate 使用的数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

        <!-- 运行时是否打印 SQL -->
        <!--        <property name="show_sql">true</property>-->
        <property name="hibernate.show_sql">true</property>

        <!-- 运行时是否格式化 SQL -->
        <!--        <property name="format_sql">true</property>-->
        <property name="hibernate.format_sql">true</property>

        <!-- 生成数据表的策略 -->
        <!-- <property name="hbm2ddl.auto">update</property>-->
        <!-- 加载Hibernate时,验证数据库表结构与Hibernate映射的结构是否匹配。如果不匹配,会抛出异常-->
        <property name="hbm2ddl.auto">validate</property>

        <!-- 设置 Hibernate 的事务隔离级别 -->
        <property name="connection.isolation">2</property>

        <!-- 删除对象后, 使其 OID 置为 null -->
        <property name="use_identifier_rollback">true</property>

        <!-- 配置 C3P0 数据源 -->
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="c3p0.acquire_increment">2</property>

        <property name="c3p0.idle_test_period">2000</property>
        <property name="c3p0.timeout">2000</property>

        <property name="c3p0.max_statements">10</property>

        <!-- 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数 -->
        <property name="hibernate.jdbc.fetch_size">100</property>

        <!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
        <property name="jdbc.batch_size">30</property>

        <!-- 需要关联的 hibernate 映射文件 .hbm.xml,使用hbm.xml的时候使用 -->

        <!-- 扫描com.cx.bank.ORM包以查找带注解的实体类 -->
        <mapping class="数据库对应实体类的路径"/>
        

    </session-factory>
</hibernate-configuration>

6、连接数据库

前提是已经新建好数据库,使用IDEA连接数据库

填写数据库名,用户名,密码,然后测试,测试成功后点击ok

7、将需要的表与类完成数据映射的关系

7.1、使用hbm.xml来实现映射

新建好了数据库后,若没有建表,可以写了 "类名.hbm.xml" 文件后,有hibernate 自动建表。

如果使用 "类名.hbm.xml" 来实现映射的话,可以在表对应的实体类的包下,新建 "类名.hbm.xml" 文件来实现映射。

示例:

XML 复制代码
<hibernate-mapping>
    <class name="com.hibernate.User">实体类映射成表 表名默认为User
        <id name="id">映射表的主键为实体的id属性
            <generator class="uuid"/>主键按uuid方式生成
        </id>
        <property name="name"/>实体的其它属性映射表的一般字段
        <property name="password"/>
        <property name="createTime"/>
        <property name="expireTime"/>
    </class>
</hibernate-mapping>

7.2、使用注解来实现映射

如果已经提前建好数据库和表,这里可以使用idea的工具自动生成。

自动在指定的包下生成了实体类,自行添加有参和无参构造方法等其他方法。

在 hibernate.cfg.xml 里修改映射类

8、测试

8.1、在持久层的类中书写某个持久层的方法

java 复制代码
 public String findByName(String userName) {
        Session session = HibernateUtil.openSession();
        try {
            String hql = "from User where userName = :name";

            User user = session.createQuery(hql, User.class).setParameter("name", userName).uniqueResult();

            if (user != null) {
                return user.getUserName();
            } else {
                return null;
            }

        } finally {
            // 确保session被关闭
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
    }

8.2、测试方法

java 复制代码
 @Test
    public void findByName() {
        System.out.println(FileDao.findByName("jj"));
    }

9、相关工具类

HibernateUtil

java 复制代码
public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // 使用hibernate.cfg.xml创建SessionFactory
            StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
            Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
            return metadata.getSessionFactoryBuilder().build();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("SessionFactory creation failed!");
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static Session openSession() {
        return sessionFactory.openSession();
    }

    public static void closeSession(Session session) {
        if (session != null && session.isOpen()) {
            session.close();
        }
    }
}
相关推荐
Flynt9 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
yxlalm12 小时前
5.3解决超卖问题
java·spring boot·超卖
边境悍匪13 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
sunshine22 girl14 小时前
Java学习一 环境配置3 Idea中的maven仓库,pom.xml文件配置
学习·maven·intellij-idea
xcl092515 小时前
全民健身智慧管理系统实战指南:从架构设计到部署落地
java·spring boot
Bs_MoneyMagnet15 小时前
基于springboot+vue的宠物殡葬管理平台的设计与实现 源码+文档
java·javascript·vue.js·spring boot·后端·宠物
ly768915 小时前
生产环境 Spring Boot 应用内存泄漏排查实战
java·spring boot·spring·内存泄漏·threadlocal·gc日志·堆转储
萧瑟余晖15 小时前
JPA 规范与 Hibernate 入门详解
后端·架构·hibernate
行百里er17 小时前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控
Bs_MoneyMagnet17 小时前
基于springboot+vue的家居生活商城平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring