Hibernate的day01(环境搭建)

定义

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。
Hibernate可以应用在任何使用JDBC的场合。
Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

优点:

简化繁琐的JDBC代码
对面向对象特性支持良好
可移植性好
开源免费,可以在需要时改写源代码,进行功能定制

缺点:

不适合以数据为中心的大量使用存储过程的应用
不适合大规模的批量数据处理
(例如:添加语句,需要判断具体数据库,很多if语句,性能低下)

与Mybatis的比较

全自动orm,提供了对象状态管理,级联操作
完全面向对象,与数据库无关、数据库移植性好
但是由于直接操作sql,mybatis的自由度高
与Mybatis的比较


Hibernate环境搭建

1、部署jar文件
2、添加hibernate.cfg.xml配置文件
3,创建数据库表对应的实体类
4,创建表的映射 ***.hbm.xml

2、添加hibernate.cfg.xml配置文件

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="foo"><!--name指的是JDNI名字-->
        <!--配置数据库的驱动程序-->
        <property name="connection.driver_class">com.mysql.jdbc.Driver </property>
        <!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql服务器名称,此处为本机,    hibernate是数据库名-->
        <property name="connection.url">jdbc:mysql://localhost/city</property>
        <!--连接数据库是用户名-->
        <property name="connection.username">root </property>
        <!--连接数据库是密码-->
        <property name="connection.password">001128 </property>
        <!--是否在后台显示Hibernate用到的SQL语句-->
        <property name="show_sql">true </property>
        <!--在控制台输出格式化后的sql语句-->
        <property name="format_sql">true</property>
        <property name="current_session_context_class">thread</property>
        <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 映射文件 -->
        <mapping resource="test.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

//包括数据库连接相关
connection.driver_class:表示数据库驱动
connection.url:表示数据库url
connection.username:表示数据库用户名
connection.password:表示数据库密码
//辅助参数
dialect:指定对应数据库的方言,hibernate为了更好适配各种关系数据库
show_sql:是否在后台显示Hibernate用到的SQL语句
format_sql:是否在控制台输出格式化后的sql语句
current_session_context_class:指定得到的sessin由谁来跟踪管理
//映射文件
mapping resource=“test.hbm.xml”/>

3、创建数据库表对应的实体类
/持久化类(实体类):
public
提供无参构造
实现序列化Serializable接口
提供get/set方法

4、创建表的映射 ***.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="pojo">
    <!--
        class元素: 配置实体与表的对应关系的
            name: 完整类名
            table:数据库表名
     -->
    <class name="pojo.Cityarea" table="Cityarea" >
    <!-- id元素:配置主键映射的属性
            name: 填写主键对应属性名
            column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
            type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                    每个类型有三种填法: java类型|hibernate类型|数据库类型
            not-null(可选):配置该属性()是否不能为空. 默认值:false
            length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
     -->
    <id name="id"  >
        <!-- generator:主键生成策略,就是每条记录录入时,主键的生成规则
                    identify:主键自增,由数据库来维护主键值,录入时不需要指定主键
                    increment(了解):主键自增,由hibernate来维护,每次插入钱会先查询表中id最大值+1作为新主键值
                    hilo(了解):高低位算法,主键自增,由hibernate来维护开发式不使用
                    native:自动三选一策略
                    sequence:Oracle中的主键生成策略
        -->
        <generator class="native"></generator>
    </id>
        <!-- property元素:除id之外的普通属性映射
              name: 填写属性名
              column(可选): 填写列名(数据库表中)
              type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                      每个类型有三种填法: java类型|hibernate类型|数据库类型
              not-null(可选):配置该属性()是否不能为空. 默认值:false
              length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
       -->
        <property name="name" column="name"/>
    </class>
</hibernate-mapping>

常用的Hibernate的主键生成策略
assigned
:自己输入主键,新增数据记得加入

increment
increment策略是指,不使用数据库本地的自增长策略,而是由程序(Hibernate框架)产生一个自增长的ID值,赋予数据库.
每次插入前都会去查询表中id最大的值,然后+1作为新主键
(绝对不推荐,如果多人同时操作数据,可能引发数据不安全)

idenity
identity策略,指定使用数据库里面的ID自增长策略. 只能用于支持ID自增长功能的数据库,如:MySQL,SQLServer… 不支持没有ID自增长策略的数据库,如Oracle,DB2…

native
使用数据库本地的策略,就是数据库里面使用怎么样的策略就用什么策略,HIbernate不做任何的判断

sequence
使用序列的实现ID生成策略,主要用于有序列的数据库.如:Oracle,DB2,如果不支持序列的数据库(如:MYSQL),该策略会使用一个表模拟序列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值