Hibernate第一天

1.MVC是怎样的一种结构来开发的

    1. M:modle entity

    2. V:view jsp/html

    3. C:controll servlet

    4. service

    5. dao(JDBC/dbutils/hibernate)

    6. Spring MVC、Struts-----------Spring为service提供事物-------------hibernate

这里写图片描述

2.hibernate是什么

  1. 简单来说就是给持久化层的一种解决方案

3.SSH

  1. S(Spring MVC、Struts)这个就是我们controll的解决方案

  2. S(Spring)是用来整合Spring MVC、Struts/Hibernate,还可以给我们的service提供事物的环境

  3. H(Hibernate)他是持久层的一个解决方案

4.Hibernate具体是什么

  1. Hibernate是一个非侵入式的ORMapping的框架.

    侵入式框架:就是我们在使用这个框架的时候 需要继承或者实现特定的类或者接口的这种框架 就称为 侵入式的框架

    非侵入式的框架:就是我们在使用这个框架的时候是不需要继承或者实现特定的类或者接口这样的框架就称为 非侵入式的框架

5.ORMapping

     O---------------->Object(对象)





     R---------------->Relation(关系型的数据库)





     Mapping--------->映射

6.Hibernate是一个对象关系型映射的框架

  1. Hibernate是一个能够将JAVA对象 通过 映射关系 映射到 关系型数据库的 这样一个框架

  2. Hibernare的深入理解:Hibernate是能够通过操作JAVA对象 就可以达到操作数据库的 这样一个框架

     Hibernate----->JAVA对象------>数据库
    
    
    
     JAVA对象 <------Hibernate<----数据库
    

    Hibernate—>操作数据库的框架(既适合JAVA工程也适合WEB的工程)

7.如何建立一个hibernate程序

1>:导包



 建立用户库---->加入我们的jar文件---->选中它---->OK



2>:在src目录下编写Hibernate全局的配置    



     1>:全局配置的文件名字     hibernate.cfg.xml



3>:编写我们的实体类(entity)  User



4>:编写我们的映射关系



   映射关系要包括我们的   对象和表之间字段的对应关系  以及类型   约束



   1>:在我们的user表的同级目录下件礼物一个  User.hbm.xml的配置文件

