Hibernate初步介绍与学习

前言

今天为大家分享的是一个SSH2的一个持久层框架,
也就是hibernate框架,也称ORM(对象关系映射框架!

初步介绍

1、学习的优势

跨数据库的无缝移植(Sqlserver、Oracle、Mysql)

数据持久化

ORM(Object Relational Mapping):对象关系映射。
对象与关系型数据库之间的映射管理框架

2、项目搭建

2.1 添加hibernate相关依赖

首先去中央仓库找到hibernate的依赖,博主使用的是5.2.12的版本

在这里插入图片描述
点击进去寻找hibernate5.2.12的核心配置文件!
在这里插入图片描述
或者找到你需要的版本

在这里插入图片描述
复制粘贴相关代码,放入pom.xml文件中
在这里插入图片描述
pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wangqiuping</groupId>
  <artifactId>hibernate_test</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>hibernate Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
   <!--junit依赖 -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>3.8.1</version>
	<scope>test</scope>
</dependency>
<!--servlet依赖 -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>4.0.1</version>
	<scope>provided</scope>
</dependency>
<!--mysql依赖 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.6</version>
	</dependency>
<!--Tomcat的jsp依赖  -->
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>8.5.0</version>
</dependency>
	
<!--hibernate依赖  -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.12.Final</version>
</dependency>
</dependencies>
<build>
<finalName>maven</finalName>
<!--jdk依赖 -->
<plugins>
	<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.7.0</version>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
	</plugin>
</plugins>
</build>
</project>

一保存该文件,就会开始自动下载相关的jar包!

避免出错,修改完pom.xml文件之后选中项目进行 maven test一下,看项目是否能创建成功!
在这里插入图片描述
项目的整体结构展示
在这里插入图片描述

2.2 在resource目录下添加hibernate.cfg.xml(核心配置文件)

hibernate.cfg.xml文件是固定的,因为hibernate默认会去寻找该文件!

扫描二维码关注公众号,回复: 11508726 查看本文章

新建完hibernate.cfg.xml文件之后是这个样子的
在这里插入图片描述
给hibernate.cfg.xml(核心配置文件添加DTD约束)

在这里插入图片描述
去hibernate-core-5.2.12.Final.jar下找dtd文件
在这里插入图片描述

打开hibernate-configuration-3.0的dtd文件:
在这里插入图片描述
复制这段代码,其实是将xml版本改为3.0

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

添加成功之后会看到相关提示,如果有提示,说明eclipse中成功添加了hibernate的相关支持!
在这里插入图片描述
如果没有提示,可尝试这种方式:

1、找到这行代码,复制双引号中的内容!
在这里插入图片描述
也就是这一行代码!

-//Hibernate/Hibernate Configuration DTD 3.0//EN

在这里插入图片描述

然后Windows-Perferences-XML路径找到XML Catalog!
在这里插入图片描述
复制代码并寻找本地configuration3.0的配置文件!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当然,configuartion的映射文件的加载方式也是同上操作!

2.3添加Hibernate的配置 mysql的jar使用5.x即可

注意主要配置以下三个方面:

数据库路径的相关配置

 <property name="connection.url">jdbc:mysql://localhost:3306/bookshop&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;userSSL=false
 </property>

注意数据库的路径配置中要进行特殊符号的转义!!

数据库方言的配置:
在这里插入图片描述
右键选中copy全名
在这里插入图片描述
因为博主使用的数据库是mysql的,所以这里配置的也是mysql的,如果是其他数据库,需要一一对应好!

数据库方言的相关配置

   <property name="dialect">org.hibernate.dialect.MySQLDialect
   </property>

调试相关配置

<!-- hibernate运行过程是否站后四自动生成的SQL代码 -->
 <property name="show_sql">true</property>
   
<!-- 是否规范化输出sql代码 -->
   <property name="format_sql">true</property>

实体映射相关配置(该配置可以有多个!)

配置实体类映射之前需要先创建一个实体类,并且实体类必须实现Serializable接口!

User.hbm.xml文件

<?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>
   <!--
     name:实体类的全路径名   table:数据库使用的数据库表格
     -->
   <class name="com.wangqiuping.hibernate.entity.User" table="t_user_hb">
   <!-- 
       id:用于设置数据库表结构中主键的生成方式 
       name:实体类中属性名称
       type:java中的数据类型
       column:数据库字段名称
   -->
     <id name="id" type="java.lang.Integer" column="id">
   <!--
       class:定义主键列生成的方式:
            1、hibernate管理:increment
            2、数据库管理:indentity,sequcene,native
            3、开发者管理:assigne
     -->
      <generator class="increment"></generator>
    </id>
    <!--其他属性的配置  -->
    <property name="userName" type="java.lang.String" column="user_name"></property>
    <property name="userPwd"  type="java.lang.String" column="user_pwd"></property>
    <property name="realName" type="java.lang.String" column="real_name"></property>
    <property name="sex"      type="java.lang.String" column="sex"></property>
    <property name="birthday" type="java.util.Date" column="birthday"></property>
    <property name="createDatetime" insert="false" update="false"  type="timestamp" column="create_datetime"></property>
    <property name="remark"   type="java.lang.String" column="remark"></property>
   </class>
</hibernate-mapping>

这里需要给时间设置成不能增加以及修改!

Demo类(src/main/java下新建一个包)
该类主要用来测试增删改查的操作是否能够成功!

	package com.wangqiuping.hibernate.test;
	
	import java.util.Date;
	import org.hibernate.Session;
	import org.hibernate.SessionFactory;
	import org.hibernate.Transaction;
	import org.hibernate.cfg.Configuration;
	import com.wangqiuping.hibernate.entity.User;
	
	public class Demo {
	
		public static void main(String[] args) {
			Demo  demo=new Demo();
			demo.users();	
		}
		
		
   public  void  users() {
	//创建hibernate核心类
	Configuration  cfg=new Configuration();
	cfg.configure("hibernate.cfg.xml");
	//创建session工厂
	SessionFactory  sf=cfg.buildSessionFactory();
	//获取session
	Session  session=sf.openSession();
	//开启事物
	Transaction ts = session.beginTransaction();
	//新增
	/*User  user=new User();
	user.setUserName("李易峰");
	user.setUserPwd("123");
	user.setRealName("李易峰");
	user.setSex("男");
	user.setBirthday(new Date());
	user.setRemark("国名校草");
	
	//新增的保存操作
	session.save(user);
	ts.commit();//提交事务
	session.close();//关闭session*/
	
	//修改
	/*User  user=new User();
	user.setId(3);
	User u = session.get(User.class,user.getId());
	if(null!=u) {
		u.setRemark("国民男神");
		session.update(u);
	}
	ts.commit();//提交事务
	session.close();//关闭session*/
	
	//删除
	User  user=new User();
	user.setId(3);
	User u = session.get(User.class,user.getId());
	if(null!=u) {
	    session.delete(u);
	}
	ts.commit();//提交事务
	session.close();//关闭session	
		}
	}

hibernate会自动让你的实体类和数据库进行映射!

实体映射文件一定要加到核心配置文件,这里的session与servlet中的session要区别对待!

3、 如何使用hibernate完成CRUD操作

使用的数据库脚本:

---创建数据库表
create table t_user_hb
(
  id int not null primary key,                                      -- ID:主键,注:没有设置为自动增长
  user_name varchar(50) not null,                                   -- 用户名                                
  user_pwd varchar(10) not null,                                    -- 密码
  real_name varchar(50),                                            -- 真实姓名
  sex char(2),                                                      -- 性别                 
  birthday datetime,                                                -- 出生日期
  create_datetime timestamp NULL default CURRENT_TIMESTAMP,         -- 创建日期时间,默认为系统当前时间
  remark varchar(1024)                                              -- 备注
);

---给表格增加数据
insert into t_user_hb(id,user_name,user_pwd,real_name,sex,birthday,create_datetime,remark)
  values(1,'zs','123','张三','男',20001010,null,'abcd');
	
insert into t_user_hb(id,user_name,user_pwd,real_name,sex,birthday,remark)
  values(2,'ls','123','李四','男',20001110,'xyz');
	
---查询表格
select * from t_user_hb;
4.1 CRUD操作步骤
    4.1.1 读取配置
    4.1.2 创建SessionFactory
    4.1.3 打开Session
    4.1.4 开启事务
    4.1.5 CURD
    4.1.6 提交事务/回滚事务
    4.1.7 关闭Session

1、 hibernate默认使用的是手动事务,因此必须显示的开启和提交事务

2、 删除操作时,必须先查再删

增删改查的最终效果

增加

在这里插入图片描述
数据库中的效果
在这里插入图片描述
删除

注意先查询后删除,避免不小心删掉可用的数据!
在这里插入图片描述
删除后的数据库数据
在这里插入图片描述

修改

查询的数据库方言
在这里插入图片描述

修改的数据库方言
在这里插入图片描述
修改前的数据就是新增后的数据
在这里插入图片描述

修改后
在这里插入图片描述

总结

hibernate这个框架的使用,是全自动的,在优化了代码量的同时也帮助我们完成了增删改查的操作,提高了数据的持久性!

猜你喜欢

转载自blog.csdn.net/qq_45464930/article/details/107528649
今日推荐