对几天的学习做一点总结
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();
}
部分结论参考网络。新手笔记,大佬手下留情,请多指点。