Hibernate框架基础知识第四天查询
2016-07-18 19:59
246 查看
第四天 Hibernate查询
1.HQL查询。
主要功能:实现查询(通过查询实体的方式),所有的查询全部是在实体对象里查询的。
1)只要实现的查询,那么都是从Query接口中去实现的。
首先就应该创建一个Query接口。
在创建Query接口的时候传入的是HQL查询语句。HQL查询语句的语法:
[select/update/delete……] from Entity [where……] [group by……] [having……][order by……]
操作示例:
// 首先创建一个Query接口,一定通过session创建的。
Session session =HibernateSessionFactory.getSession();
String hsql = "FromCate";// HQL的语句
Query query =session.createQuery(hsql);
// 得到查询之后的结果集
List<Cate> list =query.list();
for (Cate c : list) {
System.out.println("分类的名称:" +c.getName());
}
2)HQL查询的介绍。
A.查询某一些实体对象的属性。查询之后的结果是存取到Object[]数组里。示例:
String hsql = "Select c.id,c.name FromCate c";// HQL的语句
List<Object[]> list =session.createQuery(hsql).list();
for(Object[] objs : list){
System.out.println("分类ID:"+objs[0]+",分类名称:"+objs[1]);
}
B.Hibernate分页的实现。
Query接口里的重要方法:
1)setFirstResult:表示从哪一条数据的索引开始。
2)setMaxResults:表示每页的最大数据量:
示例:
String hsql ="from Cate ";
List<Cate> list =session.createQuery(hsql)
.setFirstResult(pageStart) //查询结果集从哪开始 .setMaxResults(pagesize)//获取的最大数据
.list();
C.获取查询结果的实体对象数据。
String hsql = "from Cate ";
Cate c =(Cate)session.createQuery(hsql).setMaxResults(1).uniqueResult();
D.动态参数绑定
1)第一种方法,参数前加:符号。
String hsql = "from Cate c Where 1=1";
if(id > 0){
hsql += " andid =:id";
}
if(!name.equals("")){
hsql +=" andname =:name";
}
Query query = session.createQuery(hsql);
if(id > 0){
query.setParameter("id",id);
}
if(!name.equals("")){
query.setParameter("name",name);
}
List<Cate> list=query.list();
2)第二种参数绑定方法,通过?作为占位符。然后后面通过占位符的索引去设置参数值(这里的参数索引是从0开始)。
示例:
String hsql ="from Cate c Where 1=1 and id=? and name like ? ";
Query query =session.createQuery(hsql);
query.setParameter(0, id);
query.setParameter(1, "%"+name+"%");
E.更新和删除的操作示例:
1.使update Entity
Queryquery = session.createQuery("update
Entity set name='jack'where id=1");
int rowCount = query.executeUpdate();
2.使用delete
Queryquery = session.createQuery("delete Entity where id < 1000");
int rowCount = query.executeUpdate();
F:分组统计查询。
语法格式。
比如统计某个分类下的产品数量:
String hsql ="Select c.name,count(p.id) "+
" From Productp left join p.cate c "+
" Group by c.id";// HQL的语句
3)QBC查询
1)需要引入的接口Criteria。
操作示例:
Criteria crt =session.createCriteria(Cate.class);
//如果需要加入条件
crt.add(Restrictions.eq("this.name","家电"));
List<Cate> list = crt.list();
4)Native查询。
查阅的语句就是本身的数据库的查询语句。
通过SQLQuery的接口实现的。
SQLQuery sqlQuery =session.createSQLQuery("Select * From Product");
List<Product> list =sqlQuery.addEntity(Product.class).list();
1.HQL查询。
主要功能:实现查询(通过查询实体的方式),所有的查询全部是在实体对象里查询的。
1)只要实现的查询,那么都是从Query接口中去实现的。
首先就应该创建一个Query接口。
在创建Query接口的时候传入的是HQL查询语句。HQL查询语句的语法:
[select/update/delete……] from Entity [where……] [group by……] [having……][order by……]
操作示例:
// 首先创建一个Query接口,一定通过session创建的。
Session session =HibernateSessionFactory.getSession();
String hsql = "FromCate";// HQL的语句
Query query =session.createQuery(hsql);
// 得到查询之后的结果集
List<Cate> list =query.list();
for (Cate c : list) {
System.out.println("分类的名称:" +c.getName());
}
2)HQL查询的介绍。
A.查询某一些实体对象的属性。查询之后的结果是存取到Object[]数组里。示例:
String hsql = "Select c.id,c.name FromCate c";// HQL的语句
List<Object[]> list =session.createQuery(hsql).list();
for(Object[] objs : list){
System.out.println("分类ID:"+objs[0]+",分类名称:"+objs[1]);
}
B.Hibernate分页的实现。
Query接口里的重要方法:
1)setFirstResult:表示从哪一条数据的索引开始。
2)setMaxResults:表示每页的最大数据量:
示例:
String hsql ="from Cate ";
List<Cate> list =session.createQuery(hsql)
.setFirstResult(pageStart) //查询结果集从哪开始 .setMaxResults(pagesize)//获取的最大数据
.list();
C.获取查询结果的实体对象数据。
String hsql = "from Cate ";
Cate c =(Cate)session.createQuery(hsql).setMaxResults(1).uniqueResult();
D.动态参数绑定
1)第一种方法,参数前加:符号。
String hsql = "from Cate c Where 1=1";
if(id > 0){
hsql += " andid =:id";
}
if(!name.equals("")){
hsql +=" andname =:name";
}
Query query = session.createQuery(hsql);
if(id > 0){
query.setParameter("id",id);
}
if(!name.equals("")){
query.setParameter("name",name);
}
List<Cate> list=query.list();
2)第二种参数绑定方法,通过?作为占位符。然后后面通过占位符的索引去设置参数值(这里的参数索引是从0开始)。
示例:
String hsql ="from Cate c Where 1=1 and id=? and name like ? ";
Query query =session.createQuery(hsql);
query.setParameter(0, id);
query.setParameter(1, "%"+name+"%");
E.更新和删除的操作示例:
1.使update Entity
Queryquery = session.createQuery("update
Entity set name='jack'where id=1");
int rowCount = query.executeUpdate();
2.使用delete
Queryquery = session.createQuery("delete Entity where id < 1000");
int rowCount = query.executeUpdate();
F:分组统计查询。
语法格式。
比如统计某个分类下的产品数量:
String hsql ="Select c.name,count(p.id) "+
" From Productp left join p.cate c "+
" Group by c.id";// HQL的语句
3)QBC查询
1)需要引入的接口Criteria。
操作示例:
Criteria crt =session.createCriteria(Cate.class);
//如果需要加入条件
crt.add(Restrictions.eq("this.name","家电"));
List<Cate> list = crt.list();
4)Native查询。
查阅的语句就是本身的数据库的查询语句。
通过SQLQuery的接口实现的。
SQLQuery sqlQuery =session.createSQLQuery("Select * From Product");
List<Product> list =sqlQuery.addEntity(Product.class).list();
相关文章推荐
- 在springmvc中解决FastJson循环引用的问题
- 运行时的使用技巧
- bzoj4034: [HAOI2015]T2
- 管理员必备的Linux系统监控工具
- 设置可滚动的TextView
- 【杭电oj】1005 - Number Sequence(找规律)
- UVA11889 Benefit
- Openjudge2814:拨钟问题
- iOS笔试题之杭州卓健科技有限公司
- Hibernate框架基础知识第三天
- RecyclerView+侧边字母索引排序
- 毫秒转字符串时间
- Android 用MediaCodec实现视频硬解码
- D2. Magic Powder - 2
- POJ3292(素数筛选)
- HDU 1018 Big Number
- 设计模式-单例模式
- 关于android图标美工设计尺寸与处理方法
- HDU2896-病毒侵袭-ac自动机
- NYOJ 130 相同雪花(哈希入门)