环境搭建 :

Windo7 x64 +

IDEA 2018+

JDK 8+

Maven 3.0+

MySQL 5.0+


创建Hibernate工程:

导入依赖坐标

<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.15.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.2.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.jboss/jandex -->
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jandex</artifactId>
<version>2.1.3.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.4.1.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-jta_1.1_spec -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1.1</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency> <!-- https://mvnrepository.com/artifact/antlr/antlr -->
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.15.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> <!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency> </dependencies>

编写数据库映射的实体类

- 如果数据库没有这张数据表,Hibernate会进行创建

- 如果有了也没关系,Hibernate会进行更新

- 不同于Myabtis的包目录,Hibernate的包目录使用entity实体来表示

package cn.dai.entity;

/**
* @author ArkD42
* @file Hibernate
* @create 2020 - 05 - 09 - 21:47
*/ public class User {
private Integer user_id;
private String user_name;
private String user_password; public User() {
} public User(Integer user_id, String user_name, String user_password) {
this.user_id = user_id;
this.user_name = user_name;
this.user_password = user_password;
} public Integer getUser_id() {
return user_id;
} public void setUser_id(Integer user_id) {
this.user_id = user_id;
} public String getUser_name() {
return user_name;
} public void setUser_name(String user_name) {
this.user_name = user_name;
} public String getUser_password() {
return user_password;
} public void setUser_password(String user_password) {
this.user_password = user_password;
} @Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", user_password='" + user_password + '\'' +
'}';
}
}

在建立完数据库映射类和配置、测试之后

IDEA会自动帮我们表示一些信息,让其看起来是一个ORM类

使用配置文件描述我们的数据表&实体类的关系

编写映射配置文件

命名规范以实体类的类名命名,首字母大小写皆可

【不推荐把此配置文件放在实体类包下,Maven会造成导出资源过滤问题】

配置约束信息:

<?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"
>

声明映射元素:

package属性:我们要映射的类的所在包的位置

<?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 package="cn.dai.entity" > </hibernate-mapping>

指明具体的实体映射类和映射的数据表名

name属性:指向映射类的位置

table属性:指向数据库中的表名

<?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 package="cn.dai.entity" > <class name="cn.dai.entity.User" table="user" > </class> </hibernate-mapping>

设置主键字段

id元素表示主键

name表示类的属性名称【有辅助提示】

column表示对应的数据表字段

generator 表示主键的增长策略

class的值native 表示策略为自增

<?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 package="cn.dai.entity" > <class name="cn.dai.entity.User" table="user" >
<id name="user_id" column="user_id" >
<generator class="native" />
</id> </class> </hibernate-mapping>

设置其他字段映射

<?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 package="cn.dai.entity" > <class name="cn.dai.entity.User" table="user" > <id name="user_id" column="user_id" >
<generator class="native" />
</id>


    <property name="user_name" column="user_name" />
<property name="user_password" column="user_password" />
</class> </hibernate-mapping>

创建Hibernate核心配置文件:

- 文件名称只能是【hibernate.cfg.xml

- 文件的位置必须在classpath的根路径下

引入配置约束

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration> </hibernate-configuration>

配置会话工厂

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory> </session-factory> </hibernate-configuration>

编写连接参数

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql:///ssm?serverTimezone=Asia/Shanghai</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> </session-factory> </hibernate-configuration>

配置Hibernate参数信息和映射文件位置

hibernate.show_sql

  表示 执行时输出SQL语句的样子

hibernate.format_sql

  表示 SQL语句会进行格式工整化 【否则输出直接一行一把梭】

hibernate.hbm2ddl.auto

  表示 Hibernate会自动执行DDL语句,用UPDATE表示,没有就创建表,有则更新表

hibernate.dialect

  表示SQL方言,就是每一个数据库厂商的每一个版本都有略微不同的语法

  这个根据Hibernate提供的方言和我们实际安装的数据库版本相匹配即可

  【匹配原则,按数据库的版本为主语法】

mapping

  类似Mybatis的映射器配置,注意这里是直接写文件名即可

  如果是多级目录,要使用的是斜杠分隔,不是按包结构用点分隔

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql:///ssm?serverTimezone=Asia/Shanghai</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> <property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property> <mapping resource="user.hbm.xml" />
</session-factory> </hibernate-configuration>

编写测试代码

import cn.dai.entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @author ArkD42
* @file Hibernate
* @create 2020 - 05 - 09 - 22:40
*/
public class HibernateTest { @Test
public void letsGetThisWork(){ // 创建配置对象
Configuration configuration = new Configuration(); // 调用配置方法,这个方法会直接去找hibernate.cfg.xml 不需要按名字注入配置
configuration.configure(); // 从配置对象中调用工厂建造方法,创建会话工厂实例
SessionFactory sessionFactory = configuration.buildSessionFactory(); // 调用开启会话 获取会话对象
Session session = sessionFactory.openSession(); // 事务对象 会话开启事务对象
Transaction transaction = session.beginTransaction(); // 实体类的 对象,映射成一个SQL记录
User user = new User(null, "程序员1010", "337848"); // Hibernate不需要我们来写具体SQL语句,调用这些方法即可
// save是插入的意思
session.save(user); // 提交事物
transaction.commit(); // 资源释放
session.close();
sessionFactory.close();
}
}

查看测试:

关于日志:

这里的LOG4J异常不用担心,我们已经在Maven中导入了这些依赖。

只是没有配置日志的配置文件

log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file # Settings About ConsoleOutput
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n # Settings About FileOutput
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/logging.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n # LogOutput Level
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

再次测试就会生成日志记录,控制台也会输出日志信息了


