hibernate的get和load方法的区别

get和load方法的区别

  • 返回的数据

    • 由于get方法是无延迟的,所以查不到数据直接返回null

    • load是有延迟,基于延迟的机制,如果找不到数据就报异常

  • 访问数据库时机

    • 由于get方法是无延迟的,查询的时候数据已经在对象里面,所以关闭session,数据依然可以使用
    • load是有延迟,意味着在对象的时候才去查询数据库。导致在使用对象前关闭数据库,报错。
  • load方法可以通过在mapping文件中修改修改为无延迟获得数据

<!-- 设置load直接查询。设置class标签的lazy为false -->
<class name="com.pojo.Customer" table="cst_customer" lazy="false">
public class CustomerDAOTest {


//需求:通过ID查询指定的客户信息,无延迟
@Test
public void get(){
    //1.获得数据库操作对象,session
    Session session = HibernateUtils.getSession();
    //2.通过OID获得记录
    //如果是无延迟,调用get方法的时候就查询数据库了
    Customer customer = session.get(Customer.class, 2L);
    //4.关闭
    session.close();
    //3.输出获得的对象
    System.out.println(customer.getCustName());

}

//需求:通过ID查询指定的客户信息,有延迟
@Test
public void load(){
    //1.获得数据库操作对象,session
    Session session = HibernateUtils.getSession();
    //2.通过OID获得记录,执行load方法的时候,只是曾经一个customer对象,但没有查询数据库
    Customer customer = session.load(Customer.class, 2L);
    //3.输出获得的对象
    //4.关闭
    session.close();
    System.out.println(customer.getCustName());

}


}

连接池的配置

Hibernate内置的连接池功能是很弱的。所以Hibernate支持第三方的连接池。

c3p0是现在开源最流行的连接池之一。

连接池的作用:是为了提高并发访问数据库的效率。

  1. 在hibernate-release-5.0.7.Final\lib\optional\c3p0目录下导入三个包

    • c3p0-0.9.2.1.jar
    • hibernate-c3p0-5.0.7.Final.jar
    • mchange-commons-java-0.2.3.4.jar
  2. 然后在hibernate.cfg.xml的配置文件中添加配置(在四个要素下方,在加载映射文件上方)

<!-- c3p0连接池配置 -->
<!-- 设置连接的提供者 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<!-- c3p0的参数 -->
<!-- 表示最大支持10个连接 -->
<property name="hibernate.c3p0.max_size">10</property>
<!-- 表示启动连接池就支持5个连接 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 设置操作的时间,单位是毫秒,如:配置30秒超时,配置为30000-->
<property name="hibernate.c3p0.timeout">30000</property>
<!-- 最大操作数据Statement ,不要大于最大连接数,一般最大连接数的配置90%-->
<property name="hibernate.c3p0.max_statements">9</property>

最大操作数据Statement ,不要大于最大连接数,一般最大连接数的配置90%

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值