zoukankan      html  css  js  c++  java
  • NHibernate条件查询(Criteria Query)

    代码
    典型用法:从ISession接口中创建ICriteria实例对象;在这个ICriteria实例对象上设置一个或多个表达式;要求ICriteria接口返回需要的列表,就是根据表达式从数据库中返回对象。
    1.创建ICriteria实例
    使用ISession接口的CreateCriteria方法创建了NHibernate.ICriteria接口一个特定的持久化类的查询实例,也可以说ISession是用来制造Criteria实例的工厂。
    public IList<Customer> CreateCriteria()
    {
        ICriteria crit 
    = _session.CreateCriteria(typeof(Customer));
        crit.SetMaxResults(
    50);
        IList
    <Customer> customers = crit.List<Customer>();
        
    return customers;
    }
    例如上面的例子返回Customer对象集合,设置最大的集合数量为50条。
    2.模糊查询
    使用ICriteria接口提供的Add方法添加Restrictions类中约束表达式可以限制一些结果集的作用。
    public IList<Customer> LikeAndBetween()
    {
      IList
    <Customer> customers =     _session.CreateCriteria(typeof(Customer))
        .Add(Restrictions.Like(
    "Firstname""YJing%"))
        .Add(Restrictions.Between(
    "Lastname""A%""Y%"))
            .List
    <Customer>();
        
    return customers;
    }
    3.结果集排序
    使用ICriteria.Order对结果集排序,第二个参数true代表asc,false代表desc。例如下面例子查询Customer对象按FirstName降序、Lastname升序。
    public IList<Customer> Order()
    {
        
    return _session.CreateCriteria(typeof(Customer))
            .Add(Restrictions.Like(
    "Firstname","Y%"))
            .AddOrder(
    new NHibernate.Criterion.Order("Firstname"false))
            .AddOrder(
    new NHibernate.Criterion.Order("Lastname"true))
            .List
    <Customer>();
    }
    4.条件查询
      
    /// 利用CriteriaAPI获取顾客ID大于lId小于gId的顾客        public IList<Customer> GreaterAndLetter(int lId,int gId)
     {
    return _session.CreateCriteria(typeof(Customer))
      .Add(Restrictions.Gt(
    "CustomerId", lId))//大于
      .Add(Restrictions.Eq("CustomerId", lId))//等于
      .Add(Restrictions.Or(Restrictions.Eq("CustomerId", gId), Restrictions.Lt("CustomerId", gId)))//小于等于
      .List<Customer>();
    }

    测试:
    [TestFixture]
        
    public class QueryCriteriaAPIFixture
        {
            
    private SessionManager _helper;
            
    private ISession _session;
            
    private QueryCriteriaAPI _queryCriteriaAPI;
            [TestFixtureSetUp]
            
    public void TestFixtureSetup()
            {_helper 
    = new SessionManager();}
            [SetUp]
            
    public void Setup()
            {
                _session 
    = _helper.GetSession();
                _queryCriteriaAPI 
    = new QueryCriteriaAPI(_session);
            }
     [Test]
    public void CreateCriteriaTest()
    {
    IList
    <Customer> customers = _queryCriteriaAPI.CreateCriteria();
       Assert.AreEqual(
    5, customers.Count);
     }
    [Test]
    public void LikeAndBetweenTest()
    {
     IList
    <Customer> customers = _queryCriteriaAPI. LikeAndBetween();
    Assert.AreEqual(
    1, customers.Count);
    }
     [Test]
     
    public void OrderTest()
     {
        IList
    <Customer> customers = _queryCriteriaAPI.Order();
                Assert.AreEqual(
    1, customers.Count);
     }
    [Test]
    public void GreaterAndLetterTest()
    {
         IList
    <Customer> customers= _queryCriteriaAPI.GreaterAndLetter (1,4);
          
    foreach (Customer c in customers)
           {
             Assert.GreaterOrEqual(c.CustomerId, 
    1);//大于等于
             Assert.LessOrEqual(c.CustomerId, 4);//小于等于
           }
      }   
    }
  • 相关阅读:
    栈的使用
    学习
    JS中常用的工具类
    AOP的相关概念
    Git-用git同步代码
    权限管理3-整合Spring Security
    权限管理2-开发权限管理接口
    权限管理1-需求描述
    使用Canal作为mysql的数据同步工具
    使用存储过程在mysql中批量插入数据
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706385.html
Copyright © 2011-2022 走看看