日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php findbysql,hibernate的findByExample

發布時間:2024/9/27 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php findbysql,hibernate的findByExample 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用了這么長時間的hibernate/spring,如果不是今天用的findByExample方法到現在還不知道findByExample的機制。慚愧

Class User{

String username;

String password = "默認口令";

Company company;

getter()&setter().....

}

Company company = companyDao.getById("id");

User user = new User();

user.setSid("主鍵");

uer.setUsername("user");

use.setCompany(company);

userDao.findByExample(user);

這個時候的SQL條件為:

select * from user

where username = ?

and password = ?

findByExample()使用時得出結論:

1.不支持主鍵

2.不支持關聯

3.不支持NULL

查詢示例

org.hibernate.criterion.Example

類允許你通過一個給定實例構建一個條件查詢。

此實例的屬性值將做成查詢條件。

Java代碼

Cat cat = new Cat();

cat.setSex('F');

cat.setColor(Color.BLACK);

List results = session.createCriteria(Cat.class)

.add( Example.create(cat))

.list();

Example.create(cat) 表示根據cat這個對象來構造一個查詢條件。

上面這條語句將查詢sex 為 F 而且Color為BLACK的所有Cat記錄。

版本屬性、標識符和關聯被忽略。默認情況下值為null的屬性將被排除。

可以自行調整Example使之更實用。

Java代碼

Example example = Example.create(cat)

.excludeZeroes() //排除值為0的屬性

.excludeProperty("color")

//排除 color屬性

.ignoreCase() //忽略大小寫

.enableLike(); //啟用模糊查詢

List results = session.createCriteria(Cat.class)

.add(example)

.list();

甚至可以使用examples在關聯對象上放置條件。

Java代碼

List results = session.createCriteria(Cat.class)

.add( Example.create(cat) )

.createCriteria("mate")

.add( Example.create( cat.getMate() ) )

.list();

關于使用Hibernate findByExample的注意事項

from:http://www.85java.com/viewthread.php?tid=2259

findByExample是一個很便利的查詢的方法,通過傳入的實例,進行條件匹配生成查詢語句。

但之前一直很少用這個方法,原因是之前發現不知道什么情況下查詢結果跟自己想要生成的不同。還是學習方式不同吧,對于陌生的東西出現問題了就不管不用了,這樣是不行了。現在又遇到了,卻很快的發現問題所在了。

原因其實很簡單,findByExample只為example中的基本類型屬性生效,如果example的屬性中有bean的話(一般有外鍵時就會出現了)就會無法轉成SQL查詢條件。甚至很多時候會產生where

(1=1)的條件,相信會令人很迷惑。

解決辦法很簡單吧,遇到這種情況可以直接使用SQL或條件查詢(Criteria),更推薦使用Criteria。

下面是查詢參考:

Java代碼

@Override

public AppsAccount findByUserAndApp(Users user, Apps app) {

final DetachedCriteria query = DetachedCriteria

.forClass(AppsAccount.class);

Criteria criteria =

query.getExecutableCriteria(getSession());

criteria.add(Restrictions.eq("users", user));

criteria.add(Restrictions.eq("apps", app));

@SuppressWarnings("unchecked")

List list =

criteria.list();

if (list != null &&

!list.isEmpty()) {

return list.get(0);

}

return null;

}

@Override

public AppsAccount findByUserAndApp(Users user, Apps app) {

final DetachedCriteria query = DetachedCriteria

.forClass(AppsAccount.class);

Criteria criteria =

query.getExecutableCriteria(getSession());

criteria.add(Restrictions.eq("users", user));

criteria.add(Restrictions.eq("apps", app));

@SuppressWarnings("unchecked")

List list =

criteria.list();

if (list != null &&

!list.isEmpty()) {

return list.get(0);

}

return null;

}

因為是跟spring整合,所以用getSession()方法傳入session。

AppsAccount.class類

Java代碼

public class AppsAccount implements java.io.Serializable {

// Fields

private static final long serialVersionUID =

2255050572597512586L;

private String id;

private Users users;

private Apps apps;

private String account;

總結

以上是生活随笔為你收集整理的php findbysql,hibernate的findByExample的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。