一. 什么是hibernate
ORM框架/持久层框架( object reference mapping)
ORM
ORM(Object-Relationship-Mapping):是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。
JPA
JPA(Java-Persistence-API):是Java持久化接口的意思,它是JavaEE关于ORM思想的一套标准接口,仅仅是一套接口,不是具体的实现。
通过管理对象来改变数据库中的数据, 通过管理对象来操作数据库,Hibernate是一个完完全全的ORM组件,它是完全基于对象来操作数据库中的记录 , 与hibernate类似的框架:mybatis
优势:跨数据库的无缝移植
二. 在项目中添加hibernate支持(手动添加)
1、添加hibernate相关依赖
2、在resource目录下添加hibernate.cfg.xml(核心配置文件)
①添加dtd 约束
展开hibernate的jar,找到下面画红线的文件,点开
将上面画红线的代码块粘贴到 hibernate.cfg.xml中
②添加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.username">root</property>
<property name="connection.password">123</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置sql语句生成的规则,配置数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置本地事务 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 配置开发调试所用的配置show_sql,format_sql -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>
3、 在开发阶段再创建实体类和实体映射文件(*.hbm.xml) , 注:实体必须实现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.zking.hibernate.entity.User" table="t_hibernate_user">
<!-- name:指的是类属性 type: 类属性的类型 column: 对应表的对应列 -->
<!-- id标签对应的为表示列 -->
<id name="id" type="java.lang.Integer" column="id">
<!-- 配置数据库的主键生成策略 -->
<generator class="org.hibernate.id.IncrementGenerator"></generator>
</id>
<!-- name:指的是类属性 type: 类属性的类型 column: 对应表的对应列 -->
<property name="user_name" type="java.lang.String" column="user_name"></property>
<property name="user_pwd" type="java.lang.String" column="user_pwd"></property>
<property name="real_name" 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="create_datetime" type="java.security.Timestamp" column="create_datetime" insert="false" update="false"></property>
<property name="remark" type="java.lang.String" column="remark"></property>
</class>
</hibernate-mapping>
hibernate的核心配置文件中需要配置实体的映射文件
三.用法
在这里只写一个main方法进行测试了,在开发中以实际情况为准:
package com.zking.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.zking.hibernate.entity.User;
public class Test {
public static void main(String[] args) {
/*
* hibernate使用七步走:
* 1、对hibernate.cfg.xml建模
* 2、通过建模所得到的config文件类,获取所配置的sessionfactory
* 3、获取session会话
* 4、开启事务
* 5、操作数据库
* 6、提交事务
* 7、关闭session会话
*/
// 由于hibernate已经帮我们封装好了, 建模这一步就不用那么麻烦了, 直接调用它的就行:
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configure.buildSessionFactory();
// 这里的session会话可以理解为数据库的connection
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//5、操作数据库
//这里的1为用户的id
User user = session.get(User.class, 1); //查询单个操作
/*
* user.setReal_name("张老三"); 修改操作
*/
/*
* User user=new User(); 增加操作
* user.setReal_name("王五");
* user.setRemark("nhyjcfkdh");
* user.setBirthday(new Date());
* user.setSex("男");
* user.setUser_name("ww");
* user.setUser_pwd("123");
* session.save(user);
*/
/*
* User user=new User(); 删除操作
* user.setId(3);
* session.delete(user);
*/
transaction.commit();
session.close();
}
}