hibernate 快速入门

来源:互联网 发布:温暖的句子 知乎 编辑:程序博客网 时间:2024/05/22 15:26

首先导入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  ---Oraclesequence  标识符生成器利用底层数据库提供的序列来完成标识符原理:依赖数据库序列支持,和hibernate程序无关Oracle 支持序列,mysql不支持序列序列原理:create sequence customer_seqinsert into customer(id) values(customer_seq.nextval);4.nativenative标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence或hilo标识符生成器。mysql   自动选择identityoracle  自动选择sequence5.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();    }
原创粉丝点击