环境搭建 :

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. 如何排查常规软件问题 - 面向 Linux 初级用户的教程

    笔者从 14 年做开源软件以来,接触了众多 Linux 新手用户,这里我为这类用户总结了一些常见的问题排查方法,希望能帮助到大家.如果你已经工作多年,对于下面提到的思路和方法应该非常熟悉,如果对某一条 ...

  2. 如何发现及处理 MySQL 主从延迟问题

    在 Percona MySQL 支持团队中,我们经常看到客户抱怨复制延迟的问题.当然,这对 MySQL 用户来说并不是什么新鲜事,多年来我们在 MySQL 性能博客上发表过一些关于这个主题的文章(过去 ...

  3. Java POI 生成Word文档

    maven的pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-s ...

  4. Luban小试牛刀

    Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github  文档   视频教程  Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...

  5. 推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!

    大家好,我是狂师. 今天给大家介绍一款行为驱动开发测试框架:Cucumber. 1.介绍 Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本.它使用一种名为Gherki ...

  6. VUE中watch的详细使用教程

      1.watch是什么? watch:是vue中常用的侦听器(监听器),用来监听数据的变化 2.watch的使用方式如下 watch: { 这里写你在data中定义的变量名或别处方法名: { han ...

  7. .NET Core WebAPI项目部署iis后Swagger 404问题解决

    .NET Core WebAPI项目部署iis后Swagger 404问题解决 前言 之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解 ...

  8. 高通与At指令:AtCop解析

    背景 在某个新基线上移植AT指令,发现有问题,因此收集了这个系列的 文章 作为 这方面的知识补充. 原文作者:laozhuxinlu,本文有删改. 另外,还参考了:https://www.cnblog ...

  9. 移植 uCos-III 3.03 到 STM32F429 上

    背景 通过STM32 的学习,我们可以往更深层次的地方走,尝试系统上的一些开发. STM32: F429(StdPeriph) uCos-III : v3.04 + 3.03 有关说明: 在移植 3. ...

  10. 使用定时器:在logs目录,每两分钟产生一个文件

    1.使用定时器:在logs目录,每两分钟产生一个文件(文件格式为:201711151323.log.201711151323.log.2017111513xx.log ...思路:定时器定时调用she ...