hibernate语句小结

对几天的学习做一点总结

hibernate支持的查询方法很多大概可以分为五种

1.get查询

            // 加载配置文件

              Configuration config = new Configuration().configure();

              // 创建session工厂

              SessionFactory factory = config.buildSessionFactory();

              // 开启session(此session和jsp session没有半毛钱关系个人理解为hibernate对于数据表的缓存)

              Session session = factory.openSession();

              // 操作实体对象

              UserData data = (UserData) session.get(UserData.class, 37);***括号内是类.class。逗号后面跟的是主键的值,查询主键对应值的所有信息

              System.out.println(data.getUserName());

            //关闭session

              session.close();

2.load查询

与get查询相似,不过get查询没有查询到数据会返回空对象,load则会报异常

当get()方法被调用的时候就会立即发出SQL语句Select  *(简写,实际是全部已建立联系的属性)  from  tablename  where  key = ?并且返回的对象也是实际的对象

当调用load()方法的时候会返回一个目标对象的代理对象,在这个代理对象中只存储了目标对象的ID值,只有当调用除ID值以外的属性值的时候才会发出SQL查询的。

例如UserData data = (UserData) session.load(UserData.class, 37);这个时候是不会调用sql语句的System.out.println(data.getUserName());这里才会。

3.HQL查询

HQL是Hibernate Query Language即Hibernate查询语言

操作是实体对象,所以区分大小写

//占位符参数查询   

String hql = "from UserData where userNum=:userNum";

Query query = session.createQuery(hql);

query.setParameter("userNum", 37);

UserData userarr = (UserData)query.uniqueResult();//session.createQuery(hql).list();

System.out.println(userarr.getUserName());

 

//占位符更新

String hql = "update UserData set userAge = :userage where userNum = :usernum";

Query query = session.createQuery(hql);

query.setParameter("userage", 20);

query.setParameter("usernum", 48);

int num = query.executeUpdate();

 

//hql联表查询

String hql = "from UserShareData share,ConsumptionData cons where share.consnum=cons.consNum";

Query query = session.createQuery(hql);

List<Object[]> obj = query.list();

for(Object[] o : obj) {

//此处注意,返回的是object对象,第一个是from后面第一个表数据,第二个//是第二个表数据,以此类推

UserShareData share = (UserShareData) o[0];

ConsumptionData cons = (ConsumptionData) o[1];

System.out.println(share.getLeavemessage()+cons.getConsDate());

}

4.原生SQL查询

就是sql语句,只不过对应了具体对象(此处query应用createnativequery不应继续使用createquery)

//原生sql语句查询全部

String sql = "select * from usersdata";

Query query = session.createNativeQuery(sql,UserData.class);//此处对应bean

ArrayList<UserData> arr = (ArrayList<UserData>) query.list();

for(UserData data : arr) {

       System.out.println(data.getUserName());

}

5.QBC完全面向对象查询

//完全面向对象查询QBC

Criteria c = session.createCriteria(UserData.class);

Criterion limit = Restrictions.like("userName", "%g%");//模糊查询

c.add(limit);

c.addOrder(Order.desc("userNum"));//排序

c.setFirstResult(0);//分页起始页

c.setMaxResults(2);//分页单页最大容量

ArrayList<UserData> userarr = (ArrayList<UserData>) c.list();

for(UserData user : userarr) {

       System.out.println(user.getUserNum());

       System.out.println(user.getUserName());

       System.out.println(user.getUserAccount());

       System.out.println(user.getUserPsw());

       System.out.println(user.getUserTel());

       System.out.println();

}

部分结论参考网络。新手笔记,大佬手下留情,请多指点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值