(1)项目中添加Hibernate依赖

    <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>

(2)项目中添加Hibernate配置文件

 <?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> <!-- 数据库连接设置 --> <!--数据库连接驱动-->
<!--<property name="connection.driver_class">com.mysql.jdbc.Driver</property>-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <!--数据库连接地址-->
<!--<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo</property>-->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo?serverTimezone=UTC</property> <!--数据库连接用户名-->
<property name="connection.username">root</property> <!--数据库连接密码-->
<property name="connection.password"></property> <!-- 配置内置连接池中的连接数 -->
<property name="connection.pool_size">5</property> <!-- 数据库方言配置 -->
<!--<property name="dialect">org.hibernate.dialect.MySQLDialect</property>-->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property> <!--&lt;!&ndash; Disable the second-level cache &ndash;&gt;-->
<!--<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>--> <!-- 操作数据库时,是否向控制台打印Sql语句 -->
<property name="show_sql">true</property> <!-- 事务自动提交 -->
<!--<property name="connection.autocommit">true</property>--> <!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession -->
<!--<property name="current_session_context_class">thread</property>--> <!-- 打印Sql语句前,是否将Sql语句格式化 -->
<property name="format_sql">true</property> <!-- 生成表结构的策略配置
update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构.
如果存在表结构,并且表结构与实体一致,那么不做修改
如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列.
create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失)
create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构.
validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常.
-->
<property name="hbm2ddl.auto">update</property> <!-- 引入ORM映射文件 填写src之后的路径-->
<mapping resource="User.hbm.xml"/> <!-- Names the annotated entity class -->
<!--<mapping class="cn.coreqi.entities.Users"/>--> </session-factory> </hibernate-configuration>

(3)添加表对象关系映射文件 || 在实体类上添加注解(推介)

表对象关系映射文件

 <?xml version="1.0"?>

 <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!--
ORM元数据 表对象关系映射文件
package : 配置该配置文件中类所在的包.
-->
<hibernate-mapping package="cn.coreqi.entities"> <!--
class标签: 配置实体与表的关系
name属性: 实体类类名
table属性: 与实体类对应的数据表名称
dynamic-insert属性: 动态插入 默认值false
true=>如果字段值为null,不参与insert语句
dynamic-update属性: 动态更新 默认值false
true=>没改动过的属性,将不会生成到update语句中
-->
<class name="Users" table="users">
<!-- id标签: 配置实体类与数据表的主键映射
name: 实体类中主键的属性名称
column: 数据表中主键的列名
length: 列的数据长度
unsaved-value(不常用): 指定主键为什么值时,当做null来处理.
access(强烈推荐不要用):field 那么在操作属性时,会直接操作对应的字段而不是get/set方法
-->
<id name="Id" column="Id">
<!-- generator 主键生成策略
1.increment 数据库自己生成主键. 先从数据库中查询最大的ID值,将ID值加1作为新的主键
2.identity 依赖于数据的主键自增功能
3.sequence 序列,依赖于数据中的序列功能(Oracle).
4.hilo(纯了解,永远用不到) : Hibernate自己实现序列的算法,自己生成主键. (hilo算法 )
5.native 自动根据数据库判断,三选一. identity|sequence|hilo
6.uuid 生成32位的不重复随机字符串当做主键
7.assigned 自己指定主键值. 表的主键是自然主键时使用.
-->
<generator class="identity"/>
</id>
<!-- property 实体类属性与数据表中列的映射
name : 实体类中属性名称
column : 数据表中列的名称
length : 数据长度
precision: 小数点后的精度
scale: 有效位数
insert(一般不用): 该属性是否加入insert语句.
update(一般不用): 该属性是否加入update语句.
not-null : 指定属性的约束是否使用 非空
unique : 指定属性的约束是否使用 唯一
type: 表达该属性的类型,可以用三种方式指定属性
Ⅰ: java类型 java.lang.String
Ⅱ: 数据库类型指定 varchar
Ⅲ: Hibernate类型指定 string
-->
<property name="userName" column="UserName" type="string"/>
<property name="passWord" column="PassWord" type="string"/>
<property name="enabled" column="Enabled" type="int"/>
</class> </hibernate-mapping>

