Hibernate 对象标准查询

时间

select sysdate - to_date(CLAIM_TIME, ’yyyy - mm - dd hh24: mi: ss’) dt from

时间

select TO_CHAR(optime + 30, ’yyyy - mm - dd hh24: mi: ss’) FROM RWD_MERCHANT;

时间

select sysdate, TO_CHAR(sysdate + 30, 'yyyy-mm-dd HH24:MI:SS') from dual;

时间

SELECT CLAIM_TIME, SYSDATE - 3, CLAIM_TIME from RWD_MERCHANT WHERE CLAIM_TIME <= SYSDATE - 3;

时间

SELECT * from c_job WHERE TO_NUMBER(TO_CHARoptime, 'yyyyMM')) >= 201608 AND TO_NUMBER(TO_CHAR(optime, 'yyyyMM')) <= 201608;

级联

select c.ID, c.name, c.age, o.ID, o.order_number, o.customer_IDfrom Customer c inner join c.orders o group by c.age;

级联

Query query = session.createQuery(“from User user where user.name = : customername and user.age = : customerage”);
query.setString(“customername”, name);
query.setInteger(“customerage”, age);

级联

Query query = session.createQuery(“from User user where user.name = ? and user.age = ? ”);
query.setString(0, name);
query.setInteger(1, age);

级联

String hql = ”from User user where user.name = : customername”;
Query query = session.createQuery(hql);
query.setParameter(“customername”, name, Hibernate.STRING);

级联

Customer customer = new Customer();
customer.setName(“pansl”);
customer.setAge(80);
Query query = session.createQuery(“from Customer c where c.name = : name and c.age = : age”);
query.setProperties(customer);

级联

Customer customer = (Customer) session.load(Customer.class, ”1”);
Query query = session.createQuery(“from Order order where order.customer = : customer”);
query.setProperties(“customer”, customer);
List list = query.list();
//上面的代码会生成类似如下的SQL语句: Select * from order where customer_ID = ’1’;
//级联Restrictions.eq-- > equal, 等于
//Restrictions.allEq-- > 参数为Map对象, 使用key / value进行多个等于的比对, 相当于多个Restrictions.eq的效果
//Restrictions.gt-- > 大于
//Restrictions.ge-- > 
//great - equal >= 大于等于Restrictions.lt-- > less - than, <
//小于Restrictions.le-- > less - equal <= 小于等于
//Restrictions.between-- >
//对应SQL的between子句Restrictions.like-- >
//对应SQL的LIKE子句Restrictions.in-- > 
//对应SQL的in子句Restrictions.and-- > and
//关系Restrictions.or-- > or 
//关系Restrictions.isNull-- >判断属性是否为空, 为空则返回trueRestrictions.isNotNull-- > 与isNull相反级联Session
session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
String[] names = {
    "terry",
    "larry",
    "tom"
};
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.in("name", names));
Listcustomers = criteria.list();
for (Customer cus: customers) {
    System.out.println(cus);
}

级联

criteria.add(Restrictions.or(Restrictions.in("name", names), Restrictions.eq("age", 15)));

级联

Session session = getSessionFactory().getCurrentSession();
Criteria criteria = session.createCriteria(User.class);

级联

User user = new User();
user.setName("Jonh");
criteria.add(Example.create(user));
criteria.add(Restrictions.isNotNull("email"));
List list = criteria.list();
select i.*, u.* from ITEM i left outer join USERS u on i.SELLER_ID = u.USER_IDwhere i.ITEM_ID = ?
    //在HQL中直接使用left join fetch, 直接查询出所有有的关联bids 
    collectionListallItems = session.createQuery("from Item i left join fetch i.bids").list();

Criteria方式, 效果同上ListallItems = session.createCriteria(Item.class).setFetchMode("bids", FetchMode.JOIN).list();

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.get(Item.class, new Long(1234));
Hibernate.initialize(item.getSeller());
//强制初始化seller proxy
tx.commit();
session.close();
processDetached(item.getSeller());
hibernate.format_sql
hibernate.use_sql_comments.
session.createCriteria(Item.class).createAlias("bids", "b")
    .add(Restrictions.like("this.description", "%Foo%"))
    .add(Restrictions.gt("b.amount", new BigDecimal(99)));
//返回的Item对象, bids集合属性被初始化
session.createCriteria(Item.class)
    .setFetchMode("bids", FetchMode.INNER_JOIN)
    .add(Restrictions.like("description", "%Foo%"));
session.createCriteria(Item.class)
    .createAlias("bids", "b", CriteriaSpecification.INNER_JOIN)
    .setFetchMode("b", FetchMode.JOIN)
    .add(Restrictions.like("description", "%Foo%"));

去重

