【入门级】Hibernate环境搭建

本文介绍了如何在Idea中搭建Hibernate环境,包括获取jar包、新建JavaWeb项目、导入jar包、创建实体类和映射文件、配置hibernate.cfg.xml以及进行测试。详细阐述了每个步骤,并提供了配置文件的注意事项和解决中文乱码问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【idea2020.1.1】
hibernate是应用在DAO层的框架,之前用的DBUtils功能类似
【区分–>JavaEE的三层架构和MVC思想:
JavaEE三层结构:web层、service层、dao层;
MVC思想 m:模型,v:视图,c:控制器】

找到jar包

jar包获取:http://hibernate.org/orm/releases/
在这里插入图片描述
我用的是hibernate5.2
【链接:https://pan.baidu.com/s/1-OzVeT-6JDIYMy2ab3alXg
提取码:gsjz】
在网站上获取:以5.5为例
step1:
在这里插入图片描述
step2:进入之后往下滑动,选择自己想要的版本download
在这里插入图片描述
下载好的是压缩包的形式,解压后打开
在这里插入图片描述
required文件夹下是hibernate需要的jar包。

新建JavaWeb项目

其实这一步应该是第一步,不过问题不大
https://blog.youkuaiyun.com/qq_44641943/article/details/118379496
这是我建项目的步骤

往项目中导入jar包

step1
在WEB-INF下新建两个文件夹,classes用来放生成的class文件,lib用来放项目依赖的jar包(严格来说是,这个模块需要用的jar包)
【新建的只是普通文件夹】
在这里插入图片描述
step2
把hibernate需要的jar包和数据库连接需要的jar包复制到lib文件夹下之后,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选中lib之后,就会出现这一行,选中–>Apply
在这里插入图片描述
就可以看到导入的jar包如下图
在这里插入图片描述
关于classes文件夹如下,Apply即可
在这里插入图片描述

新建实体类

新建一个JavaBean,不要忘了setter、getter方法
(cid其实对应着主键)
在这里插入图片描述

创建实体类和数据库表的映射文件

使用hibernate时候,不需要自己手动创建表,hibernate帮助创建,怎么创建?答:使用配置文件完成配置实体类和数据库表一一对应关系(映射关系)。
配置文件是xml格式的,idea中new里找不到xml格式的文件,需要自己手动创建。
idea2020.1新建xml文件

映射配置文件名称和位置没有固定要求,但常用 “实体类名称.hbm.xml” (hbm : hibernate mapping)格式命名,且在实体类所在包里面创建
因为配置文件是xml格式的,所以在文件中需要引入xml约束,约束有两种,dtd和schema
这里需要引入的是dtd约束,引入的dtd约束在哪里找?【下方已放需引入的dtd约束部分】
第一步下载的压缩包解压之后

E:\hibernate\hibernate-release-5.2.18.Final\hibernate-release-5.2.18.Final\project\hibernate-core\src\main\resources\org\hibernate

在这里插入图片描述
把这个文件用写字板打开,建议不用记事本
在这里插入图片描述
把红框内的部分复制到自己新建的xml文件中,就是引入了dtd约束
【附红框内的内容】

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

接下来配置映射文件
这是我的整个的映射文件,已附详细注释

<?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>
    <!-- 1 配置类和表对应
		class标签
		name属性:实体类全路径(包名+类名)【为防止写错,选中实体类的类名,
		右键,Copy Reference,即已复制该类的全路径】
		table属性:数据库表名称,自己起个名字
	-->
    <class name="com.hiber.bean.Client" table="t_Client">
    
        <!-- 接下来配置类中属性和表中的字段对应-->
        
        <!-- 2 配置实体类id和表id对应
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
		-->
        <!-- id标签
            name属性:实体类里面id属性名称
            column属性:生成的表字段名称
         -->
        <id name="cid" column="cid">
            <!-- 设置数据库表id增长策略
				native:生成表id值就是主键自动增长
			-->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
			name属性:实体类属性名称
			column属性:生成表字段名称
		-->
        <property name="cName" column="cName"></property>
        <property name="cTelNum" column="cTelNum"></property>
        <property name="cAddress" column="cAddress"></property>
    </class>
