初学hibernate

来源:互联网 发布:国研网由哪些数据库 编辑:程序博客网 时间:2024/06/07 09:25

1    Session常用接口

1:save/persist          保存对象   save返回主键值,persist不返回任何值。

2:Load/Get      

       相同点:根据主键来获取主键所对应的对象。

Load/Get的区别:

       1:Load 使用代理机制,而GET没有使用代理对象。

              使用代理对象主要是为了使用延迟加载机制。

       2:加载不到对象时,Load报对象找不到异常,而GET是空指针异常。

       项目大部分采用GET方法加载数据。(使用延迟加载会产生比较多的问题)

3:update/merge             更新对象

4:delete            删除对象

              update/delete方法都是根据主键来操作对象。如果要通过其它属性操作对象,都必须使用HQL语句。

5:clear        清空缓存(清空Session缓存(对象缓存),清空一级缓存,不清空二级缓存)    

2    语法结构:

       单对象查询:        From 类名 where 条件

                       group by 属性

                       order by 排序属性desc|asc

        多对象关联。使用别名可以简化HQL的编写

                 Select 别名 From 类名别名 where 条件

                group by 属性

                order by 排序属性desc|asc

 A:获取所有的对象的数据

       query.list();    //获取所有的数据放到List集合中,数据量大时,比较慢,要进行数据的分页。

       query.iterator();//使用迭代器的方式获取对象的数据,因此每读取一条数据都会产生一条SQL语句。

                     (产生的SQL语句是根据各对象的主键号来产生的)

 B:获取单个属性

session.createQuery(querySQL.toString()).uniqueResult();

       结果:属性的数据类型。

 C:获取多个属性|获取所有属性

       结果:每一元素是对象数组。

 D:执行DDL语句

       不能执行

       create/drop/alter/truncatetable这些DDL语句。

 E:执行DML语句

      update/delete:批量更新和批量删除。

       select

       insertinto into是HQL语句是非法字符。

      Query.executeUpdate();

 G:执行聚合函数count,max,min,sum,avg

       query.uniqueResult();//只能是一行的数据

       longcount = list.get(0);

       longcount2 = Long.parseLong(String.valueOf(query.uniqueResult()));

I:执行分页语句

       Hibernate分页接口

query.setFirstResult(10); // startIndexquery.setMaxResults(10); // pageSize


J:执行预编译语句

       (1):参数?设置

              setParameter(索引,值)/或者setXXX(索引,值)

hql= "Select u fromUserBean u where truename like ? order by userid desc";session= HibernateUtil.getSession();query= session.createQuery(hql);         /**          * 下标从0开始。jdbc的下标从1开始。          */         query.setParameter(0,"%王%");         // query.setParameter(1, 16);

       (2):参数名称设置

              setXXXX("名称",值)

         hql= "Select u fromUserBean u where truename like :truename and userage >= :begin_age anduserage<= :end_age order by userid desc";         session= HibernateUtil.getSession();         query= session.createQuery(hql);          query.setString("truename", "%王%");         query.setString("begin_age", "20");         query.setString("end_age", "50");

       (3):参数属性设置

              setProperties(Bean或者Map)

         hql= "Select u fromUserBean u where truename like :truename and usersex = :usersex order by useriddesc";         session= HibernateUtil.getSession();         query= session.createQuery(hql);          /**          * 使用Map的方式。Map中的key = 参数名称          */         // Map<String,String>paramMap = new HashMap<String, String>();         // paramMap.put("truename","%王%");         // paramMap.put("usersex","0");         // query.setProperties(paramMap);         /**          * 使用Bean的方式。Bean中属性的名称 == 参数名称          */         UserBeanparam_userBean = new UserBean();         param_userBean.setTruename("%王%");         param_userBean.setUsersex("0");          query.setProperties(param_userBean);

SessionFactory.getSession与SessionFactory.getCurrentSession的区别 

1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,也就是不用再session.close()了(自动关闭session)。但是如果使用的是openSession方法创建的session的话,那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭(手动关闭session,推荐)


0 0