首页 > 其他分享 >Hibernate_Day01

Hibernate_Day01

时间:2022-12-26 21:36:46浏览次数:48  
标签:实体类 映射 配置文件 Day01 Hibernate hibernate 数据库 属性


文章目录

  • ​​一、web内容回顾​​
  • ​​1. JavaEE三层结构​​
  • ​​1.1 web层:struts2框架​​
  • ​​1.2 service层:spring框架​​
  • ​​1.3 dao层:hibernate框架​​
  • ​​2. MVC思想​​
  • ​​3. Struts2和Hibernate的结合实现MVC思想​​
  • ​​(1). 结构导图​​
  • ​​(2). 比较导图​​
  • ​​二、hibernate概述​​
  • ​​1. 什么是框架​​
  • ​​2. 什么是hibernate框架​​
  • ​​3. ORM思想​​
  • ​​4. Hibernate体系结构​​
  • ​​三、hibernate入门案例​​
  • ​​1. 搭建hibernate环境​​
  • ​​1.1 导入hibernate的jar包​​
  • ​​2. 创建实体类​​
  • ​​3. 配置实体类和数据库表一一对应关系(映射关系)​​
  • ​​3.1 创建xml格式的配置文件​​
  • ​​3.2 如果配置文件是xml格式,在配置文件中首先引入xml约束​​
  • ​​3.3 配置映射关系​​
  • ​​4. 创建hibernate的核心配置文件​​
  • ​​4.1 核心配置文件格式是xml,但是核心配置文件名称和位置固定的​​
  • ​​4.2 引入dtd约束​​
  • ​​4.3 hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载​​
  • ​​5. 进行测试​​
  • ​​四、hibernate配置文件详解​​
  • ​​1. hibernate映射配置文件​​
  • ​​2. hibernate核心配置文件​​
  • ​​五、hibernate的核心api​​
  • ​​1. Configuration​​
  • ​​2. SessionFactory:Session工厂​​
  • ​​3. Session​​
  • ​​4. Transaction​​
  • ​​六、hibernate配置错误问题处理​​


Hibernate_Day01_ssh

一、web内容回顾

1. JavaEE三层结构

Hibernate_Day01_ssh_02

1.1 web层:struts2框架

1.2 service层:spring框架

1.3 dao层:hibernate框架

  • 对数据库进行crud(增删改查)操作

Hibernate_Day01_实体类_03

2. MVC思想

  • m:模型
  • v:视图
  • c:控制器

Hibernate_Day01_实体类_04

3. Struts2和Hibernate的结合实现MVC思想

(1). 结构导图

Hibernate_Day01_ssh_05

(2). 比较导图

传统Servlet使用MVC思想和使用Struts2+Hibernate结合的MVC思想比较

Hibernate_Day01_hibernate_06

二、hibernate概述

1. 什么是框架

写一个程序,使用框架之后,帮我们实现一部分功能,而使用框架好处,我们少写一部分代码实现功能。

2. 什么是hibernate框架

  • hibernate翻译为冬眠
  • hibernate框架应用在Javaee三层结构中dao层框架
  • 在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,而hibernate对jdbc进行封装,使用hibernate好处:不需要写复杂的jdbc代码,不需要写sql语句实现。
  • Hibernate_Day01_配置文件_07

  • hibernate开源轻量级的框架
  • hibernate版本
hibernate3.x
hibernate4.x
hibernate5.x

Hibernate_Day01_hibernate_08


Hibernate_Day01_hibernate_09

3. ORM思想

  • hibernate使用rom思想对数据库进行crud操作
  • 在web阶段学习Javabean,更正确的叫法:实体类
  • orm:object relational mapping对象关系映射
文字描述
1. 让实体类和数据库进行一一对应关系
让实体类首先和数据库表对应
让实体类属性和表里面字段对应

2. 不需要直接操作数据库表,而操作表对应实体类对象

画图分析:

Hibernate_Day01_配置文件_10


Hibernate_Day01_实体类_11

4. Hibernate体系结构

Hibernate_Day01_配置文件_12

三、hibernate入门案例

1. 搭建hibernate环境

