用了这么长时间的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相关推荐

  1. hibernate基础工具findBySQL学习

    public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int ...

  2. Hibernate 中的attachDirty,attachClean,merge,findByProperty和findByExample

    本文地址:http://blog.csdn.net/shanglianlm/article/details/51209825 attachDirty:将传入的对象持久化并保存.如果对象未保存(Tran ...

  3. eclipse 达梦 连接_达梦Hibernate Spring集成开发示例

    [IT168 技术文档]DM是武汉华工达梦数据库有限公司推出的新一代高性能.高安全性的数据库产品.它具有开放的.可扩展的体系结构,高性能事务处理能力,以及低廉的维护成本.DM是完全自主开发的数据库软件 ...

  4. Hibernate插入、查询、删除操作 HQL or SQL

    http://adoze.bokee.com/viewdiary.25672393.html Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到Sess ...

  5. Hibernate query by Example

    1.hibernate xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibern ...

  6. hibernate的缓存技术使用

    缓存技术 1 引入包, 1 <!-- 二级缓存ehcache --> 2 <!-- https://mvnrepository.com/artifact/net.sf.ehcache ...

  7. 【Hibernate】getHibernateTemplate.find()和session.createQuery()方法总结

    Spring中常用的hql查询方法(getHibernateTemplate().find()) 一.find(String queryString); 示例:this.getHibernateTem ...

  8. (4) hibernate增删查改+批量操作+类似Mybatis动态sql

    简介 采用spring + hibernate + freemaker+ maven搭建起来的一个hibernate增删查改和 类似mybatis动态sql查询的一个案例 增删查改demo + 动态s ...

  9. hibernate底层dao

    1 IBaseDao.java package com.hm.eams.basic.common.base;import java.io.Serializable; import java.util. ...

最新文章

  1. pandas_getdummies()
  2. linux定期清理日志文件
  3. 微信小程序系列-wx.request 请求中文乱码问题
  4. python程序设计基础
  5. DocFetcher 本机文件搜索工具
  6. ab压力测试工具详解
  7. 利用nssm将jar包安装为windows服务
  8. Build/Launch EDKII emulator in Windows and Linux:编译/运行Windows和Linux环境下EDKII模拟器[4]
  9. 解决 无法删除文件夹 “文件夹访问被拒绝 你需要权限来执行此操作“ 的问题 理论上还可以使用本方法删除任何文件夹
  10. 用于服务器的芯片 i7,上海云服务器i7
  11. 【SLAM学习笔记4】卡方检验chi-square
  12. 【19/04/18 膜赛】土豪聪要请客(stol)
  13. 基于jsp(java)网络教学平台系统的设计与实现
  14. 李一男/任正非,港湾/华为
  15. Alex Woodie:2019大数据预测
  16. 部分期刊的缩写(计算机方向)、期刊缩写及其影响因子的查询方法
  17. php pinterest,使用PHP解析pinterest JSON api
  18. 设银行1年期定期存款年利率为2.25%,存款本金为deposit元,试编程计算并输出n年后的本利之和
  19. 文档乱码或文档损坏的修复方法
  20. 城市轨道交通运营票务管理论文_(毕业论文)轨道交通票务管理.doc

热门文章

  1. ubuntu16.04安装PCL
  2. 阿里云万郁香:多样付费选择构筑成本最优的弹性体验
  3. 数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk
  4. 基于 Flink 的典型 ETL 场景实现
  5. 日均万亿条数据如何处理?爱奇艺实时计算平台这样做
  6. Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
  7. 探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics
  8. “解救”外卖骑手,美团首次公开算法规则!
  9. 亚马逊云服务(AWS)中国与毕马威中国建立战略合作伙伴关系
  10. 不会玩游戏的程序员不是好作家,《深入理解Java虚拟机》周志明来了!