相信很多伙伴和我一样,之前接触的JDBC->mybatis。至于hibernate只知道它是全自动的,而mybatis是半自动的。比较熟悉的或者用的比较多的可能是SSM,而SSH则接触比较少。最近几天将重新较细致认识一下hibernate。Let’s go~~
customer表 | orders表 |
/* Source Server : MySQL Target Server Type : MYSQL Date: 2022-11-12 11:47:54 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- ---------------------------- | /* Source Server : MySQL Target Server Type : MYSQL Date: 2022-11-12 11:45:16 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- ---------------------------- |
导入lombok、mysql-connector-java、hibernate-core依赖
-
-
org.projectlombok -
lombok -
1.18.24 -
provided -
-
-
-
-
mysql -
mysql-connector-java -
8.0.28 -
-
-
-
-
org.hibernate -
hibernate-core -
5.6.9.Final -
Customer:
- package com.xgsm.entity;
-
- import lombok.Data;
-
- import java.util.List;
-
- @Data
- public class Customer {
- private Integer id;
- private String name;
- // 在Customer中添加与Orders表的关系(一对多)
- private List
orders; - }
Orders:
- package com.xgsm.entity;
-
- import lombok.Data;
-
- @Data
- public class Orders {
- private Integer id;
- private String name;
- private Integer cid;
- // 在Orders中添加与Customer的关系(一对一)
- private Customer customer;
- }
在hibernate.cgf.xml中配置数据源以及配置连接池等信息
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-
-
-
-
"connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true -
-
"connection.username">root -
-
"connection.password">990501 -
-
"connection.driver_class">com.mysql.cj.jdbc.Driver -
-
-
"hibernate.c3p0.acquire_increment">10 -
-
"hibernate.c3p0.idle_test_period">10000 -
-
"hibernate.c3p0.timeout">5000 -
-
"hibernate.c3p0.max_size">30 -
-
"hibernate.c3p0.min_size">5 -
-
"hibernate.c3p0.max_statements">10 -
-
-
"dialect">org.hibernate.dialect.MySQL8Dialect -
-
"show_sql">true -
-
"format_sql">true -
-
"hibernate.hbm2ddl.auto"/> -
-
-
"current_session_context_class">thread -
-
"hbm2ddl.auto">create -
-
"com/xgsm/entity/Customer.hbm.xml"/> -
2.5 创建实体类映射:
直接在entity(实体)包下创建映射实体类文件即可,具体配置如下:
- "1.0" encoding="UTF-8"?>
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
- <class name="com.xgsm.entity.Customer" table="customer">
-
顾客表 -
"id" type="java.lang.Integer"> -
"id" length="10"> -
主键 -
-
-
"identity"> -
-
-
"name" type="java.lang.String"> -
-
"name"> -
姓名 -
-
-
2.6 测试:
创建test测试类,向数据库中添加一个数据。
- import com.xgsm.entity.Customer;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
-
- public class Test {
- public static void main(String[] args) {
- // 创建Configuration,读取hibernate.cfg.xml
- Configuration configuration = new Configuration().configure();
- // 获取SessionFactory
- SessionFactory sessionFactory = configuration.buildSessionFactory();
- // 获取session
- Session session = sessionFactory.openSession();
- Customer customer = new Customer();
- customer.setName("wahaha");
- session.save(customer);
- session.beginTransaction().commit();
- session.close();
- }
- }
运行结果如下:
2.7 测试中可能遇到的问题和解决措施:
上面的测试过程还是蛮顺利的,没有遇到什么bug。但是对于初学者来说有几个需要避免的错误,在这里总结一下,后续如果有其他的bug,再进行收集。
1、如果我们将实体类映射文件,放在实体类中,我们需要在pom.xml中设置一下,让maven能够读取到entity包下的文件,要不然会报错。具体实例如下:“Exception in thread "main" org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : com/xgsm/entity/Customer.hbm.xml : origin(com/xgsm/entity/Customer.hbm.xml)”
解决措施:在maven中配置一下,让maven能够扫描到
-
-
-
-
src/main/java -
-
**/*.xml -
-
-
-
2、在创建好实体映射文件后,没有注入到‘hibernate.cfg.xml’中,导致找不到实体类文件“Unknown entity: com.xgsm.entity.Customer”
解决措施:在‘hibernate.cfg.xml’文件中注册实体类映射关系
-
-
"com/xgsm/entity/Customer.hbm.xml"/>
3、在hibernate.cfg.xml文件中设置数据库方言的时候,要根据自己mysql的版本去设置,要不然会报错,所以要注意。
-
相关阅读:
Django笔记三十八之发送邮件
伦敦银一手是多少?
面试题 17.16. 按摩师
【计算机视觉】不来试试图片轮廓提取?
什么是RBAC?
如何远程、在线调试app?
openmp 通用核心 学习 1
一文读懂 Jetpack 组件开源库中 MVVM 框架架构
卡片懸停毛玻璃效果
深入理解MyBatis一级缓存和二级缓存【超详细源码解析】
-
原文地址:https://blog.csdn.net/weixin_45295447/article/details/127818146