1.1 导入hibernate的jar包

Hibernate_Day01_实体类_13

Hibernate_Day01_实体类_14


因为在使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志jar包。

Hibernate_Day01_配置文件_15


不要忘记还有mysql驱动的jar包

Hibernate_Day01_ssh_16

2. 创建实体类

Hibernate_Day01_配置文件_17

  • 使用hibernate时候,不需要自己手动创建表,hibernate帮我们把表创建出来

3. 配置实体类和数据库表一一对应关系(映射关系)

使用配置文件实现映射的关系

Hibernate_Day01_hibernate_18

3.1 创建xml格式的配置文件

  • 映射配置文件名称和位置没有固定要求
  • 建议:在实体类所在包里面创建,实体类名称.hbm.xml

3.2 如果配置文件是xml格式,在配置文件中首先引入xml约束

  • 学过约束dtd、schema,在hibernate里面引入的约束dtd约束
  • Hibernate_Day01_配置文件_19


  • Hibernate_Day01_ssh_20


3.3 配置映射关系

<?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属性:实体类全路径
table属性:数据库表名称
-->

<class name="entity.User" table="t_user">
<!-- 2. 配置实体类id和表里面id对应
hibernate要求实体类有一个属性作唯一值
hibernate要求表有字段作为唯一值
-->
<!-- id标签
name属性:实体类里面id属性名称
column属性:生成的表字段名称
-->
<id name="uid" column="uid">
<!-- 设置数据库表id增长策略
native:生成表id值就是主键自动增长
-->
<generator class="native"></generator>
</id>

<!-- 3. 配置其他属性和表字段对应
name属性:实体类属性名称
column属性:生成表字段名称
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>

4. 创建hibernate的核心配置文件

Hibernate_Day01_ssh_21


Hibernate_Day01_实体类_22


Hibernate_Day01_hibernate_23

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

  • 位置,必须在src下面
  • 名称必须叫hibernate.cfg.xml

4.2 引入dtd约束

Hibernate_Day01_ssh_24


Hibernate_Day01_ssh_25

4.3 hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载

  • 第一部分:配置数据库信息 必须的
  • Hibernate_Day01_ssh_26

  • 第二部分:配置hibernate信息 可选的

  • 第三部分:把映射文件放到核心配置文件中 必须的
  • Hibernate_Day01_hibernate_27

<?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>
<!-- 1. 配置数据库信息 必须要有-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>

<!-- 2. 配置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>
<!-- 配置数据库方言
在mysql里面实现分页,关键字limit,只能使用mysql里面
在Oracle数据库,实现分页rownum
让hibernate框架识别不同数据库的特有的语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


<!-- 3.把映射文件放到核心配置文件中 必须的-->
<mapping resource="entity/User.hbm.xml"/>

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

Hibernate_Day01_ssh_28

5. 进行测试

Hibernate_Day01_ssh_29

实现添加操作:只有第5步不固定

  • 第一步:加载hibernate核心配置文件
  • 第二步:创建一个对象SessionFactory对象
  • 第三步:使用SessionFactory创建session对象
  • 第四步:开启事务
  • 第五步:写具体逻辑crud操作
  • 第六步:提交事务
  • 第七步:关闭资源

看到的效果

  • 是否生成表
  • 看表是否有记录

Hibernate_Day01_hibernate_30

package hibernatetest;

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

import entity.User;

public class HibernateDemo {

@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操作
//添加功能
User user = new User();
user.setUsername("小强");
user.setPassword("123");
user.setAddress("中国");
//调用session里面的方法实现添加
session.save(user);

// 第六步:提交事务
tx.commit();

// 第七步:关闭资源
session.close();
sessionFactory.close();
}
}
四、hibernate配置文件详解

1. hibernate映射配置文件

  • 映射配置文件名称和位置没有固定要求

  • 映射配置文件中,标签name属性值写实体类相关内容

    1. class标签name属性值是实体类全路径
    2. id标签和property标签 里面name属性值写实体类名称
  • id标签和property标签,column属性可以省略的

    1.不写默认值,和name属性值是一样的
  • property标签type属性,设置生成表字段的类型,自动对应类型