添加了注解的实体类(推荐)启动此种方式需要在Hibernate配置文件中启动

62         <!-- Names the annotated entity class -->
63 <!--<mapping class="cn.coreqi.entities.Users"/>-->
 package cn.coreqi.entities;

 import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable; @Entity
@Table(name = "users")
public class Users implements Serializable { @Id
@GeneratedValue(generator="diy")
@GenericGenerator(name="diy", strategy = "identity")
private Integer Id;
@Column
private String UserName;
@Column
private String PassWord;
@Column
private Integer Enabled; public Integer getId() {
return Id;
} public Users() {
} public void setId(Integer id) {
Id = id;
} public String getUserName() {
return UserName;
} public void setUserName(String userName) {
UserName = userName;
} public String getPassWord() {
return PassWord;
} public void setPassWord(String passWord) {
PassWord = passWord;
} public Integer getEnabled() {
return Enabled;
} public void setEnabled(Integer enabled) {
Enabled = enabled;
} @Override
public String toString() {
return "Users{" +
"Id=" + Id +
", UserName='" + UserName + '\'' +
", PassWord='" + PassWord + '\'' +
", Enabled=" + Enabled +
'}';
}
}

(4)编写dao文件

 package cn.coreqi.dao.hibernate;

 import cn.coreqi.entities.Users;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.cfgxml.spi.LoadedConfig;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.springframework.stereotype.Repository; import java.io.File; @Repository
public class UsersHibernate {
//private SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
private final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
private SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
public void addUsers(){
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
Users users = new Users();
users.setUserName("gaoxing");
users.setPassWord("mmmmm");
users.setEnabled(1);
session.save(users);
ts.commit();
session.close();
}
}

Hibernate5.4的环境搭建的更多相关文章

  1. ssh运行环境搭建及测试

    一.运行环境 1.Spring环境 Spring是一站式开发框架,在SSH中主要有以下作用,就像一个大管家: 控制反转(Inversion of Control):类不再自己进行类创建,而是交给Spr ...

  2. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  3. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  4. rnandroid环境搭建

    react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...

  5. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  6. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  7. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  8. Nexus(一)环境搭建

    昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...

  9. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

随机推荐

  1. MT【234】正方形染色(二)

    有$n$个正方形排成一行,今用红,白,黑三种颜色给这$n$个正方形染色,每个正方形只能染一种颜色.如果要求染这三种颜色的正方形都是偶数个,问有多少种不同的染色方法. 解答: 设有$a_n$种不同的染法 ...

  2. MT【71】数列裂项放缩题

    已知${a_n}$满足$a_1=1,a_{n+1}=(1+\frac{1}{n^2+n})a_n.$证明:当$n\in N^+$时, $(1)a_{n+1}>a_n.(2)\frac{2n}{n ...

  3. MT【42】抛物线不常见性质1.

    评:特别的,当$PP'$为切线时,$\angle PSK=90^0$ 注:S为抛物线焦点.

  4. 【刷题】BZOJ 1132 [POI2008]Tro

    Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...

  5. 实现 60fps 的网易云音乐首页

    网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户.最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架 - MDTable.为了去验证框架的可用性,我选择了网易云音乐的 ...

  6. Python--Django学习笔记1

    Django:The Web framework for perfectionists with deadlines Django是一个Python语言开发的高级Web框架,采用MVC架构,通过配置可 ...

  7. 洛谷P2446 大陆争霸

    这是一道dijkstra拓展......不知道为什么被评成了紫题. 有一个很朴素的想法就是每次松弛的时候判断一下那个点是否被保护.如果被保护就不入队. 然后发现写起来要改的地方巨多无比...... 改 ...

  8. 洛谷P1012 拼数 string

    又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...

  9. array扩展运算符

    扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 console ...

  10. Codeforce Div-3 E.Cyclic Components

    You are given an undirected graph consisting of nn vertices and mm edges. Your task is to find the n ...