hibernate中session接口操作数据库

回顾hibernate 配置的步骤:

第一步、导入hibernate包,lib下面的required


第二步、src下面创建hibernate.cfg.xml
    project包里找到etc,打开hibernate.cfg.xml,导入doctype,复制dtd。

第三步、配置hibernate
    <hibernate-configuration>
        <session-factory>
    //配置数据库     **注意不要有空格
    hibernate-properties找到MySQL,键值对的形式。
        1.配置方言,告诉hibernate使用哪种类的数据库
        2.配置MySQL驱动
        3.配置MySQL的url地址
        4.配置用户名
        5.配置密码
        6.配置orm的xml <mapping resource='' />
        
第四步、创建JavaBean对象

 

 

第五步、关系映射文件

 

 

 

 

 

hibernate中如何获得SessionFactory?

当所有映射定义被Configuration解析后, 应用程序必须获得一个用于构造Session实例的工厂. 这个工厂将被应用程序的所有线程共享: //读取映射文件  Configuration  cfg = new Configuration()
       //创建sessionFactory  SessionFactory  sf =cfg.buildSessionFactory();

 

 

       //获得链接对象 session

 

       Session session = sf.openSession();
       
       //开启一个事务
      Transaction tx = session.beginTransaction();

       //创建一个对象
            Student s = new Student();

          //设置对象属性
        s.setName("小明");

         //存对象到数据库  
        session.save(s);

  // 获取数据
 Student s = (Student) session.get(Student.class,1);
  s.setName("小红");
  session.delete(s);
  //提交事务
  tx.commit();


Hibernate允许你的应用程序创建多个SessionFactory实例. 这对 使用多个数据库的应用来说很有用.

hibernate中session接口提供的操作数据库的方法:

  sava();      //存数据

 update();     //更新

 delete();     //删除数据

 load();       //从数据库中加载对象

 find();      //从数据库中查询对象

 

 

//举个例子:

  //创建一个session
Session session = sessionFactory.openSession();
   //开启一个事务
  Transaction tx = session.beginTransaction();
  //编写查询语句
String hqlUpdate = "update Customer c set c.name = :newName where c.name =:oldName";
// or String hqlUpdate = "update Customer set name = :newName where name =:oldName";
//执行数据库操作  
int updatedEntities = s.createQuery( hqlUpdate )
 .setString( "newName", newName )
.setString( "oldName", oldName )
 .executeUpdate();
//提交事务
  tx.commit();
//关闭session接口
session.close();

 

 

 

saveorupdate()  和  save() 、update() 的区别

 1.saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作。主键在saveorupdate()方法中是起着关键作用的,只有这个主键的值不为空的时候才进行insert还是update的判断,否则直接insert
若主键不为空,就可以进行saveorupdate()操作了。

 2.save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。

 3.update()就是更新数据库中的记录

适用范围:

        save方法更适用于确定了是要插入,而且需要得到插入数据的主键
        而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键
        另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更
        新一个游离态,这都是有问题的,此时你就要用到saveOrUpdate
        总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate

 

 

get() 和 load()的区别
1.get()采用立即加载方式,而load()采用延迟加载;
           get()方法执行的时候,会立即向数据库发出查询语句,
            而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句

2.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值