初学hibernate

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); // startIndex
	query.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,推荐)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值