Hibernate常用api以及增删改查

一   、API的定义
所谓的API全称就是(Application Programming Interface,应用程序编程接口)。就是类库对外提供的接口、类、枚举、注解等元素。
如:JDK API帮助文档,可以理解为,JDK对外提供的(接口,类,枚举,注解)元素的帮助文档。
 
二 、Hibernate的常用API
 
SessionFactory:会  话工厂
Session:会话
Transaction:事务处理类
Configuration:配置类
 
 
  1. Configuration类:作用:用于获得框架的信息,构建将会话工厂。
 
1.1 获取默认的配置文件
//1.创建一个Configuration的对象
       Configuration config=new Configuration();
       //2.读取默认路径下的hibernate.cfg.xml配置文件
       config.configure();

1.2 获取指定的配置文件

//1.创建一个Configuration的对象
       Configuration config=new Configuration();
       //2.读取默认路径下的hibernate.cfg.xml配置文件
       config.configure("config.xml");
2  .  SessionFactory接口
 
作用:类似DataSource。用于管理数据库的连接。
openSession():打开session
getCurrentSession():获得当前线程的session(线程绑定)
close():关闭会话工厂。
//2.获得Session
    public static Session getSession(){
       return sessionFactory.openSession();
    }
3   . session接口 :类似JDBC的Statement。用于操作数据库的数据。Session操作是必须先映射,后操作。
方法名
作用
save()
保存数据库到数据库
saveOrUpdate()
如果数据库没有记录就保存,如果有记录就更新,重要的判断是OID是否相同,OID(Object ID)就是在配置文件配置为<id>属性。
delete()
用于通过OID删除数据库记录
update()
用于通过OID更新数据的记录
load()
用于通过OID,获得一条记录,有延迟
get()
用于通过OID,获得一条记录,无延迟
beginTransaction()
打开并且启动事务(增删改操作必须,)
getTransation()
打开了事务,没有开启。
clear()
清除session所有对象的持久态。
close()
关闭session对象
evit()
清除指定的对象的持久态
createQuery()
获得使用HQL查询的Query对象
createSQLQuery()
获得使用SQL查询的Query对象
createCriteria()
获得标准查询的Criteria对象
 
 
4   .  Transaction
 
就是用于处理事务。
begin(): 启动
commit():提交
rollback():回滚
 
 
 
5   .  Hibernate的CRUD
 
在配置好框架的前提下
 
5.1  增加的代码
//增加操作
     @Test
     public void save() {
           //获取session
           Session session = HibernateUtils.getSession();
           //打开事务
           Transaction transaction = session.beginTransaction();
           Student student = new Student();
           student.setStu_name("张三");
           
           //进行增加操作
           session.save(student);
           session.close();
     }

5.2  删除的代码

//删除
     @Test
     public void delete() {
           
           Session session = HibernateUtils.getSession();   
           Transaction transaction = session.beginTransaction();
           Student student = new Student();
           student.setStu_id(1L);
           session.delete(student);
           
           transaction.commit();
           session.close();
     }
5.3  更新的代码
 
除了增,.        删,查改都需要通过ID进行操作,就是需要指定了需要更新的那一个项的id。还有内容
//更新
     @Test
     public void update() {
           Session session = HibernateUtils.getSession();
          
           Transaction transaction = session.beginTransaction();
           
           Student student = new Student();
           student.setStu_id(4L);
           student.setStu_name("赵六");
           session.update(student);
           transaction.commit();
           session.close();
           
     }
5.4  查找的代码
 
GET方法进行查找: //查询数据都没有操作数据库,不用开启事务
@Test
     public void get() {
           
           //查询数据都没有操作数据库,不用开启事务
           Session session = HibernateUtils.getSession();
           Student student = session.get(Student.class, 4L);
           System.out.println(student.getStu_name());
           session.close();
           System.out.println(student.getStu_name());
           
     }

Load方法进行查找 

@Test
     public void load() {
           
           //查询数据都没有操作数据库,不用开启事务
           Session session = HibernateUtils.getSession();
           Student student = session.load(Student.class, 4L);
           System.out.println(student.getStu_name());
           session.close();
           
     }
两者的区别
 
相同之处:get方法和load方法都是通过OID获得指定的记录的数据的。
 
不同之处
 
GET
1.由于get方法是无延迟的,所以查不到数据直接返回null
2.由于get方法是无延迟的,查询的时候数据已经在对象里面,所以关闭session,数据依然可以使用
session.close();
System.out.println(student.getStu_name());
Load
1. load是有延迟,基于延迟的机制,如果找不到数据就报异常
2. load是有延迟,意味着在对象的时候才去查询数据库。导致在使用对象前关闭数据库,报错。
3. load方法可以通过修改<class lazy="false">修改为无延迟获得数据
正确
System.out.println(student.getStu_name());
session.close();

错误
session.close();
System.out.println(student.getStu_name());
解决方法:在XXX.hbm.xml配置的时候加一条 lazy="false"
<!-- 设置load直接查询。设置class标签的lazy为false -->
 <class name="com.sxt.entity.Student" table="tb_student" lazy="false">
posted @ 2019-08-12 09:30  ___mouM  阅读(503)  评论(0编辑  收藏  举报