1.hql语句查询
1.带条件的查询
Query query = session.createQuery("from 实体类 where 字段名 = ? or name=:uname")
注意: ==name=:uname (赋值) =:》类似于冒号 ==
query.setPrameter("属性名","值");
一条龙服务:session.createQuery("from 实体类 where 字段名 = ? or name=:uname").setParmeter().setParameter("值1","值2").list();
2.查询指定字段(使用投影查询)
list<Object> list = session.createQuery("select 字段名1,字段名2 form 表名").list;
for (Object obj : list){
Object[] emp = (Object)[] obj;
System.out.println(emp[0]+"___"+emp[1]);
}
投影查询为什么这样可以查出来???
Object ---> 投影(不会把结果封装成对象,而是封装成数组)
obj ---> 即为一条数据,实质为了一个数组,包含多个字段
4.连接查询(使用投影查询)
list<object> list = session.createQuery(from 表名 别名 inner join 别名.属性名).list;
for(Object obj : list){
Object[] o = Object[] obj;
类名1 emp = (emp) o[0];
类名2 dept = (dept) o[1];
System.out.println(emp.getId() + dept.getID());
}
5.更新数据
Query query = session.createQuery("update 类名 set name=?,age=? where empid=?");
query.setParameter(0,"小白");
query.setParameter(1,"20");
query.setParameter(2,"1");
query.executeUpdate();
ts.commit(); --->提交事务(在修改和删除的时候必须需要要提交事务)
6.分页查询
List<类名> list = session.createQuery(form 类名).setFirstResult(3-1)*2).setMaxResults(1).list;
for(类名 emp : list){
System.out.println(emp.getID()+"___"+emp.getNmae());
}
setFirstResult(3-1)*2) ---> 当前页减1 (当前页-1)* 条数
setMaxResults(1) ---> 每页条数 (每页显示的条数)
7.对象查询
Criteria c = session.createQuery(类名.class);
c.add(Restrictions.eq("empId",2));
c.add(Restrictions.like("name","小3")) --- >模糊查询
c.add(Order.desc("age")); --- >排序
List<类名> list = c.list();
for(类名 emp : list){
System.out.println(emp.getID()+"___"+emp.getNmae());
}
查询条件一般是由web层页面传递过来 由web层传给service 在传给dao层 组装 拼凑 dao
8.离线查询
DetachedCriteria dc = DetachedCriteria.forClass(类名.class);
Criteria c = dc.add(RestrictableCriteria(session));
System.out.println(c.uniqueResult); --- >uniqueResul(唯一的结果集)
session.close() ---> 关闭
我们在sevice 拼凑查询条件 完了之后 我们的 dao 层 findAll(DetachedCriteria dc)
9.sql语句查询
写这个的都是瓜皮
总结(hql语句 与 sql语句 的区别)
1.hql 与 sql 语句语法类似,但是hql语句操作的类和属性 而sql 语句 操作的是 表和 字段
注意:hql语句中除了类和属性之外是不区分大小写的
2.常用的查询操作
1.查询全部数据
form 类名
2.带数据的查询
form 类名 where 属性名 (= > < != like 等等) 值
3.查询指定字段
select 属性列表 form 类名 where 条件表达式
注意: 查询返回的是list 集合
投影 object 数组
4.聚合函数
sum count avg 等等
5.连接查询
form 外键表对象 别名 inner/left/right join 别名.主键表对象属性
6.修改数据
说明:执行增删改查 调用 executeUpdate () 方法
7.分页查询
setfirstresult (当前页-1) * 条数 )
setMaxresult (条数)
8.本地查询
使用sql语句
9.对象查询
完全脱离了表和字段 直接 操作对象
10.离线查询
整合 c3p0 连接池
1.第一步
写配置文件
把c3p0的配置信息整合到hibernate的xml文件中
2.第二步
找到etc 打开 hibernate.properties 找 c3p0 的相关配置
<property name=""> ora.hibernate.connection.C3P0ConnectionProvider</property>
如何查看???
log4j info
mysql命令
创建序列化(implements Serializable):