问题总结:

- 实体类的编写规范要求:

  1、构造器必须要声明无参构造器和全参构造器

  2、每一个属性都要提供对应的SETTER & GETTER

  3、提供toString方法,打印可以查看对象的字段值

- 映射文件配置:

  1、把文件放在实体类的包中,Maven就会过滤配置文件

测试结果就会报错,这时候翻看我们的生成文件目录

里面的映射文件根本就没有【就是Maven的资源过滤问题】

可以使用 过滤条件进行调整

pom.xml

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource> <resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

再次测试,成功

  2、主键和其他字段有一些区别,例如元素使用的是ID,还有内部的增长策略要注意

- Hibernate核心配置文件

  1、连接参数不要写错,注意MySQL的驱动要求

  比如8.0我不写时区参数就会报错【?serverTimezone=Asia/Shanghai】

  2、注意SQL方言选择,不要导致不兼容的方言问题

  3、注册映射器,用斜杠分隔,不要按包目录用点号分隔

【Hibernate】02 快速入门的更多相关文章

  1. springboot笔记02——快速入门quickstart

    前言 学习一个新的框架,往往会用一个quickstart快速入门,这次就写一下springboot的quickstart程序. 开发环境 JDK 1.8 Springboot 2.1.6 Maven ...

  2. webpack 学习笔记 02 快速入门

    webpack 的目标 将依赖项分块,按需加载. 减少web app的初始加载时间. 使每一个静态集合都能够作为组件使用. 有能力集成第三方库,作为组件使用. 高度可配置化. 适用于大型项目. INS ...

  3. xBIM 基础02 快速入门

    系列目录    [已更新最新开发文章,点击查看详细]  一.新建项目 Visual Studio 新建项目.项目创建完成后 Nuget ,项目添加 Xbim.Essentials,那么如果项目需要几何 ...

  4. Hibernate知识点小结(一)--快速入门

    一.Hibernate的简介    1.Hibernate是一个开放源代码的对象关系映射框架    2.对象关系映射:ORM  Object Relation Mapping        对象与数据 ...

  5. Hibernate第一篇【介绍Hibernate,简述ORM,快速入门】

    前言 前面已经学过了Struts2框架了,紧接着就是学习Hibernate框架了-本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门 什么是Hibernate框架? Hib ...

  6. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  7. Hibernate入门第一讲——Hibernate框架的快速入门

    Hibernate框架的概述 什么是框架? 框架指的是软件的半成品,已经完成了部分功能. JavaEE开发的三层架构 了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经 ...

  8. spring5.02版快速入门

    spring5.02版快速入门分为以下 四步, 1. 引入依赖 2. 创建beans.xml配置文件 3 创建相应的接口实现类(仅仅是快速创建,实现类不给任何方法) 4. 创建容器对象,根据id获取对 ...

  9. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

  10. .Net Core 3.0 IdentityServer4 快速入门02

    .Net Core 3.0 IdentityServer4 快速入门 —— resource owner password credentials(密码模式) 一.前言 OAuth2.0默认有四种授权 ...

随机推荐

  1. Java中GUI

    目录 1.Java GUI 概述 2.容器 2.1 窗口 2.2 弹窗和对话框 对话框 自定义弹窗 2.3 面板 普通面板 滚动面板 分隔面板 选项卡面板 3.布局 3.1.流式布局 3.2.网格布局 ...

  2. 开发视频会议系统:使用GPU解码渲染视频

    现在,使用视频会议系统远程协同办公.沟通交流,已经非常普遍了.如果我们要开发自己的视频会议系统,那么,GPU解码渲染技术是不可缺少的. 在视频会议系统中,经常需要同时观看会议中多个参会人员的视频图像, ...

  3. 连续段 dp - 状态转移时依赖相邻元素的序列计数问题

    引入 在一类序列计数问题中,状态转移的过程可能与相邻的已插入元素的具体信息相关. 这类问题通常的特点是,如果只考虑在序列的一侧插入,问题将容易解决. 枚举插入顺序的复杂度通常难以接受,转移时枚举插入位 ...

  4. 小米 红米 Redmi MIUI 5G开关

    小米 红米 Redmi MIUI 5G开关 1.打开手机拨号界面输入 *#*#54638#*#* 之后拨号界面底部会显示display 5G network menu (显示5G网络菜单) 注意:先是 ...

  5. TCP,UDP,IP,数据链路层头部详解

    UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...

  6. Android 7 修改启动动画和开机声音

    背景 在修改开机音量的时候,发现找不到对应的声音功能调用. 因此了解了一下安卓的开机声音是如何实现的. 安卓4~安卓7 都可以这么做. 参考: https://blog.csdn.net/chen82 ...

  7. ZYNQ:使用 PetaLinux 构建Linux项目

    参考文档:ug1144-petalinux-tools-reference-guide.pdf 环境安装 tofrodos iproute2 gawk gcc g++ git make net-too ...

  8. Freertos学习:03-任务

    --- title: rtos-freertos-03-任务 EntryName: rtos-freertos-03-task date: 2020-06-20 09:15:07 categories ...

  9. 【Zabbix】Zabbix5.0安装部署问题汇总

    报错信息:No package 'oniguruma' found 解决方法:https://www.limstash.com/articles/202003/1563 报错信息: PHP bcmat ...

  10. Java常见的加密方式

    前言 传说在古罗马时代,发生了一次大战.正当敌方部队向罗马城推进时,古罗马皇帝凯撒向前线司令官发出了一封密信:VWRS WUDIILF.这封密信被敌方情报人员翻遍英文字典,也查不出这两个词的意思. 此 ...