包名:hibernate-conditions.jar

建网站原本是网站策划师、网络程序员、网页设计师等,应用各种网络程序开发技术和网页设计技术配合操作的协同工作。成都创新互联公司专业提供做网站、成都网站建设,网页设计,网站制作(企业站、响应式网站开发、电商门户网站)等服务,从网站深度策划、搜索引擎友好度优化到用户体验的提升,我们力求做到极致!
主要是扩展了hibernate的查询功能,该功能依赖于hibernate及hibernate相关包.
主要扩展了将一个变量注释成一个查询条件的功能,把整个对象当成一个未知的查询条件,交给解析器去解析.核心是几个注释的使用.下面解释这几个注释.
1. AsCondition 把一个变量注释成一个条件,该注释有两个最主要的字段,propertyName和symbol其中propertyName是指定要查询的hibernate实体的字段. symbol指明查询的操作比较符,即"=","< ",">"等操作.还有几个比较次要的字段: groupOrdinal 指定分组的序号,如果一个对象有多个查询条件,可以指定这些条件序号.可以在不要的查询过程中指定不同的查询序号.
ignoreNull 是否忽略null值,默认是忽略.如果不忽略null值,则在条件解析过程中遇到该查询条件的值为空,则将该条件解析为 "propertyName" is null
inherit 是否查询父类,默认是不查询父类.
2. AsAlias 查询集合,对应Criteria.createAlias()方法.只是里面有一个ignoreEmpty字段不同,该字段指定是否忽略集合为空,如果不忽略集合为空,则当该值为null的时候,解析后的查询条件为:集合 is empty
3. DesignatedProperty 该注释是用在被注释的是一个类,并指定该类中的一个属性作为查询条件的值.
4. Conversion 用于条件值的数据类型的转换.如:被查询条件值为Integter而被注释的变量为String,这时候就可以使用该注释把数据类型从String转换为Integter.除了通用类型的数据的转换还可以数据的类型的转换,把数据转换的类型ConversionType指定为Custom,注意,如果该属性指定为Custom则需要给出customDataConversionType的类型,该类型必须是继承DataConversion接口.如果没有指定,则不能进行任何的数据转换.
Conversion里还有一个属性throwDataConversionException,该属性指定如果数据转换异常,是否抛出异常,如果抛出异常则当次的查询会终止.如果出现异常但不抛出,则会忽略该查询条件.
使用也很简单:
创建一个AnnotationConditionParser对象,调用该对象的parser(Object...unkownConditionObject)方法可以指定未知道的条件实体,该方法被了接收被注释过的实体外还可以接收原来hibernate的查询条件和字符串的查询条件,如果是字符串的查询条件必须符合Criteria的查询格式,否则在hibernate解析时会有查询的异常.
AnnotationConditionParser对象中的groupLimit(int groupLimit)方法用于限定查询的分组,如果指定的分组则只解析属于该组的条件.
具体执行对条件的解析操作是createCriteria(DetachedCriteria criteria)方法,该方法把所有的条件解析成DetachedCriteria 的查询条件.接下来就是对DetachedCriteria 的操作了.由于DetachedCriteria 对象是hibernate的对象,该对象的用法相信大家比我还熟悉. 我在这里就不再解释了.
具体例子(只作为例子讲解,无法直接运行):
- public class ConditionTest {
 - /**
 - * @param args
 - */
 - public static void main(String[] args) {
 - ConditionTest test = new ConditionTest();
 - test.setName("my name");
 - test.setSize(10);
 - OtherClass other1 = new OtherClass();
 - other1.setName("name1");
 - test.setObjectCondition(other1);
 - OtherClass other2 = new OtherClass();
 - other2.setName("name1");
 - test.setOther(other2);
 - DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName("UserEntity");
 - new AnnotationConditionParser()
 - //限定查询的分组
 - .groupLimit(1)
 - //设置查询的实体对象
 - .parser(test)
 - //执行查询并填充DetachedCriteria对象
 - .createCriteria(detachedCriteria);
 - // ...
 - // 执行detachedCriteria对象的数据查询操作
 - }
 - //最简单的用法
 - @AsCondition(propertyName="size")
 - private int size;
 - @AsCondition(propertyName="name", symbol=Symbol.LIKE)
 - private String name;
 - //指定对象里的一个属性作为查询的条件
 - @AsCondition(propertyName="name")
 - @DesignatedProperty(propertyName="name")
 - private OtherClass objectCondition;
 - public int getSize() {
 - return size;
 - }
 - public void setSize(int size) {
 - this.size = size;
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public OtherClass getObjectCondition() {
 - return objectCondition;
 - }
 - public void setObjectCondition(OtherClass objectCondition) {
 - this.objectCondition = objectCondition;
 - }
 - public OtherClass getOther() {
 - return other;
 - }
 - public void setOther(OtherClass other) {
 - this.other = other;
 - }
 - //使用数据类型的转换
 - @AsCondition(propertyName="datetime", symbol=Symbol.NE, ignoreNull=true)
 - @DesignatedProperty(propertyName="name")
 - @Conversion(dataConversion=ConversionType.Custom, customDataConversionType=CustomTypeConversion.class)
 - private OtherClass other;
 - public static class OtherClass{
 - private String name;
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - }
 - public static class CustomTypeConversion implements DataConversion{
 - @Override
 - public Object doConversion(Object data) throws DataConversionException {
 - return Date.valueOf(data.toString());
 - }
 - }
 - }
 
                网页题目:扩展Hibernate的查询
                
                本文链接:http://www.csdahua.cn/qtweb/news5/185355.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网