框架学习之hibernate-01基础配置和使用

持久层框架hibernate

本文描述hibernate的主要配置和基本的使用

  • 基础配置
    首先在src目录下创建一个hibernate.cfg.xml文件,在这个文件中进行以下基础配置:
<hibernate-configuration>

    <!-- 会话工厂:代表物理数据库在内存中的一个镜像 -->
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/userrolepower</property>
        <property name="connection.username">root</property>
        <property name="connection.password">512512zbb</property>
        <!-- 设定针对数据库的方言 这里是配置mysql的方言标准 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 生成的sql语句可见 和格式化 -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <!-- 配置需要作关系映射的实体类 -->
        <mapping class="bwf.bin.vivian.entity.实体类名" />
        ......
</hibernate-configuration>
  • 配置连接池
    这里主要是c3p0的数据库连接池的配置
    也可以使用alibaba的druid数据库连接池
<!-- 配置连接池 -->      
        <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>      
            <property name="c3p0.acquire_increment">5</property>      
            <property name="c3p0.idle_test_period">300</property>      
            <property name="c3p0.max_size">20</property>      
           <property name="c3p0.max_statements">100</property>      
            <property name="c3p0.min_size">5</property>      
            <property name="c3p0.timeout">90</property>      
            <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property>      
            <property name="c3p0.idleConnectionTestPeriod ">18000</property>                 
           <property name="c3p0.maxIdleTime">25000</property>               
           <property name="c3p0.testConnectionOnCheckout">true</property>
  • 实体类注解配置
    1. 在实体类的头部注解
      @Entity
      @Table(name=”表名”)
    2. 在属性上注解主键id标识
      @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
      @Column(name=”主键名”)
    3. 在其他的属性上面注解
      @Column(name=”表字段”)
    4. 注意:如果数据库表字段名和实体类的字段名相同,那么可以不用注解说明,hibernate会默认处理
  • 基于hibernate实例的三种状态
    1. 自由状态(transient)(瞬态): 不曾进行持久化,未与任何Session相关联
    2. 持久化状态(persistent): 仅与一个Session相关联
    3. 游离状态(detached)(脱管): 已经进行过持久化,但当前未与任何Session相关联
  • sessionFactory的使用
    在配置文件中配置好了会化工厂后,在Java程序中如下获得:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure("/Hibernate.cfg.xml").build(); 
        sessionFactory =  new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();

在获得sessionFactory之后,可以调用openSession()方法获得一个session管理器,拿到session之后就可以基于对象来操作数据库表的数据更新了
- Session管理器API操作
Session中的方法:
1. 根据ID查询:
get、load(不常用)
区别:
get方法不延迟加载,直接发起sql语句查询;如果试图发起一个id不存在的查询,会报空指针异常
load方法属于延迟加载,不直接发起sql语句查询,得到一个代理对象模型,如果要使用这个对象的时候才会发起sql语句查询,否则只会有一个ID属性;如果发起一个id不存在的查询,会报对象找不到的异常
2. 插入对象:save、persist(不常用)
区别:
save方法持久实例,有返回标识符,会立即执行Sql insert(针对的是新的对象实例)
persist方法持久化实例,没有返回标识符,标识符的填入可能被推迟到flush的时候
3. update、merge(不常用)
区别:
update方法直接执行update语句(针对脱管状态的实例)
merge方法会先判断当前会话中是否有这个对象,没有会去数据库查询;拿到结果实例之后会把obj的值copy到对象里去,此时原来的obj会变成脱管状态
4. saveOrUpdate方法综合了save和update两个功能的实现
5. delete方法会删除一个持久化的实例,使之变成游离态的实例
6. 其他的方法
flush将session会话中持久态的对象立刻更新到数据库中
evict(obj)清除session会话缓存集合中指定的实例对象出集合
clear()清除session会话缓存集合中所有的持久化实例

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值