</hibernate-mapping>

创建hibernate的核心配置文件

核心配置文件格式xml,但是核心配置文件名称和位置固定的

  • 位置:必须src下面
  • 名称:必须 hibernate.cfg.xml(cfg: configuration配置)

引入dtd约束,与上一步的dtd文件在同一个地方
在这里插入图片描述
在这里插入图片描述
附内容:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载,也就是说上一步的映射配置文件不会被加载!所以,需要把映射配置文件引入到核心配置文件中
【需要自己手动创建数据库!】
这是我的 hibernate.cfg.xml 文件,不能直接拿去用,有的地方需要修改,都有详细注释

<?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>
        <!-- 配置数据库信息 -->
        <!--
            下面的数据库信息的配置在哪里找?
            E:\hibernate\hibernate-release-5.2.18.Final\hibernate-release-5.2.18.Final
            \project\etc
            找到hibernate.properties这个文件(文件里是键值对的形式)
            下面四个分别是
            数据库驱动(务必引入数据库驱动的jar包)
            url,下面是个省略的写法,
                完整的是jdbc:mysql://localhost:3306/hibernate_test(这是数据库名称)
            数据库用户名
            数据库密码
        -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>

        <!-- 配置hibernate信息 -->
        <!-- 输出底层sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- hibernate帮忙创建表是在配置了下句之后
            update: 有表,更新,没表,就创建
         -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 配置数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 把映射文件放到核心配置文件中 -->
        <mapping resource="com/hiber/bean/client.hbm.xml"></mapping>

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

【注:配置数据库方言那里,需要是MySQL5Dialect。自己可以试一下MySQLDialect 和 MySQL5Dialect 的区别,控制台会输出建表的sql语句,可以对比一下这两种有什么区别;结果就是MySQLDialect 无法创建数据表,还是希望大家自己尝试一下】
【关于引入映射配置文件那里,可以按住ctrl,单击,能跳转就是配置对了】

至此,所有的配置结束!


接下来,

测试

写个测试类

package com.hiber.bean;

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



public class HibernateTest {
    @Test
    public void testAdd(){
        //第一步 加载hibernate核心配置文件
        // 到src下面找到名称是hibernate.cfg.xml
        //在hibernate里面封装对象
        Configuration cfg = new Configuration();
        cfg.configure();
        //第二步 创建SessionFactory对象
        //读取hibernate核心配置文件内容,创建sessionFactory
        //在过程中,根据映射关系,在配置数据库里面把表创建
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        //第三步 使用SessionFactory创建session对象
        // 类似于连接
        Session session = sessionFactory.openSession();
        //第四步 开启事务
        Transaction tx = session.beginTransaction();
        //第五步 写具体逻辑 crud操作
        //添加功能
        Client client = new Client();
        client.setcName("小李");
        client.setcTelNum("6666666");
        client.setcAddress("北京");
        //调用session的方法实现添加
        session.save(client);
        //第六步 提交事务
        tx.commit();

        //第七步 关闭资源
        session.close();
        sessionFactory.close();

    }
}

最终的结果:
控制台输出创建表和添加数据的sql语句
在这里插入图片描述
红框的部分就是上边提到的数据库方言那里两种不同配置产生差异的地方。
同时,数据库里表已经被创建,数据已被添加
在这里插入图片描述
【不知道有没有人和我一样遇到添加到数据表里的中文数据是乱码的情况】
我的解决方法:
在hibernate核心配置文件中的url处添加:?characterEncoding=utf8
在这里插入图片描述
如果不成功的话,把数据库的属性设置一下,这样应该就没问题了!
在这里插入图片描述
【之前做的网站项目中,就经常遇到中文乱码的问题,一般从网页输入到后端代码的中文数据可以写个过滤器,操作数据库的话,最好参照上边写的,只是个人总结的,可能有所偏差】


至此,测试成功结束!(这只是测试,平常写代码的时候不要按照测试的那种方法写,之后更新实用的CRUD写法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值