hibernate 快速入门

本文介绍Hibernate的基本配置步骤,包括所需Jar包的导入、hibernate.cfg.xml文件的配置细节及Customer.hbm.xml映射文件的设置。同时展示了如何通过JUnit进行简单的测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先导入hibernate 需要到的jar包
这里写图片描述
然后在src下面配置hibernate.cfg.xml,这里面是连接数据库需要的信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate1</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <!--数据库方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--             以上是必输属性,下面是可选属性    -->     
        <!--DDL策略
            create:表示启动的时候先drop,再create (测试人员 准备标准测试数据)
        create-drop: 也表示创建,只不过再系统关闭前执行一下drop  (测试程序是否正确)
        update: 这个操作启动的时候会去检查表结构是否一致,如果不一致就会更新表结构 (可以建表,更新表结构【只能加】,比如将映射文件中的name改为cname,这时候会在表中给我们增加一列cname,而不是将name改为cname)
        validate: 启动时验证现有表与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新 

        在产品开发中 update 和 validate 使用较多,create、create-drop在测试环境下用的较多
-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <!-- <property name="hibernate.format_sql">true</property> -->
        <!-- 事务是否自动提交
            * 用于解决 没有开启事务的操作时,事务如何自动处理 
            注意如果自己手动开启了事务,没有commit,这个也不会提交到数据库
            * 默认事务 自动回滚
         -->
        <property name="hibernate.connection.autocommit">true</property> 
        <!-- 数据库连接池 -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <!--在连接池中可用的数据库连接的最少数目 -->
        <property name="c3p0.min_size">5</property>
        <!--在连接池中所有数据库连接的最大数目  -->
        <property name="c3p0.max_size">20</property>
        <!--设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
        <property name="c3p0.timeout">120</property>
         <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
        <property name="c3p0.idle_test_period">3000</property>

        <!-- 配置映射文件 -->
        <mapping resource="com/zz/entity/Customer.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

然后是Customer.hbm.xml文件:配置表的映射信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
   <!--类和表之间的映射  -->
    <class catalog="hibernate1" table="customer" name="com.zz.entity.Customer">

    <!-- 主键 -->
    <id name="id" column="id" type="int">
    <!--主键生成策略
    常见的主键生成策略:
1.increament    hibernate以递增的方式为代理主键赋值
原理:  select max(id)  ,insert  max(id)+1
自动建表:使用increment创建的数据库表没有自动增长
优点:通过hibernate内部完成,可以跨平台
缺点:高并发时访问,可能会造成主键冲突问题
使用debug模拟并发
2.identity (无线程问题)----mysql
 以底层数据库负责生成表示符,它要求底层数据库把主键定义为自动增长字段类型
原理:依赖数据库内部实现,与hibernate无关
自动建表:使用increment创建的数据库表没有自动增长
优点:无需程序处理,数据库自己完成主键增长
缺点:mysql支持主键自增长,oracle不支持

3.sequence  ---Oracle
sequence  标识符生成器利用底层数据库提供的序列来完成标识符
原理:依赖数据库序列支持,和hibernate程序无关
Oracle 支持序列,mysql不支持序列
序列原理:create sequence customer_seq
insert into customer(id) values(customer_seq.nextval);
4.native
native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence或hilo标识符生成器。
mysql   自动选择identity
oracle  自动选择sequence

5.uuid  uuid的主键生成 采用String类型主键
随机生成32位字符串

6.assigned
必须用户在程序中指定,无法自动生成

-->
        <generator class="identity"></generator>
    </id>

    <!-- 普通属性 -->
    <property name="name" column="name" type="java.lang.String"/>
    <property name="age" column="age" type="int"/>
    <property name="city">
        <column name="city" sql-type="varchar(20)"></column>
    </property>
    </class>
</hibernate-mapping>

注意这两个配置文件里面引入的dtd文件是不一样的,具体的可以从下载的jar包hibernate3.jar下面有两个相关文件中复制这里写图片描述

junit测试一下

    @Test
    public void testSave(){

        // 实例化配置对象,加载配置文件 hibernate.cfg.xml
        Configuration configuration = new Configuration().configure();
        // 创建会话连接工厂
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 创建会话 
        Session session = sessionFactory.openSession();
        // 开启事务
        Transaction transaction = session.beginTransaction();
        //这里可以编写hibernate操作代码逻辑 (********************************************************)
        Customer c1 = new Customer();
        c1.setAge(20);
        c1.setCity("浙江杭州");
        c1.setName("张三丰");
        session.save(c1);

        // 提交事务,释放资源        
        transaction.commit();
        session.close();
        sessionFactory.close();

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值