Hibernate 1

Hibernate 1

1 映射文件

  • 映射文件指明实体类映射到数据库的哪个表
  • 一般以xxx.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 name="实体类完整路径名" table="数据库表">
        <id name="类中属性" colume="表中主键">
            <generator class="主键生成策略"/>
        </id>
    
        <property name = "类中属性" colume="表中字段"/>
      </class>
    </hibernate-mapping>
    
  • class标签:建立实体类与数据表对应
    • name属性:类中的全路径
    • table属性:对应表名
    • catalog属性:数据库名称,可以省略
  • id标签:建立类中属性与主键字段对应
    • name属性:类中属性名
    • colume属性:数据表主键字段
    • length属性:字段长度
    • type属性:java类型、Hibernate类型(默认),SQL类型
  • property标签:建立类中属性与表字段对应
    • name属性:类中属性名
    • colume属性:表中字段名
    • length属性:字段长度
    • type属性:java类型、Hibernate类型(默认),SQL类型

2 Hibernate核心配置文件

  • 反映持久化类和数据库表的映射关系
  • 一般命名为:xx.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>
		 <!-- 数据库url -->
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate_test</property>
		 <!-- 数据库连接用户名 -->
		<property name="hibernate.connection.username">root</property>
		 <!-- 数据库连接密码 -->
		<property name="hibernate.connection.password">passwd</property>
    
    <!-- hibernate属性 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <mapping resource="src下映射文件的路径" />
  </session-factory>
</hibernate-configuration>
  • hibernate的hbm2ddl(数据定义语言:create drop alter…)
    • hbm2ddl.auto的取值
      • none:不用hiberbate自动生成表
      • create:每次创建一个新的表
      • create-drop:每次创建新的表,执行程序结束后删除这个表(用于测试)
      • update:如果数据库中有表,使用原来的表,没有就创建
      • validate:只使用原来的表,对映射关系进行校验
  • 常用属性名称及用途
名称用途
hibernate.dialect操作数据库方言
hibernate.connection.driver_class连接数据库程序
hibernate.connection.url连接数据库url
hibernate.connection.username数据库用户名
hibernate.connection_password数据库密码
hibernate.show_sql控制台输出SQL语句
hibernate.format_sql格式化输出SQL语句
hibernate.hbm2ddl.autoSessionFactory创建时是否根据映射文件自动验证表结构或自动创建、自动更新数据库表结构,该参数取值有:validate、update、create、create-drop
hibernate.connection.autocommit事务是否自动提交

测试代码

public class HibernateDemo{
  public void demo1(){
    //1. 加载核心配置文件
    Configuration cfg = new Configuration().configure();
    //2. 创建sessionFactory
    SessionFactory sf = cfg.buildSessionFactory();
    //3. 创建session对象
    Session sess = sf.openSeesion();
    //4. 开启事务
    Transaction tx = session.beginTransaction();

    //创建实体类对象
    //set、get调用

    session.save(创建的实体类对象)
    //6. 事务提交
    tx.commit();
    //7. 释放资源
    session.close();
  }
}
相关API
  • Configuration:用于加载映射文件
    • new Configuration().configure():创建实例,默认去src目录下读取hibernate.cfg.xml配置文件
    • new Configuration().configure(“xml文件位置”):创建实例,可以从指定参数位置读取配置文件
    • 创建的实例可以加载映射文件,这是properties所不能做到的:cfg.addSource(“映射文件位置”)
  • SessionFactory:Session工厂对象
    • 负责Hibernate的初始化和建立Session对象,在hibernate中起到缓冲区的作用,hibernate可以将自动生成的SQl语句、映射数据以及某些可以重复利用的数据放到这个缓冲区中,同时还保存了对数据库配置的所有映射关系,维护当前的二级缓存
    • cfg.buildSessionFactory():Configuration对象获取SessionFactory实例
    • 特点:
      • 线程安全,同一个实例能够供多个线程共享
      • 重量级,不能随意创建和销毁
    • 由于以上特点,一个项目只需要一个SessionFactory,除非应用中存在多个数据源,才会为每个数据源建立一个SesionFactory对象
    • HibernateUtils工具类用来提供Session对象
    public HibernateUtils{
      private static Configuration cfg;
      private static SessionFactory sessionFactory;
      
      static{
        cfg = new Configuration().configure();
        sesionFactory = cfg.buildSessionFactory()
      }
      
      public static Session openSession(){
        return sessionFactory.openSession();
      }
    }
    
    • SessionFactory内部维护了一个连接池,如果要使用第三方连接池,需要手动配置
    <property name="connection.ptivider_class">org.hibernate.connection.C3PoConnectionProvider"</property>
    <property name="c3p0.min_size">5</property>
    <property name="c3p0.max_size">20</property>
    <property name="c3p0.timeout">120</property>
    <property name="c3p0.idle_test_period">300</property>
    
  • Session:应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,主要功能是为持久化对象提供创建、读取和删除的能力
    • Session session = sessionFactory.openSession():创建一个新的session实例,并且在使用完成后需要调用close手动关闭
    • Session session = sessionFactory.getCurrentSession():创建的session实例绑定到当前线程,在提交或回滚操作时会自动关闭
    • 轻量级,是一级缓存,主要用于存放当前工单元加载的对象
    • 方法
      • save()、update()、saveOrUpdate()
      • delete()
      • get()、load():根据主键查询
      • createQuery()、createSQLQuery():用于数据库操作对象
      • createCriteria():条件查询
  • Transaction:用于管理事务
    • Transaction transaction = session.beginTransaction();
    • 方法
      • commit():提交相关联的session实例
      • roolback():撤销事务操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值