8. 详解Hibernate的基本配置

  1. hibernate.cfg.xml 文件

    <!--这个是用来配置我们Hibernate是否需要自动建表  还是更新的
    
       create:这个表示的意思是:每次在运行的时候需要从新创建表(不管这个表是否已经存在)
    
       update:这个表示如果这个表已经存在了,那么就更新数据就OK了  如果这个表不存在的话那么就创建表 然后更新数据
    
    -->
    
    <property name="hbm2ddl.auto">update</property>
    
    
    
    <!--下面的这一个表示的意思是:运行的时候是需要在我们的控制台打印出sql语句-->
    
    <property name="show_sql">true</property>
    
    <!--格式化我们打印在控制台的sql语句-->
    
    <property name="format_sql">true</property>
    
    
    
    <!--表示的是设置我们的数据库的方言:这个方言简单跟你说就是可以根据底层不同的数据库 来选择生成不同的sql类型的语句
    
                          也就是说你要告诉我们的hibernate用怎样的方式来生成我们的sql语句
    
    -->
    
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
    <!--这个表示的是设置的 是请求的数据库
    
        jdbc:mysql://localhost:3306/Day1705_hibernate
    
                            如果我们的数据库是在本地的话  那么 可以省略我们的localhost:3306 
    
    -->
    
    <property name="connection.url">jdbc:mysql:///Day1705_hibernate</property>
    
    <!--这个表示的是数据库的驱动-->
    
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    
    <!--跟的是用户名-->
    
    <property name="connection.username">root</property>
    
    <!--跟的是密码-->
    
    <property name="connection.password">root</property>
    
    
    
    <!-- 下面配置的是我们的映射的文件-->
    
    <mapping resource="com/qf/properties/User.hbm.xml"/>
    
    
    
        </session-factory>
    
    </hibernate-configuration>
    
  2. hbm.xml文件

        <?xml version="1.0"?>
    
    <!--
    
       package:配置这个package的作用是 为了我们后面在书写这个HQL语句的时候 直接就可以写对象
    
           如果是没有配置这个package的话 那么是需要编写全路径的
    
    -->
    
    <!DOCTYPE hibernate-mapping PUBLIC
    
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
     <!--package是否可以省略?
    
                可以
    
                省略之后类的名字 编写全路径就OK了       
    
     -->       
    
     <hibernate-mapping> 
    
        <!--一个class就相当于对应了一张表
    
             name:表示的是我们对应数据库表的那个对象的名字  这个名字如果上面没有配置package的话那么是需要全路径的
    
             table:这个标签是我们的JAVA对象  在数据库表中对应的这个表名
    
             abstract:这个用在继承映射的时候 这个类是否在数据库对应表的问题
    
             lazy:是否这个对象支持懒惰形加载 (我们只有在使用这个数据的时候那么 才加载这个数据  如果我们不需要使用这个数据的话 那么就不会加载)
    
             abstract="true" lazy="true"
    
    
    
             table:是否可以省略?
    
                            可以的
    
                            省略之后默认的表明就是实体的名字
    
        -->
    
    
    
        <class name="com.qf.properties.User" table="t_user">
    
           <!--配置的是表里面的主键
    
              id:是用来配置这个主键的(每一个表都有主键) 值直接写我们实体里面的主键属性 
    
              column:这个是用来定义这个列的列名的
    
              type:表示的是当前的这个类中的属性的数据格式是什么  这里可以写java里面的类型的全路径 也可以写hibernate中支持的数据类型
    
              column:可以省略 默认的字段就是属性的名字  
    
              type:也可以省略:默认的类型和实体的数据类型是一样的
    
            -->
    
            <id name="userId" column="user_id">
    
               <!-- 
    
                   generator:这个指的是主键的增长策略是是什么?
    
                   sequence:一般用于oracle数据库
    
                   native:这个表示 的是根据底层数据库决定 自增
    
                   assigned:这个表示的是自己给个id主键 (也要讲)
    
                   foreign:这个用于将一个表的主键作为另外一个表的主键的时候使用(要讲)
    
                   increment:也是递增  在集群下不使用(一般不用)
    
                   identity:也是递增用在mysql  sqlserver  db2里面
    
    
    
                   class:是不可以省略的
    
                -->
    
                <generator class="uuid">
    
                </generator>
    
            </id>
    
            <!--配置的是普通的列
    
                property:设置的是普通的列  
    
                column:列名(当前对象的属性在数据库中对应的列名)  可以省略
    
                lazy:是否支持懒惰性的加载  :也默认值
    
                not-null:是否可以为null
    
                unique:是否这个列的值是唯一的
    
                type:可以省略 默认数据类型和实体中的属性的类型一直
    
                length:设置的是长度(有点必须的)
    
    
    
    
    
            -->
    
            <property name="userName" not-null="true" unique="true" type="java.lang.String" column="user_name" length="10" lazy="false"></property>
    
            <property name="userPassword"></property>
    
        </class>
    
        </hibernate-mapping>
    

9.test函数里面的内容

            //加载配置文件

            //如果我们的配置文件放到了 src目录下 而且名字是 hibernate.cfg.xml 的话那么 这个路径是可以省略的

            Configuration cfg=new Configuration().configure("config/hibernate.cfg.xml");



            //通过的是配置文件获取的是session的factory

            SessionFactory factory=cfg.buildSessionFactory();



            //第三步:通过工厂创建我们的session对象  session(会话)  这个对象很重要在我们的 hibernate中所有和数据库打交道的就是他

            Session session=factory.openSession();



                           //在HIbernate中所有的操作都需要事物的环境  所以需要打开这个事务

            session.beginTransaction();



            //业务逻辑(操作数据库)

            User user=new User();

            user.setUserName("小波波11133");

            user.setUserPassword("11011133");



            //持久化对象

            //session.save(user);

            session.persist(user);





            //提交事物

            session.getTransaction().commit();

            session.close();

            factory.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值