List distinctResult = session.createCriteria(Item.class)
    .setFetchMode("bids", FetchMode.JOIN)
    .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
    .list();

关联对象1

Criteria crit = session.createCriteria(Item.class)
    .createAlias("bids", "b")
    .createAlias("seller", "s")
    .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List result = crit.list();
//List中是Map
for (Object aResult: result) {
    Map map = (Map) aResult;
    Item item = (Item) map.get(Criteria.ROOT_ALIAS);
    Bid bid = (Bid) map.get("b");
    User seller = (User) map.get("s");
}

关联对象2

Query q = session.createQuery("select i.id as itemId, i.description as desc, i.initialPrice as price from Item i");
q.setResultTransformer(Transformers.aliasToBean(ItemDTO.class));
//指定多个要查询的字段, Projections.property()
//此查询返回 a List of Object[]
session.createCriteria(Item.class)
    .setProjection(Projections.projectionList()
        .add(Projections.id())
        .add(Projections.property("description"))
        .add(Projections.property("initialPrice"))
    );
//同上行等价的写法, 使用Property.forName()
session.createCriteria(Item.class)
    .setProjection(Projections.projectionList()
        .add(Property.forName("id"))
        .add(Property.forName("description"))
        .add(Property.forName("initialPrice"))
    );
//根据u.id, u.username分组, 并统计bid的数量, 计算bid.amount的平均值
//返回 a collection of Object[], 数组中有四个字段: user identifer, username, number of bids, average bid amount
session.createCriteria(Bid.class)
    .createAlias("bidder", "u")
    .setProjection(Projections.projectionList()
        .add(Property.forName("u.id").group())
        .add(Property.forName("u.username").group())
        .add(Property.forName("id").count())
        .add(Property.forName("amount").avg())
    );
//同上一行等价的写法
session.createCriteria(Bid.class)
    .createAlias("bidder", "u")
    .setProjection(Projections.projectionList()
        .add(Projections.groupProperty("u.id"))
        .add(Projections.groupProperty("u.username"))
        .add(Projections.count("id"))
        .add(Projections.avg("amount"))
    );

添加排序

session.createCriteria(Bid.class)
    .createAlias("bidder", "u")
    .setProjection(Projections.projectionList()
        .add(Projections.groupProperty("u.id"))
        .add(Projections.groupProperty("u.username").as("uname"))
        .add(Projections.count("id"))
        .add(Projections.avg("amount")))
    .addOrder(Order.asc("uname"));

SQL嵌入式

String sqlFragment = "(select count(*) from ITEM i where i.ITEM_ID = ITEM_ID) as numOfItems";
session.createCriteria(Bid.class)
    .createAlias("bidder", "u")
    .setProjection(Projections.projectionList()
    .add(Projections.groupProperty("u.id"))
    .add(Projections.groupProperty("u.username"))
    .add(Projections.count("id"))
    .add(Projections.avg("amount) )
    //添加SQL片断, 并指定字段名称及类型
    .add(Projections.sqlProjection(sqlFragment, new String[] {
        "numOfItems"
    }, new Type[] {
        Hibernate.LONG
    }))); 
//SQL解析
    SELECT u.USER_ID, u.USERNAME, count(BID_ID), avg(BID_AMOUNT),
         (SELECT 
                count( * ) 
            FROM 
                ITEM i WHERE i.ITEM_ID = ITEM_ID) AS numOfItems 
    FROM
        BID INNER JOIN USERS u ON BIDDER_ID = u.USER_ID
    GROUP BY 
        u.USER_ID, u.USERNAME 

使用QBE

public List findUsersByExample(User u) {
    Example exampleUser = Example.create(u)
    //字符串类型查询时忽略大小写
        .ignoreCase()
    //字符串类型查询模糊
        .enableLike(MatchMode.ANYWHERE)
    //指定不包括的属性
        .excludeProperty("password");
    //默认所有的value - typed属性, 
    //不包括主键属性将用于查询匹配
    return getSession().createCriteria(User.class).add(exampleUser).list();
}

QBE混合QBC

public List findUsersByExample(User u) {
    Example exampleUser = Example.create(u)
        .ignoreCase()
        .enableLike(MatchMode.ANYWHERE);
    return getSession().createCriteria(User.class)
        .add(exampleUser)
        .createCriteria("items")
    //为items添加约束
        .add(Restrictions.isNull("successfulBid")).list();
}

两个QBE

public List findUsersByExample(User u, Item i) {
    Example exampleUser = Example.create(u).ignoreCase().enableLike(MatchMode.ANYWHERE);
    Example exampleItem = Example.create(i).ignoreCase().enableLike(MatchMode.ANYWHERE);
    return getSession().createCriteria(User.class)
        .add(exampleUser).createCriteria("items").add(exampleItem).list();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容