欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用IDEA创建一个简单的hibernate项目

程序员文章站 2022-05-02 19:02:06
...

使用IDEA创建一个简单的hibernate项目

前言

首先理解hibernate是一种ORM(Object Relation Mapping)框架,即对象关系映射。hibernate项目中元数据配置文件就是将对象与数据库中相关表对应起来。将对数据库的操作转变为对对象的操作。
总结一下创建步骤:

  • 检查MySQL环境
  • 打开IDEA,选择创建一个Hibernate项目
  • SQL文件(创建表)
  • 创建与SQL文件对应的JavaBean文件
  • 元数据配置文件(表与JavaBean映射文件)
  • Hibernate主配置文件
  • 测试类
  • 问题解决
  • 测试结果展示

创建项目

  • 检查MySQL环境
    检查MySQL环境。如果没有MySQL环境,就去下载安装(学习就必须动手操作)。
    我使用的是MacOS,前往MySQL官网下载MySQL
    使用IDEA创建一个简单的hibernate项目
    下载完成后直接打开,按照提示一直点next最后finish。
    然后打开系统偏好设置,最下方会出现MySQL的图标(一般情况会配置好环境变量)。
    使用IDEA创建一个简单的hibernate项目
    点击进去,会出现如图已启动的界面。
    使用IDEA创建一个简单的hibernate项目
    如果需要检查MySQL环境变量,打开终端,输入vim ./.bash_profile回车进入环境变量,插件如图语句,如果没有请添加。
    使用IDEA创建一个简单的hibernate项目
  • 打开IDEA,选择创建一个Hibernate项目
    此步骤如下图操作即可
    使用IDEA创建一个简单的hibernate项目
    使用IDEA创建一个简单的hibernate项目
    使用IDEA创建一个简单的hibernate项目
    等待创建好Hibernate项目模板。
    使用IDEA创建一个简单的hibernate项目
  • SQL文件(创建表)
    使用Navicat创建一个新的数据库以及写SQL文件创建表
    使用IDEA创建一个简单的hibernate项目
