Hibernate session1

1.连接池的最小连接数指的是连接池初始化之后,就存在的连接数,这些连接放在内存中,等待被使用。最大连接数限定了连接池中最大同时连接数量,如果超过了这个数量,则进入等待队列中,需要等其他连接退出之后,才能进行连接。

2.自动建表功能有create-drop,create,update和validate四种:

1)create-dtrop是:drop->create->drop;

2) create是:drop->create

3)update是:先比较表的结构,如果表的结构发生变化,则:drop-create,否则不进行ddl操作;

4)validate是:验证java对象与数据库表的一致性,如果不一致,则报错。

5)SessionFactory不仅是一个数据库连接池,而且还保存了相应的数据库配置信息以及ORM、预定义的SQL语句。同时,还维护了hibernate的二级缓存。SessionFactory是重量级的对象,一个数据库只需要一个SessionFactory且最好在应用启动的时候完成他的初始化,SessionFactory是线程安全的。

3.Session是hibernate中使用最为频繁的API,可以再一次数据库操作中,就使用一个Session,使用完之后立即关闭,就像Servlet的一次请求相应一样,用完就释放。Session是线程不安全的,Session对象有一个一级缓存,显式执行flush之前,缓存是不会提交到数据库中的。Session的常用方法有以下几个,这些方法对应了数据库的增删改查:

1)  save(obj) ----保存数据

2)  get(Class,id) ----通过主键查询该条记录

3)  delete(obj)  ---删除数据,注意,为了方便和准确,删除的数据一般都是先查询出来的数据。

4)  update(obj)  ---更新数据,注意,为了方便和准确,更新的数据一般都是先查询出来的数据。

5)  saveOrUpdate(obj)  ---保存或修改数据

6)createQuery(String hql)   ---查询所有的数据

4.HQL就是hibernate中类似于sql的查询语句,是面向对象的。完整的HQL语句形式如下: Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。由于HQL查询在整个Hibernate实体操作体系中的核心地位.

5.Transaction就是数据库的事物,用于满足ACID,提供了两个方法来实现提交或回滚操作:

1) commit()  ---提交事务。在无异常时,直接提交,

2) rollback()  ---回滚事务。一般是用在catch到异常之后,事务回滚。

Hibernate默认不开启自动提交,而是用户通过Transaction接口手动提交事务

如果没有开启事务,那么每个session的操作都是一个独立事务,即每一条sql语句都是一个事务。

6.自然主键指的是有实际意义的主键,不如身份证号码。自然主键可能会在以后变得不唯一,比如以后因为有人去去世有人新生,有一天身份证号码不唯一了,那么数据库就会失效了,所以一般使用代理主键。

7.主键的生成策略:

1)increment:适用于short,int,龙作为主键,不是使用数据库的自动增长机制,而是hibernate来维护的。

* hibernate中提供的一种增长机制:

**先查询 : select max(id)  from person

**再进行插入 :取得的最大值+1最为新纪录的主键

*缺点:不能再集群和并发中使用。所以不常用

2)identity:适用于short,int,long作为主键,但是这个必须使用在有自动增长功能的数据库中(支持auto_increment),采用的是数据库底层的自动增长机制。

3)sequence:适用于short,int,long作为主键,底层采用的是序列的增长方式,需要制定序列。

4)UUID:适用于char,varchar类型作为主键,使用框架随机产生的32位字符串作为主键。适合多线程。

5)native:本地策略,适用于short,int,long作为主键,根据底层数据库的不同,自动选择适用于该种数据库的主键生成策略。

*如果底层使用的是Mysql数据库,则相当于identity;

*如果底层使用的是不支持auto_increment的oracle数据库,则相当于sequence。

6)assigned:自然主键,用户自己管理,而不是由hibernate管理。

注意:native和identity不仅需要数据库支持auto_increment,还要字段已经开启了AUTO_INCREMENT。

