NHibernate.Criterion方法解释
HQL运算符 |
QBC运算符 |
含义 |
= |
Restrictions.eq() |
等于equal |
<> |
Restrictions.ne() |
不等于not equal |
> |
Restrictions.gt() |
大于greater than |
>= |
Restrictions.ge() |
大于等于greater than or equal |
< |
Restrictions.lt() |
小于less than |
<= |
Restrictions.le() |
小于等于less than or equal |
is null |
Restrictions.isnull() |
等于空值 |
is not null |
Restrictions.isNotNull() |
非空值 |
like |
Restrictions.like() |
字符串模式匹配 |
and |
Restrictions.and() |
逻辑与 |
and |
Restrictions.conjunction() |
逻辑与 |
or |
Restrictions.or() |
逻辑或 |
or |
Restrictions.disjunction() |
逻辑或 |
not |
Restrictions.not() |
逻辑非 |
in(列表) |
Restrictions.in() |
等于列表中的某一个值 |
not in(列表) |
Restrictions.not(Restrictions.in()) |
不等于列表中任意一个值 |
between x and y |
Restrictions.between() |
闭区间xy中的任意值 |
not between x and y |
Restrictions.not(Restrictions..between()) |
小于值X或者大于值y |
ICriteria criteria = this.Session.CreateCriteria<CpCourse>()
.CreateAlias(CpCourse._Organizations, "o")//表示CoOrganization实体和CpCourse实体做关联
//.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//可以根据别名再配置条件,该条件也可以写在
下面任意位置
.GetCriteriaByAlias("o")//表示跳到CoOrganization实体,如果不写表示还在CpCourse实体
.CreateAlias(CoOrganization._Users, "u")//表示CoUser实体和CoOrganization实体进行关联
.Add(Expression.Eq("u." + CoUser._UserName, "zhuangyq"));
//.Add(Expression.Eq("o." + CoOrganization._Address, "456"));//如这个位置
IList<CpCourse> list = criteria.List<CpCourse>();
以下结果集同上面写法
ICriteria criteria = this.Session.CreateCriteria<CpCourse>()
.CreateCriteria(CpCourse._Organizations)//表示到达CoOrganization实体,与CpCourse实体关联
//.Add(Expression.Eq(CoOrganization._Address, "456"))//条件必须紧跟CoOrganization实体后面
.CreateCriteria(CoOrganization._Users)//表示到达CoUser实体,与CoOrganization实体关联
.Add(Expression.Eq(CoUser._UserName, "zhuangyq"));"))//条件必须紧跟CoUser实体后面
IList<CpCourse> list = criteria.List<CpCourse>();
CreateCriteria表示到达该实体,再与.CreateAlias或.CreateCriteria的后面的实体与该实体进行关联。
关于CreateCriteria实体的条件必须紧跟CreateCriteria的实体其后。
CreateAlias创建表别名的方式,只要在这个表的别名创建之后都可以再进行条件的添加(条件必须包含别名)
或者使用GetCriteriaByAlias方法达到该包含别名的实体后继续操作再进行.CreateAlias或.CreateCriteria。
在NHibernate里面查很常用。CreateAlias 返回值还是当前的Criteria,但是CreateCriteria返回的新的Criteria。
基本用法 如下。
var cri = session.CreateCrieria(typeof(User)) .CreateCriteria("Roles") .Add(Restrictions.Eq("RoleName","admin"); var cri = session.CreateCrieria(typeof(User)) .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin");
现在我除了想查role是admin的用户外,也想查出UserName名字叫做Joe的用户,那么他们就有区别
var cri = session.CreateCrieria(typeof(User)) .Add(Restrictions.Eq("UserName", "Joe") .CreateCriteria("Roles") .Add(Restrictions.Eq("RoleName","admin"); //第一种写法 var cri = session.CreateCrieria(typeof(User)) .Add(Restrictions.Eq("UserName", "Joe") //紧贴着User .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin"); //第二种写法。 var cri = session.CreateCrieria(typeof(User)) .CreateAlias("Roles","role") .Add(Restrictions.Eq("role.RoleName","admin"); .Add(Restrictions.Eq("UserName", "Joe") //前后都没有关系,贴着role也可以。
相关推荐
- `createAlias()`方法用于创建关联查询,例如:`Criteria crt = session.createCriteria(HistoryExam.class).createAlias("user","userAlias").add(Restrictions.like("userAlias.id", userid));`这将`HistoryExam...
2. **使用Criteria的createAlias和createCriteria方法**:如果查询涉及多个表,可以使用`createAlias`和`createCriteria`来创建关联,并在这些关联上添加分页条件。 ### 三、Query API 分页 1. **使用...
1. **Criteria接口**:是Criteria API的主要入口,提供了创建查询的基本构造方法,如`add()`用于添加限制条件,`setResultTransformer()`用于结果转换,`createAlias()`和`createCriteria()`用于关联查询。...
分页与排序 在进行模糊查询时,常常还需要考虑分页和排序的需求。这些都可以通过`setFirstResult()`、`setMaxResults()`以及`addOrder()`等方法来实现。 ```java // 实现分页和排序 Criteria criteria = session....
4. **分组查询**:Criteria的createCriteria(String associationPath)方法可以用于创建子查询,配合setProjection(Projections projections)进行分组,Projections提供了groupProperty()方法用于按属性分组。...
通过`createCriteria()`或`createAlias()`方法处理一对多、一对一或多对多关系,例如: ```java criteria.createCriteria("relatedEntity", "alias", JoinType.INNER_JOIN); ``` 7. **动态关联抓取** 使用`...
2. 添加查询条件:Criteria API提供了多种方法来添加查询条件,如add(Restriction restriction)用于添加限制条件,addOrder(Order order)用于排序,createAlias(String associationPath, String alias)用于关联查询...
crit.createAlias("orderItems", "oi"); crit.add(Restrictions.eq("oi.product.name", "Apple")); crit.setProjection(Projections.sum("oi.quantity")); // 计算总数量 List<Integer> totalQuantities = crit.list...
Criteria criteria = session.createCriteria(User.class); criteria.createAlias("orders", "o"); List<User> users = criteria.list(); session.close(); return users; // 或者使用JDBC String sql = ...
Criteria API还提供了其他功能,如限制结果集大小(`setMaxResults()`),按特定顺序排序(`addOrder(Order)`),以及添加多个查询条件(`createCriteria()`和`createAlias()`)。 总结来说,Hibernate Criteria ...
List<MainClass> results = (List) session.createCriteria(MainClass.class) .add(criteria) // 添加之前定义的查询条件 .list(); // 执行查询 ``` #### 注意事项 1. **集合填充问题:** 当查询结果返回后,每...
Criteria criteria = session.createCriteria(User.class, "u") .createAlias("u.address", "a") .setProjection(Projections.projectionList() .add(Projections.property("u.id").as("userId")) .add...
在映射文件中定义了实体间的关联关系后,可以通过JOIN关键字进行联查,或者在Criteria API中使用CreateCriteria或CreateAlias方法实现。 3. **分页查询** 在大数据量的场景下,分页查询是必不可少的。Hibernate ...
Hibernate是一个流行的Java持久化框架,它简化了Java应用程序与数据库之间的交互。通过使用ORM,开发者可以将数据库操作转化为对Java对象的操作,使得代码更加简洁且易于维护。在多表连接查询的场景下,Hibernate...
criteria.createAlias("addresses", "addr"); // 添加别名 criteria.add(Restrictions.gt("age", 30)); ``` 8. **子查询** Hibernate允许在查询中嵌套其他查询,增强查询表达能力: ```java // HQL String ...
这种API的主要优点在于它的灵活性和可扩展性,可以方便地与业务逻辑相结合,减少代码重复,并且对ORM(对象关系映射)的理解要求较低。 博文链接:[https://ssydxa219.iteye.com/blog/1543253]...
B 参加的会议 A 参加的另一个会议 B 只有 B 参加的会议1, 1 2, 1 1, 2 2, 3 现在我们想要一个扁平化的名字列表,会议主题标准标准 = session.createCriteria(Employee.class, "e"); 标准.setFetchMode("e.meetings",...
Criteria criteria = session.createCriteria(EntityA.class); criteria.createAlias("entityB", "b"); criteria.add(Restrictions.eq("property", value)); List<EntityA> entities = criteria.list(); ``` 以上...
此外,还可以通过 `createAlias()` 方法来处理多对多或一对多关系中的中间表。 总的来说,Hibernate的Criteria查询提供了灵活性和便利性,使得在程序中动态构造查询成为可能,同时保持了代码的清晰和可读性。它是...
` 创建一个User类的查询实例,然后可以通过addRestrictions、createAlias等方法添加条件。 3. **Query API(JPA 2.1 引入)**: 与HQL类似,但更加面向方法,提供了一个强大的API来创建查询。例如,`Query query = ...