CREATE TABLE `cst_customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',
  `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
  `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',
  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  • 创建与SQL文件对应的JavaBean文件
    在src文件中创建与SQL文件对应的JavaBean文件
package com.study.hibernate;

public class Customer {
    private Long custId;//对应sql文件中的cust_id
    private String custName;//cust_name
    private String custLevel;//cust_level
    private Long custUserId;//cust_user_id
    private Long custCreateId;//cust_create_id
    private String custIndustry;//cust_industry
    private String custLinkman;//cust_linkman
    private String custPhone;//cust_phone
    private String custMobile;//cust_mobile

    //省略Setter和Getter方法
}
  • 元数据配置文件(表与JavaBean映射文件)
    在src同级创建一个元数据配置xml文件
    使用IDEA创建一个简单的hibernate项目
    首先导入约束
<?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>
    <!--class:配置表与JavaBean的映射关系
        name:相关联的JavaBean
        table:数据库中对应的表名
     -->
    <class name="com.study.hibernate.Customer"  table="cst_customer">
        <!--id:主键映射
            name:JavaBean中的字段名
            column(可选):数据集表中的列名,如果没有写则默认使用name的值
            generator:主键生成策略
         -->
        <id name="custId" column="cust_id">
            <generator class="native"></generator>
        </id>

        <!--property用于配置非主键属性
            type(可选,建议不填):该属性的类型。如下有3中写法:java类型、hibernate类型、sql类型。如果未填写则自动识别。
            not-null(可选):属性不能为空。默认值为false。
            length(可选):配置数据库中数据类型列的长度。默认值是数据库类型的最大长度。varchar和char是255位
         -->
        <property name="custName" column="cust_name"></property>
        <property name="custCreateId">
            <column name="cust_create_id"></column>
        </property>
        <property name="custIndustry" type="java.lang.String">
            <column name="cust_industry"></column>
        </property>
        <property name="custLevel" type="string">
            <column name="cust_level"></column>
        </property>
        <property name="custLinkman" sql-type="varchar">
            <column name="cust_linkman" length="64"></column>
        </property>
        <property name="custPhone" type="string">
            <column name="cust_phone" length="64"></column>
        </property>
        <property name="custMobile" type="string">
            <column name="cust_mobile" length="16"></column>
        </property>
        <property name="custLevel" type="string">
            <column name="cust_level" length="32"></column>
        </property>
    </class>
</hibernate-mapping>
  • Hibernate主配置文件
    在src目录中创建hibernate主配置文件(hibernate.cfg.xml)。注意:此文件名特定,需要记住
    使用IDEA创建一个简单的hibernate项目
    首先导入约束文件(对比Customer.hbm.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>
        <!--配置数据连接,5个必选 -->
        <!-- 数据库驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库连接url -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/study-hibernate?</property>
        <!-- 数据库用户名及密码 -->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">52571314</property>

        <!--数据库方言,根据数据库选择 
			MySQL数据库支持不同的数据引擎,就有不同的数据库方言(支持InnoDB:MySQLInnoDBDialect;支持ISAM:MySQLISAMDialect)。但是一般默认选择通用型。
		-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
		
		<!--可选配置 -->
        <!--为了方便调试,是否在运行hibernate时在日志中输出sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 是否对日志中输出的sql语句进行格式化 如果不配置,则不会换行,难以阅读-->
        <property name="hibernate.format_sql">true</property>
		<!--配置自动导出表结构,生成相应的表(auto schema export)
			此项有5个值可选,一般选择none。
			validate:加载Hibernate时验证数据库表结构
			create:每次加载Hibernate时都重新创建表结构,这也是导致数据库数据丢失的原因(表覆盖),一般在开发测试阶段使用。
			create-drop:每次加载Hibernate时创建数据库表结构,退出时删除
			update:加载Hibernate时自动更新表结构,如果没表就生成表(可用在正式环境使用)。更新是在保留原有数据的基础之上,就算列名发生变化,也会保留原有列名新增一列。
			此用意:一切皆对象,将对数据库的操作都转变为对对象的操作。
		 -->
		<property name="hibernate.hbm2ddl.auto">none</property>
 		<!--配置关联文件(orm元数据配置文件,注意路径是src下的路径) -->
        <mapping  resource="Customer.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>
  • 测试类
    创建测试类进行测试
    使用IDEA创建一个简单的hibernate项目
package com.study.hibernate;

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

public class DemoTest {
    public static void main(String[] args) {
        //连接hibernate主配置文件
        Configuration conf = new Configuration();

        conf.configure();

        SessionFactory sessionFactory = conf.buildSessionFactory();
        //打开session
        Session session = sessionFactory.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();

        //-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->
        //业务代码
        Customer c = new Customer();
        c.setCustName("Apple");
        c.setCustLevel("5");

        session.save(c);


        //-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->
        //提交事务
        transaction.commit();
        //依次关闭资源
        session.close();
        sessionFactory.close();
    }
}
  • 问题解决
    1.Unable to load class [com.mysql.jdbc.Driver]
    解决:导入mysql驱动文件
    步骤一:将mysql-connection-java-xxx-bin.jar文件拷贝至WEB-INF文件夹下新建的lib文件夹内(对比一下开始的lib文件夹内的jar文件,此文件名前少了扩展箭头,表示jar未被引用)。
    使用IDEA创建一个简单的hibernate项目
    步骤二:引用jar包
    File–>Project Structure…使用IDEA创建一个简单的hibernate项目
    选择Modules-,然后选择Dependencies,点击下的“+”选择JARs or directories…
    使用IDEA创建一个简单的hibernate项目
    选择刚刚赋值的jar文件
    使用IDEA创建一个简单的hibernate项目
    点击“OK”,最后查看lib文件夹内的jar包多路个扩展箭头,表示已引用了jar包。
    使用IDEA创建一个简单的hibernate项目
    2.ERROR: Unknown initial character set index ‘255’ received from server. Initial client character set can be forced via the ‘characterEncoding’ property.
    解决:将主配置文件中加入编码字符集:
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/study-hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
  • 测试结果展示
    控制台查看执行sql。这里控制台的SQL语句换行就是之前在主配置文件中配置的两个可选的<property>,将sql信息打印到控制台并格式化。
    使用IDEA创建一个简单的hibernate项目
    进入数据库查看表内容
    使用IDEA创建一个简单的hibernate项目
相关标签: Hibernate hibernate