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默认会去寻找该文件!
新建完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&useUnicode=true&characterEncoding=UTF-8&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这个框架的使用,是全自动的,在优化了代码量的同时也帮助我们完成了增删改查的操作,提高了数据的持久性!