8.属性字段尽量使用包装类而不是基础类型,这样,当没有set相应的值得时候,值为Null而不是基本类型的默认值。这样做的好处就是可以对应数据库的null值,从而区分是一个具体的值还是缺失值。比如一个学生的成绩,如果他没有参加考试,则是Null,如果分值为0,则说明他考试了,但是考了0分。

9.持久化的java部分是:java bean+ Classname.hbm.xml

10. useUnicode=true&characterEncoding=UTF-8,&要用实体类&  这里的characterEncoding同时设置了character_set_client和character_set_results环境变量。

hibernate 学习笔记1的更多相关文章

  1. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  5. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...

  6. Hibernate学习笔记(四)

    我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...

  7. Hibernate学习笔记(三)

    我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...

  8. HIbernate学习笔记(一) 了解hibernate并搭建环境建立第一个hello world程序

    Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象 ...

  9. Hibernate学习笔记-Hibernate关系映射

    1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...

  10. Hibernate学习笔记(1)Hibernate构造

    一 准备工作 首先,我们将创建一个简单的基于控制台(console-based)Hibernate应用. 我们所做的第一件事就是创建我们的开发文件夹.并把所有需要用到的Java件放进去.解压缩从Hib ...

随机推荐

  1. linux bash命令行基本操作

      shell shell 我们叫做壳,我们知道操作系统底层是有一个内核kernel的,内核用来实现所有上层服务,所有上层命令,上层应用所需要的一些基本功能,比如说网络连接,网络通信,比如说键盘驱动, ...

  2. 解决SqlServer 2005 sa帐户不能登录问题

    允许 sa 用户远程是很危险的.推荐的做法是在本地新建一个允许远程连接的用户. 1.启用TCP/IP协议. 2.配置监听端口(1433). net -an 检查本地端口是否建立监听,使用 在线IP端口 ...

  3. 在Linux安装ASP.Net Core的运行时(Runtime)

    在部署的时候,如果您不想在您的Linux服务器上安装.Net Core SDK,您可以只安装Runtime,接下来我们看看该如何安装运行时Runtime. 下载运行时文件 下载页面:https://w ...

  4. django drf GenericAPIView和ListAPIView

    drf提供了更快捷的查询方法ListModelMixin+GenericAPIView,和ListAPIView 1.ListModelMixin+GenericAPIView from django ...

  5. 「NOIP 2013」 货车运输

    题目链接 戳我 \(Solution\) 这一道题直接用\(kruskal\)重构树就好了,这里就不详细解释\(kruskal\)重构树了,如果不会直接去网上搜就好了.接下来讲讲详细过程. 首先构建\ ...

  6. hihocoder1580 Matrix

    题目链接:(vjudge)戳我 从今天开始不咕咕地填坑啦 考虑一般的求最大子矩阵和...我们一般都是DP,或者直接上悬线法递推. 下面附一个DP的代码: #include<iostream> ...

  7. centos6.3 配置 smb 服务

    1.安装 samba 以及相关依赖包:yum install samba samba-client samba-swat 2.添加 smb 服务用户:smbpasswd -a user_name(之后 ...

  8. JSR133规范学习

    最近在看多线程相关的东西,通过阅读JSR133的faq来加深自己对多线程的理解,里面大部分的内容比较简单(越到后面越难),但是有的部分比较难以理解还没有完全弄懂,所以这里只记录了一下比较简单的阅读笔记 ...

  9. mfix中更改time dependent VTK filename的最大时间步数的容量

    默认是0000四位,有可能保存文件多了以后不够用,可以在源码中修改,修改以后效果: 源码位置: 把 I4. 改成 I5.

  10. 高阶篇:4.2.3)DFMEA现有设计:预防控制与探测控制

    本章目的:在现有设计中,明确预防控制与探测控制的定义和手段. 1.现有控制的填写部位: 2.现行设计控制(h)定义: 作为设计过程的一部分,现行设计控制是已经实施或承诺的活动,它将确保设计充分考虑设计 ...