一切都是最好的安排之hibernate00

一切都是最好的安排之hibernate

你好!如果你想学习hibernate,可以仔细阅读文章,相信会有一定的收获。

hibernate概述

  1. hibernate框架是轻量级开源框架
  2. hibernate在J2EE三层结构中dao层,与数据库交互操作,底层代码是JDBC,对JDBC进行封装,好处不用写负责的JDBC和sql语句
  3. hibernate版本:hibernate 5.x(学习) 其他hibernae 4.x、hibernate 3.x

orm思想

object relational mapping ——对象关系映射

描述: 将实体类数据库表一一对应、将实体类属性与数据表字段名一一对应
在这里插入图片描述

hibernate环境搭配

导入jar包——>创建实体类——>配置映射配置文件——>配置核心配置文件——>实现操作

1. 导入jar包

创建lib文件,导入所需jar包
在这里插入图片描述

2. 创建实体类

3. 配置映射配置文件

映射配置文件没有固定名称与位置

<?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>
 <!-- 1 配置类和表对应 
  class标签
  name属性:实体类全路径
  table属性:数据库表名称
 -->
 <class name="com.itheima.entity.User" table="t_user">
  <!-- 2 配置实体类id和表id对应 
   hibernate要求实体类有一个属性唯一值
   hibernate要求表有字段作为唯一值
  -->
  <!-- id标签
   name属性:实体类里面id属性名称
   column属性:生成的表字段名称
   -->
  <id name="uid" column="uid">
   <!-- 设置数据库表id增长策略 
    native:生成表id值就是主键自动增长
   -->
   <generator class="native"></generator>
  </id>
  <!-- 配置其他属性和表字段对应 
   name属性:实体类属性名称
   column属性:生成表字段名称
  -->
  <property name="username" column="username"></property>
  <property name="password" column="password"></property>
  <property name="address" column="address"></property>
 </class>
</hibernate-mapping>

4. 配置核心配置文件

核心配置文件有固定名称与位置:命名(hibernate.cffg.xml)位置(src下面)

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password">123456</property>
  
  <!-- 第二部分: 配置hibernate信息  可选的-->
  <!-- 输出底层sql语句 -->
  <property name="hibernate.show_sql">true</property>
  <!-- 输出底层sql语句格式 -->
  <property name="hibernate.format_sql">true</property>
  <!-- hibernate帮创建表,需要配置之后 
   update: 如果已经有表,更新,如果没有,创建
  -->
  <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- 配置数据库方言
   在mysql里面实现分页 关键字 limit,只能使用mysql里面
   在oracle数据库,实现分页rownum
   让hibernate框架识别不同数据库的自己特有的语句
   -->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  
  <!-- 第三部分: 把映射文件放到核心配置文件中 必须的-->
  <mapping resource="com/itheima/entity/User.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

5. 实现操作(七步走,除第五步其余都固定)

第一步 加载hibernate核心配置文件

Configuration cfg = new Configuration();
cfg.configure();

第二步 创建SessionFactory对象

SessionFactory SessionFactory = cfg.buildSessionFactory();

第三步 使用SessionFactory创建session对象

Session session = SessionFactory.openSession();

第四步 开启事务

Transaction tx = session.beginTransaction();

第五步 写具体逻辑 crud操作

User user = new User();
user.setUsername(“qqb”);
user.setPassword(“qqb”);

session.save(user);

第六步 提交事务

tx.commit();

第七步 关闭资源

session.close();
SessionFactory.close();

hibernate核心api

1. configuration

找到src下的hibernate.cfg.xml核心配置文件,创建新对象将配置文件放里面加载

Configuration cfg = new Configuration();
cfg.configure();

2. SessionFactory

  • 使用configuration创建session factory对象
    创建过程:根据核心配置文件,数据库配置与映射配置,根据数据表映射关系创建数据表

  • 由于创建session factory对象,特别占用资源,建议一个项目创建一个sessionfactory对象

  • 所以提供工具类,利用静态写法实现(静态代码块在类加载时候执行一次)

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Hibernate(){
	static Configuration cfg = null;
	 static SessionFactory sessionFactory = null;
 	//静态代码块实现
 	static {
 	 //加载核心配置文件
 	 cfg = new Configuration();
    	 cfg.configure();
 	 sessionFactory = cfg.buildSessionFactory();
 }
 
 //提供方法返回sessionFactory
 public static SessionFactory getSessionFactory() {
 	 return sessionFactory;
	 }
 
 public static void main(String[] args) {
}

3. session

  • session类似于JDBC的connection
  • 写完操作语句,调用session方法实现crud操作
    添加 session.save( );
    删除 session.delete( );
    修改 session.update( );
    查询 session.get( .class, id);
  • session对象单线程对象,不能共用,只能自用。

4. transaction

事务对象,对应七步之四(开启事务)

Transaction tx = session.beginTransaction();

事务分为:提交与回滚

tx.commit();//提交
tx.rollback();//回滚

事务具有:

  • 原子性
  • 一致性(举例:银行操作,转账,甲转出乙收到,如果操作失败双方不改变)
  • 隔离性
  • 持久性()

hibernate主键自动生成

hibernate要求实体类有属性要作为唯一值,对应主键,主键可以有不同的生成策略

  • 主键自增
<id name="uid" column="uid">
   <!-- 设置数据库表id增长策略 
    native:生成表id值就是主键自动增长
   -->
   <generator class="native"></generator>
  </id>
  • 主键生成唯一的字符串
<id name="uid" column="uid">
   <!-- 设置数据库表id唯一策略 
    uuid:生成表id值生成32位十六进制的唯一字符串   -->
   <generator class="uuid"></generator>
  </id>

在这里插入图片描述

对实体类crud操作

添加操作

利用session.save

User user = new User();  //User实体类
user.setUsername("qbb");
user.setPassword("123000")//Username与Password属性

ssesion.save(user);

查询操作

根据id查询

User user = session.get(User.class,1);

修改操作

User user = session.get(User.class,1);
user.setUsername("有道有术");
//根据id的查询,找到对象执行update操作
session.update(user);

删除操作

User user = session.get(User.class,1);
//根据id的查询,找到对象delete操作
session.delete(user);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值