Hibernate 基础入门
概述:
JDBC:将java和数据库连接的驱动程序加载到项目中,在代码里面,注册驱动,创建链接,创建satement对象,发送并执行sql之类,关闭连接。
hibernate :数据持久化一个框架,对JDBC的一个封装:使用的好处:可以不用手动sql指令就可以完成一定的持久化功能。 应用与Dao层。是一个轻量级开源的框架。
版本:3.x 4.x 5.x
ORM思想:object relational mapping :java里面的实体类和关系型数据库表格一一对应的关系,实体属性和表格字段一一对应的关系。
实体对象编写的规范:
1、要给实体对象设置一个唯一的属性:属性的数据类型一般是数值型数据或者字符串
2、如果是数值型数据:一般要用包装类型:Integer Long
3、同理其他属性的数据类型也建议不要使用基本类型,使用包装类型。
4、要符合javabean编码规范。
主键自增策略(常用的):
Increment:每次增量为1,(只要在其他进程没有想同一个表格插入数据才可以)
Native:可以根据底层数据库的不同来选择使用identity还是使用sequence;
Indentity:使用数据库自增的方法去实现自增(sqlServer)
Sequence:使用数据库里面的序列实现自增(本身数据库不支持自增功能,Oracle)
Uuid
在hibernate中实体的状态:
瞬时态:就是这个实体对象刚刚创建出来,在内存里面存着,但是没有保存到数据库。这个实体对象没有主键,那么这个实体对象就是瞬时态。
持久态:实体对象保存到了数据库,但还和hibernate 的api有联系的一个状态。如果一个实体对象有主键,并且和session有联系,那么成为持久态。
托管态:session对象已经关闭,我的对象保持到数据库里面
Hibernate的缓存
1、缓存是什么:就是一块内存:
2、缓存的作用:用来节省操作时间的。
3、hibernate的缓存:分为一级和二级缓存
1、一级缓存特点:Hibernate一级缓存默认是打开的。而且有使用范围:session的范围:从session创建到session关闭。 在一级缓存中存储的对象的状态必须是持久态。
2、二级缓存特点:基本不再有人去使用,替代技术:redis
默认关闭的,打开需要配置,使用范围:sessionFactory
3、代码验证一级缓存的存在:
在一个session里面执行两次get方法,查询id为2的,看两次查询是否都发送sql指令。
4、一级缓存的执行过程:在第一次执行get方法是,先到一级缓存中去查询有没有相应的数据,这个时候才去到数据库查询,并把持久态的对象的值放到缓存中,再返回。以后查询操作都是按照这个步骤去执行。因为存的是对象的数据,因此两次从缓存中返回的对象是不同的对象。
5、一级缓存的特性:持久态会自动更新数据库。
演示代码:使用get获得某个对象,然后再修改返回对象的某个属性,不使用其他任何方法,事件提交后,立刻将修改的数据修改到数据库中。
原因:一级缓存里面有一个对照区域
4、事务操作规范
1、相关概念:
事务:执行的最小单元。
特点:原子性,一致性,隔离型和持久性。
2、规范:
Try{
开启事务
处理事务
提交事务
}catch(){
回滚事务
}finnally{
关闭资源
}
5、session特点:单线程:只能自己用,不能公用:
如果在项目开发过程中,多个人共同开发一个项目,很难保证session是唯一的。如何解决,让本地线程绑定session,仅需要配置一下,然后在代码中体现出来。。
<property name =”hibernate.current_session_context_class”>thread</property>
在代码中获取session:(可以写到工具类中)
sessionFactory.getCurrentSession();
4、获取与本地线程帮顶的session后,如果我们的代码要是有session.close(),那么会产生SessionException,报Session已关闭,因为与线程绑定后,线程结束,session自动关掉。
6、Hibernate中其他的api的使用
一下三种对象都可以实现查询功能。
1、Query对象:使用Query对象不需要写SQL语句,但是需要些HQL。HQL和普通SQL的区别:SQL操作的数据库中的表和字段。HQL操作的实体类和属性。
查询所有用户的HQL:form 实体类的名称
Query query=Session.createQuery(“form User”);
List<user> list =query.list()
2、Criteria对象:也可也完成上面的功能,但是他不需要写HQL,直接调用里面的方法。
Criteria c = session.createCriteria(User.class);
List<user> list=C.list();
3、SQLQuery对象:使用底层数据库所用的sql指令去查询数据。
环境的搭建:
创建java项目,创建一个lib文件夹,将必须的jar和jpa的jar和log4j的jar和数据库连接驱动的jar导入到项目里面。
创建一个user实体对象 t_user,将一个对象保存到数据库:hibernate。
Hibernate:可以根据对象关系映射,给我们自动生成表格,并且把信息保存到表格里面。
对象关系映射表现形式两种:xml 注解。
映射文件的名字和位置可以随意:实体类的名字.hbm.xml:用来说明实体类和数据库表格的映射关系,说明实体属性和表格字段的一个对应关系。位置:和实体类在一个目录。
核心的配置文件:用来设置hibernate执行的一些参数值,比如:连接数据库的一些参数值(driver,url,username,password);sql语句生成策略;我的映射关系是怎样的。
核心配置文件:名称固定,位置固定。hibernate.cfg.xml 在classpath;
基本工作步骤:
1、加载核心配置文件
2、创建sessionFactory对象
3、有sessionFactory对象创建session对象
4、做数据持久化操作:保存数据:session.save(user);
5、提交事务
6、关闭连接
Hibernate操作的时实体对象。然后有底层代码自动生成jdbc原生sql进行工作。
Hibernate核心的API
Configuration:到classpath下面去找配置文件,对象里面有个:.configure();方法去读配置文件里面的配置信息。
SessionFactory:根据配置文件里面引入的映射文件创建表格:每次创建一个sessionFactory对象,都会读取映射文件然后创建表:很耗时:一般一个项目有一个sessionFactory对象。因此我们一般将sessionFactory 放到一个工具类。
Session:相当于我们原先JDBC的connection对象。我们可以利用session里的方法去执行增删改查操作:save() delete() update() get()
特点:session 是单线程的,session不能共用,只能自己使用。
Transaction:事务的特点:一致性,隔离型,原子性,持久性
Hibernate 基础入门的更多相关文章
- Hibernate基础入门
Hibernate是一个开放源代码的对象关系映射框架,它将POJO与数据库表之间建立映射关系.是全自动的ORM框架,可以自动生成SQL语句并自动执行.它对JDBC进行了非常轻量级的封装,使程序员可以随 ...
- Hibernate基础入门2
HQL与Criteria HQL(Hibernate Query Language)-官方推荐面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写 ...
- Hibernate入门1. Hibernate基础知识入门
Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...
- 【hibernate】<第一节>hibernate简单入门
所需工具: ide:eclipse or myeclipse jdk:1.7 jar包:hibernate-distribution-3.6.0.Final 和对应mysql的驱动类(对应jar包如图 ...
- hibernate基础(1)
hibernate基础1.hibernate介绍与动手入门体验 问题:模型不匹配(java对象模型与数据库关系模型不匹配) 解决: 1.使用JDBC手工转换 2.使用ORM(Obje ...
- Hibernate从入门到精通(五)一对一单向关联映射
上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...
- [置顶] Hibernate从入门到精通(五)一对一单向关联映射
上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...
- Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)
Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...
- Hibernate 框架入门
接着上一篇的 Hibernate 框架的了解,我们就继续学习 Hibernate 框架.这次就进入 Hibernate 框架的入门学习. 首先在学习 Hibernate 框架之前,我们要准备好我们需要 ...
随机推荐
- solr字段压缩属性compressed新版本已经移除
solr字段压缩属性compressed新版本已经移除 可能是考虑到压缩意义不大还减少搜索效率,所以去掉了.而且好像没有替代属性.
- linux中 bashrc文件的alias添加快捷命令
alias (为了简化命令操作,节省时间) 进入 /home下的用户,假设为 web 执行命令 ls -alh 找到 .bashrc 隐藏文件,如果没有则新建 通过 vi .bashrc 在里 ...
- Ajax的异步与同步(async)
1.async值为true (异步)当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说 ...
- python3笔记<一>基础语法
随着AI人工智能的兴起,网络安全的普及,不论是网络安全工程师还是AI人工智能工程师,都选择了Python.(所以本菜也来开始上手Python) Python作为当下流行的脚本语言,其能力不言而喻,跨平 ...
- java UCnter 单点登录 对接。
前提 PHP项目要部署成功.论坛能正常访问. 先配置 应用 1.是论坛应用 4.是java服务器,也就是你java登录的项目. 必须通信成功. .主应用IP就是你java项目的入口. 例如:http: ...
- 低级sql语法错误: BadSqlGrammarException
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:760) at org.springf ...
- 02 while循环,密码登录
i=3 username = "xzy" password = " while i>0: name = input("请输入你的用户名:") i ...
- django 数据库查询的几个知识点
django查询db过程中遇到的几个问题: 1. 数据库切换,用using products = models.TProductCredit.objects.using(') 2.查询结构集是Quer ...
- 最近面试 Java 后端的感受!
来源:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂: 第一能干活,第二Java ...
- 深度学习原理与框架-Alexnet(迁移学习代码) 1.sys.argv[1:](控制台输入的参数获取第二个参数开始) 2.tf.split(对数据进行切分操作) 3.tf.concat(对数据进行合并操作) 4.tf.variable_scope(指定w的使用范围) 5.tf.get_variable(构造和获得参数) 6.np.load(加载.npy文件)
1. sys.argv[1:] # 在控制台进行参数的输入时,只使用第二个参数以后的数据 参数说明:控制台的输入:python test.py what, 使用sys.argv[1:],那么将获得w ...