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相关推荐
- hibernate基础工具findBySQL学习
public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int ...
- Hibernate 中的attachDirty,attachClean,merge,findByProperty和findByExample
本文地址:http://blog.csdn.net/shanglianlm/article/details/51209825 attachDirty:将传入的对象持久化并保存.如果对象未保存(Tran ...
- eclipse 达梦 连接_达梦Hibernate Spring集成开发示例
[IT168 技术文档]DM是武汉华工达梦数据库有限公司推出的新一代高性能.高安全性的数据库产品.它具有开放的.可扩展的体系结构,高性能事务处理能力,以及低廉的维护成本.DM是完全自主开发的数据库软件 ...
- Hibernate插入、查询、删除操作 HQL or SQL
http://adoze.bokee.com/viewdiary.25672393.html Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到Sess ...
- Hibernate query by Example
1.hibernate xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibern ...
- hibernate的缓存技术使用
缓存技术 1 引入包, 1 <!-- 二级缓存ehcache --> 2 <!-- https://mvnrepository.com/artifact/net.sf.ehcache ...
- 【Hibernate】getHibernateTemplate.find()和session.createQuery()方法总结
Spring中常用的hql查询方法(getHibernateTemplate().find()) 一.find(String queryString); 示例:this.getHibernateTem ...
- (4) hibernate增删查改+批量操作+类似Mybatis动态sql
简介 采用spring + hibernate + freemaker+ maven搭建起来的一个hibernate增删查改和 类似mybatis动态sql查询的一个案例 增删查改demo + 动态s ...
- hibernate底层dao
1 IBaseDao.java package com.hm.eams.basic.common.base;import java.io.Serializable; import java.util. ...
最新文章
- pandas_getdummies()
- linux定期清理日志文件
- 微信小程序系列-wx.request 请求中文乱码问题
- python程序设计基础
- DocFetcher 本机文件搜索工具
- ab压力测试工具详解
- 利用nssm将jar包安装为windows服务
- Build/Launch EDKII emulator in Windows and Linux:编译/运行Windows和Linux环境下EDKII模拟器[4]
- 解决 无法删除文件夹 “文件夹访问被拒绝 你需要权限来执行此操作“ 的问题 理论上还可以使用本方法删除任何文件夹
- 用于服务器的芯片 i7,上海云服务器i7
- 【SLAM学习笔记4】卡方检验chi-square
- 【19/04/18 膜赛】土豪聪要请客(stol)
- 基于jsp(java)网络教学平台系统的设计与实现
- 李一男/任正非,港湾/华为
- Alex Woodie:2019大数据预测
- 部分期刊的缩写(计算机方向)、期刊缩写及其影响因子的查询方法
- php pinterest,使用PHP解析pinterest JSON api
- 设银行1年期定期存款年利率为2.25%,存款本金为deposit元,试编程计算并输出n年后的本利之和
- 文档乱码或文档损坏的修复方法
- 城市轨道交通运营票务管理论文_(毕业论文)轨道交通票务管理.doc
热门文章
- ubuntu16.04安装PCL
- 阿里云万郁香:多样付费选择构筑成本最优的弹性体验
- 数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk
- 基于 Flink 的典型 ETL 场景实现
- 日均万亿条数据如何处理?爱奇艺实时计算平台这样做
- Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
- 探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics
- “解救”外卖骑手,美团首次公开算法规则!
- 亚马逊云服务(AWS)中国与毕马威中国建立战略合作伙伴关系
- 不会玩游戏的程序员不是好作家,《深入理解Java虚拟机》周志明来了!