2. hibernate核心配置文件

  • 配置写的位置
  • Hibernate_Day01_实体类_31

  • 配置三部分要求

    1. 数据库部分必须的
    2. hibernate部分可选的
    3. 映射文件必须的
  • 核心配置文件名称和位置固定的

    位置:src下面
    名称:hibernate.cfg.xml
五、hibernate的核心api

1. Configuration

Hibernate_Day01_ssh_32


Hibernate_Day01_hibernate_33

2. SessionFactory:Session工厂

Hibernate_Day01_ssh_34


Hibernate_Day01_hibernate_35


Hibernate_Day01_实体类_36

3. Session

Hibernate_Day01_hibernate_37


Hibernate_Day01_配置文件_38

4. Transaction

Hibernate_Day01_配置文件_39

六、hibernate配置错误问题处理

hibernate版本:hibernate-release-5.0.7.Final
mysql版本 :mysql-connector-java-8.0.20
jdk版本:1.8(最好使用这个版本,使用高版本极易出错)

如果使用的是mysql5.0版本的

如果使用的是mysql8.0版本:参考

<session-factory>
<!-- 数据库名称:hibernate_first -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_test?useSSL=false&serverTimezone=UTC</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>

<!-- 设置方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>


<mapping resource="domain/LinkMan.hbm.xml"/>
<mapping resource="domain/Customer.hbm.xml"/>
</session-factory>

注意:数据库要导入对应的jar包




标签:实体类,映射,配置文件,Day01,Hibernate,hibernate,数据库,属性
From: https://blog.51cto.com/u_15923298/5971062

相关文章

  • Android学习day01【搭建Android Studio】
    是Google开发的操作系统Android开发是移动应用开发的表现形式之一还有很多的开发形式,就不一一列举了完整项目精简的开发流程   开发工具Androidstudio(强烈建议......
  • day01-cmd学习
    本章包含cmd常见命令cmd常见命令1.盘符名称+冒号说明:盘符切换举例:D:回车,表示切换到D盘2.dir说明:查看当前路径下的内容,包含隐藏文件和文件夹3.cd目录名说明:......
  • Day01_04_Linux_Ubuntu教程之安装配置 Java 开发环境
    一.Linux安装配置Java开发环境1.概述此处在Ubuntu18.04系统下以jdk-8u211-linux-x64.tar.gz.zip为例2.下载地址​​http://www.oracle.com/technetwork/java/javase/......
  • Day01_06_Linux_Ubuntu教程之安装配置MySQL
    Linux安装MySQL服务器及客户端本教程以ubuntu18.04系统为例1.安装mysql1.1更新ubuntu的source数据源apt-getupdate1.2安装mysql-serverapt-getinstallmysql-server......
  • TCLCN使用过程中,出现 ‘Table ‘XXX.hibernate_sequence‘ doesn‘t exist’
    TCLCN使用过程中,出现‘Table'XXX.hibernate_sequence'doesn'texist’一.异常现象在使用txlcn-tm进行分布式事务的开发过程中,我进行分布式事务的实现,结果在启动tx-manage......
  • day01_Java基础
    day01_Java基础课程目标1.【了解】Java语言发展史2.【理解】Java语言平台版本3.【理解】Java语言特点4.【理解】JRE与JDK5.【掌握】J......
  • Hibernate
    介绍使用方式查询方式......
  • JavaSE-day01-Java入门
    Java的三大使用平台Java有三大平台:JavaSE,JavaEE,JavaMEJavaSE介绍JavaSE是Java语言的标准版,用于桌面应用的开发,是其他两个版本的基础。桌面应用用户只要打......
  • day01 微信小程序
    day01微信小程序1.问题什么是微信小程序?-移动互联网时代,手机。-手机软件,在手机上中安装很多软件。-腾讯和阿里(只安装自己不用别人)-腾讯:微信+N小程序......
  • Day01
    Markdown学习标题三级标题四级标题字体Hello,world!Hello,world!Hello,world!Hello,world!Hello,world!引用选择狂神说JAVA分割线图片超链接点击跳转......