一切都是最好的安排之hibernate

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

目录导航

  • 一切都是最好的安排之hibernate
    • hibernate概述
    • orm思想
    • hibernate环境搭配
      • 1. 导入jar包
      • 2. 创建实体类
      • 3. 配置映射配置文件
      • 4. 配置核心配置文件
      • 5. 实现操作(七步走,除第五步其余都固定)
  • hibernate核心api
    • 1. configuration
    • 2. SessionFactory
    • 3. session
    • 4. transaction
  • hibernate主键自动生成
    • 对实体类crud操作
      • 添加操作
      • 查询操作
      • 修改操作
      • 删除操作

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();}//提供方法返回sessionFactorypublic 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);

一切都是最好的安排之hibernate00相关推荐

  1. 做好自己,一切都是最好的安排

    在这个世界上,每个人都有自己的想法.做法.活法:理念不同,做法不同,活法就不同.不同层次的人,有不同层次的表现:不要去改变别人,做好自己一切都是最好的安排. 在生活中,我们难免会遇到各式各样的人:单纯 ...

  2. 重庆大学计算机学院最好老师,“一切都是最好的安排”——蒲俊杰老师喜获重庆大学“最受学生欢迎老师”称号...

    2017年6月15日下午,为期一个月的重庆大学第五届"最受学生欢迎的老师"评选活动在A区国际会议厅落下帷幕.新闻学院蒲俊杰老师以初赛环节第三名,决赛环节第一名的佳绩荣获重庆大学第五 ...

  3. 放宽心,一切都是最好的安排

    这是普普通通的一天. 早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚买的米白长裙上顿 ...

  4. 放宽心,坚持住,一切都是最好的安排!!!

    早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚买的米白长裙上顿时出现两只黑黑的爪印儿 ...

  5. 放宽心,坚持住,一切都是最好的安排!

    放宽心,坚持住,一切都是最好的安排! 早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚 ...

  6. 未明学院:别焦虑,在命运为你安排的时区里,一切都准时

    作者 | T同学,华东师范大学学姐,未明学院训练营学员,目前已经拿到悉尼大学offer 往者不可谏 最阴暗不堪的大一,错也错的很值得. "生命必须有裂缝,阳光才照得进来." 再回想 ...

  7. 学什么都不容易!学好一样更不容易!

    好难啊,学什么都好难啊,想学好一样啊更难.现在的社会更是逼的你必须有你的价值,你才能在这个'适者生存'的环境中生存下去.还得必须付出努力.否则你就会被淘汰,被逼的连基本的生活都保障不了,就更别说好日子 ...

  8. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)

    1. 切金条 一块金条切成两半,是需要花费和长度数值一样的铜板的. 比如长度为20的金条, 不管切成长度多大的两半,都要花费20个铜板. 一群人想整分整块金条, 怎么分最省铜板? 例如,给定数组{10 ...

  9. 产品管理职位的级别都有哪些

    饿着肚子睡觉似乎睡得更香. 在我正睡得稀里哗啦的时候,手机的短信响了,真够烦人的,睡觉不关手机本不是我的习惯,但是以前的公司要求这么做,美其名曰是"可以随时找到产品经理",我就纳闷 ...

最新文章

  1. 如何“快”、“准”、“狠”成为优秀算法工程师
  2. asp.net 服务器应用程序不可用
  3. 如何用python画数据图-用Python绘制地理图
  4. Struts2中五个重要的常量
  5. C-#数据库方面好书
  6. 初步认识Volatile-一段代码引发的思考
  7. Marketing Cloud和Cloud for Customer的客户主数据
  8. 基于FlashPaper的文档播放器
  9. django-分页的演示
  10. 蔚来宣布部分车型涨价1万元
  11. oracle mysql 透明网关_如何在Oracle中建立透明网关
  12. OSGI嵌入tomcat应用服务器(gem-web)——资源下载
  13. 关于aab转apk的方法--bundletool
  14. 回溯法 子集和问题
  15. win10家庭中文版系统配置远程桌面连接
  16. 脑科学家:神经科学与大数据的结合带来的新领域
  17. [nlp] LLS减少学习捷径:分析和缓解伪特征标签相关性
  18. 股票交易接口实现方式
  19. 从头实现YOLOv3:第4部分
  20. Vue:前端体系、前后端分离

热门文章

  1. 岩土鬼谷子之端午脑洞
  2. swagger2接口文档
  3. 新唐M261M262M263系列芯片知识总结归纳(1)
  4. 火爆外网的ChatGPT,改Bug,敲代码不在话下
  5. LeetCode打卡:870.优势洗牌
  6. lane是什么意思_lane是什么意思_lane的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. #资讯 #生活 #科技 李斌称蔚来手机进展顺利,微信iOS版内测更新,威马CEO沈晖回应12亿年薪,迅雷网游加速器停运,这就是今天的其它大新闻
  8. django开发一个管理系统基于Python实现的酒店住房管理系统
  9. java高级编程之IO流
  10. Javaweb8==通过tomcat访问到一段代码并执行,同时读取前端数据和从后端给前端返回数据。通过继承javaEE的HttpServlet类。实现登录注册功能和前端界面。