zoukankan      html  css  js  c++  java
  • 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方法,查询id2的,看两次查询是否都发送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语句,但是需要些HQLHQL和普通SQL的区别:SQL操作的数据库中的表和字段。HQL操作的实体类和属性。

     查询所有用户的HQLform 实体类的名称

    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文件夹,将必须的jarjpajarlog4jjar和数据库连接驱动的jar导入到项目里面。

    创建一个user实体对象 t_user,将一个对象保存到数据库:hibernate

    Hibernate:可以根据对象关系映射,给我们自动生成表格,并且把信息保存到表格里面。

    对象关系映射表现形式两种:xml   注解。

    映射文件的名字和位置可以随意:实体类的名字.hbm.xml:用来说明实体类和数据库表格的映射关系,说明实体属性和表格字段的一个对应关系。位置:和实体类在一个目录。

    核心的配置文件:用来设置hibernate执行的一些参数值,比如:连接数据库的一些参数值(driverurlusernamepassword);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:相当于我们原先JDBCconnection对象。我们可以利用session里的方法去执行增删改查操作:save() delete() update() get()

    特点:session 是单线程的,session不能共用,只能自己使用。

    Transaction:事务的特点:一致性,隔离型,原子性,持久性

  • 相关阅读:
    Python从文件中读取数据
    Python中类的继承
    Python中的类(2)
    Python中的类
    自动登陆抽屉(1)
    爬取汽车之家新闻
    Django简介
    web应用,http协议简介,web框架
    CentOS7安装python3.6
    MySQL之索引
  • 原文地址:https://www.cnblogs.com/tsxylhs/p/7366181.html
Copyright © 2011-2022 走看看