首页 > 代码库 > QBC检索和本地SQL检索
QBC检索和本地SQL检索
细说QBC:
QBC(Query By Criteria) 查询:这种方式比较面向对象方式,因为是面向对象,所以查询时参数名就是所查询的类的属性名并不是数据库的表的列名
重点是有三个描述条件的对象:Restrictions,Order,Projections。
使用QBC查询,一般需要以下三个步骤:
1. 使用Session实例 的createCriteria()方法创建Criteria对象 ,
2. 并使用add()方法添加设置查询条件,工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
3. 使用Criteria对象的list()方法进行查询并返回结果
代码示例:
@Test public void TestQBCQuery(){ Criteria criteria=session.createCriteria(Employee.class);//1创建一个criteria criteria.add(Restrictions.gt("salary",4000F))//2使用add()添加查询条件 .addOrder(Order.desc("salary")) .setProjection(Projections.count("dept"));//这里是访问数据库表里的DEPT_ID字段,所以直接写类里的dept属性即可,不能写表的列名下去
//设置了projections对象后返回的只是projections设置的条件,并不是返回employee对象给我,? List<Employee> result=criteria.list();//使用list()方法执行查询语句,并返回结果 for(Employee emps:result){ System.out.print(emps.getId()+" "); System.out.println(emps.getName()+" "+emps.getSalary()); } }
QBC检索重要的三个类
Restrictions类的常用方法:返回类型为Criterion,作为查询容器的参数 方法名称 描述 使用 Restrictions.eq 等于 Restrictions.eq(String propertyName,Object value) Restrictions.allEq 使用Map,Key/Valu进行多个等于的比对 Restrictions.allEq(Map propertyNameValues) Restrictions.gt(greater than) 大于 Restrictions.gt(String propertyName, Object value) Restrictions.ge(greater equal) 大于等于 Restrictions.ge(String propertyName, Object value) Restrictions.lt(less than) 小于 Restrictions.It(String propertyName, Object value) Restrictions.le(less equal) 小于等于 Restrictions.Le(String propertyName, Object value) Restrictions.between 对应SQL的between Restrictions.between(String propertyName, Object lo, Object hi) Restrictions.like 对应SQL的like Restrictions.like(String propertyName, Object value) Restrictions.in 对应SQL的in Restrictions.in(String propertyName, Collection value) Restrictions.and and关系 Restrictions.and(Criterion lhs, Criterion rhs) Restrictions.or or关系 Restrictions.or(Criterion lhs, Criterion rhs) Restrictions.sqlRestriction SQL限定查询 Restrictions.sqlRestriction(String sql,Object[] values,Type[] types)
Order类的常用方法:作为查询容器的参数 方法名称 描述 使用 Order.asc 升序 Order.asc(String propertyName) Order.desc 降序 Order.desc(String propertyName)
Projections类的常用方法:作为查询容器的参数 方法名称 描述 使用 Projections.avg 求平均值 Porjections.avg(String propertyName) Projections.count 统计某属性的数量 Projections.count(String propertyName) Projections.countDistinct 统计某属性不同值的数量 Projections.countDistinct(String propertyName) Projections.groupProperty 指定某个属性为分组属性 Projections.groupProperty(String propertyName) Projections.max 求最大值 Projections.max(String propertyName) Projections.min 求最小值 Projections.min(String propertyName) Projections.projectionList 创建一个ProjectionList对象 Projections.projectionList() Projections.rowCount 查询结果集中的记录条数 Projections.rowCount() Projections.sum 求某属性的合计 Projections.sum(String propertyName)
本地SQL检索:是面向数据库的,所以检索的属性一定是数据库的表名或者是表的字段,不是对象类名或者属性名,
但是在Hibernate中不推荐使用本地SQL语句的查询,因为本地SQL语句的查询会使程序不稳定,无法自由的移植数据库。因为各个数据库虽然有统一的SQL标准,但是各个数据之间又有很多的自身的扩展,造成SQL语句不兼容,导致程序功能的不稳定。
本地SQL检索示例:
1取得query对象 session.createSQLQuery(sql)
2添加查询条件 .setString("TableFiledName",“value”)
3执行查询语句并返回结果 .executeUpdate();
代码示例:
@Test public void testNativeSQL(){ String sql = "INSERT INTO gg_department VALUES(?, ?)"; Query query = session.createSQLQuery(sql); query.setInteger(0, 280) .setString(1, "ATGUIGU") .executeUpdate(); }
QBC检索和本地SQL检索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。