使用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
下载完成后直接打开,按照提示一直点next最后finish。
然后打开系统偏好设置,最下方会出现MySQL的图标(一般情况会配置好环境变量)。
点击进去,会出现如图已启动的界面。
如果需要检查MySQL环境变量,打开终端,输入vim ./.bash_profile回车进入环境变量,插件如图语句,如果没有请添加。
-
打开IDEA,选择创建一个Hibernate项目
此步骤如下图操作即可
等待创建好Hibernate项目模板。
-
SQL文件(创建表)
使用Navicat创建一个新的数据库以及写SQL文件创建表
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文件
首先导入约束
<?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)。注意:此文件名特定,需要记住
首先导入约束文件(对比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>
-
测试类
创建测试类进行测试
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未被引用)。
步骤二:引用jar包
File–>Project Structure…
选择Modules-,然后选择Dependencies,点击下的“+”选择JARs or directories…
选择刚刚赋值的jar文件
点击“OK”,最后查看lib文件夹内的jar包多路个扩展箭头,表示已引用了jar包。
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&characterEncoding=UTF-8</property>
-
测试结果展示
控制台查看执行sql。这里控制台的SQL语句换行就是之前在主配置文件中配置的两个可选的<property>,将sql信息打印到控制台并格式化。
进入数据库查看表内容
上一篇: 虚拟机安装CentOs6系统的详细步骤
下一篇: 学习ELK安装具体步骤
推荐阅读
-
荐 使用IDEA搭建一个简单的JavaWeb图书管理项目(详细步骤指导、提供源码)
-
使用Python实现一个简单的项目监控
-
使用iDea创建一个Springboot项目
-
idea创建一个入门Spring Boot项目(controller层)使用Moven代码管理
-
解决IDEA使用Spring Initializr创建项目时,无法连接到https://start.spring.io的问题
-
使用visualStudio2017创建一个简单的控制台程序
-
使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目
-
利用idea创建一个基本的smm项目(带增删改查)
-
如何创建一个可使用的数据库框架项目:Android
-
使用pycharm创建自己的第一个django项目