一切都是最好的安排之hibernate00
一切都是最好的安排之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概述
- hibernate框架是轻量级开源框架
- hibernate在J2EE三层结构中dao层,与数据库交互操作,底层代码是JDBC,对JDBC进行封装,好处不用写负责的JDBC和sql语句
- 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相关推荐
- 做好自己,一切都是最好的安排
在这个世界上,每个人都有自己的想法.做法.活法:理念不同,做法不同,活法就不同.不同层次的人,有不同层次的表现:不要去改变别人,做好自己一切都是最好的安排. 在生活中,我们难免会遇到各式各样的人:单纯 ...
- 重庆大学计算机学院最好老师,“一切都是最好的安排”——蒲俊杰老师喜获重庆大学“最受学生欢迎老师”称号...
2017年6月15日下午,为期一个月的重庆大学第五届"最受学生欢迎的老师"评选活动在A区国际会议厅落下帷幕.新闻学院蒲俊杰老师以初赛环节第三名,决赛环节第一名的佳绩荣获重庆大学第五 ...
- 放宽心,一切都是最好的安排
这是普普通通的一天. 早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚买的米白长裙上顿 ...
- 放宽心,坚持住,一切都是最好的安排!!!
早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚买的米白长裙上顿时出现两只黑黑的爪印儿 ...
- 放宽心,坚持住,一切都是最好的安排!
放宽心,坚持住,一切都是最好的安排! 早上起来,她发现家里停电了.于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门. 刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚 ...
- 未明学院:别焦虑,在命运为你安排的时区里,一切都准时
作者 | T同学,华东师范大学学姐,未明学院训练营学员,目前已经拿到悉尼大学offer 往者不可谏 最阴暗不堪的大一,错也错的很值得. "生命必须有裂缝,阳光才照得进来." 再回想 ...
- 学什么都不容易!学好一样更不容易!
好难啊,学什么都好难啊,想学好一样啊更难.现在的社会更是逼的你必须有你的价值,你才能在这个'适者生存'的环境中生存下去.还得必须付出努力.否则你就会被淘汰,被逼的连基本的生活都保障不了,就更别说好日子 ...
- 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
1. 切金条 一块金条切成两半,是需要花费和长度数值一样的铜板的. 比如长度为20的金条, 不管切成长度多大的两半,都要花费20个铜板. 一群人想整分整块金条, 怎么分最省铜板? 例如,给定数组{10 ...
- 产品管理职位的级别都有哪些
饿着肚子睡觉似乎睡得更香. 在我正睡得稀里哗啦的时候,手机的短信响了,真够烦人的,睡觉不关手机本不是我的习惯,但是以前的公司要求这么做,美其名曰是"可以随时找到产品经理",我就纳闷 ...
最新文章
- 如何“快”、“准”、“狠”成为优秀算法工程师
- asp.net 服务器应用程序不可用
- 如何用python画数据图-用Python绘制地理图
- Struts2中五个重要的常量
- C-#数据库方面好书
- 初步认识Volatile-一段代码引发的思考
- Marketing Cloud和Cloud for Customer的客户主数据
- 基于FlashPaper的文档播放器
- django-分页的演示
- 蔚来宣布部分车型涨价1万元
- oracle mysql 透明网关_如何在Oracle中建立透明网关
- OSGI嵌入tomcat应用服务器(gem-web)——资源下载
- 关于aab转apk的方法--bundletool
- 回溯法 子集和问题
- win10家庭中文版系统配置远程桌面连接
- 脑科学家:神经科学与大数据的结合带来的新领域
- [nlp] LLS减少学习捷径:分析和缓解伪特征标签相关性
- 股票交易接口实现方式
- 从头实现YOLOv3:第4部分
- Vue:前端体系、前后端分离
热门文章
- 岩土鬼谷子之端午脑洞
- swagger2接口文档
- 新唐M261M262M263系列芯片知识总结归纳(1)
- 火爆外网的ChatGPT,改Bug,敲代码不在话下
- LeetCode打卡:870.优势洗牌
- lane是什么意思_lane是什么意思_lane的翻译_音标_读音_用法_例句_爱词霸在线词典...
- #资讯 #生活 #科技 李斌称蔚来手机进展顺利,微信iOS版内测更新,威马CEO沈晖回应12亿年薪,迅雷网游加速器停运,这就是今天的其它大新闻
- django开发一个管理系统基于Python实现的酒店住房管理系统
- java高级编程之IO流
- Javaweb8==通过tomcat访问到一段代码并执行,同时读取前端数据和从后端给前端返回数据。通过继承javaEE的HttpServlet类。实现登录注册功能和前端界面。