SPL讲解(4)--Criteria操作篇
criteria使用总结(目前只会单表)
Criteria的使用总结1、目前只遇到用于单表查询(多表查询期待中。
)public Integer getqueryTamArchivesCount(String content, String fileNumber, String fileType, Date beginDate,Date endDate){DetachedCriteria criteria = DetachedCriteria.forClass(TamArch.class);if (content != null && content.trim().length() > 0) {//模糊匹配criteria.add(Restrictions.like("subject", "%" + content + "%"));}if (fileNumber != null && fileNumber.trim().length() > 0) { //相等criteria.add(Restrictions.eq("archivesNo", fileNumber));}if ("1".equals(fileType)) {//或者criteria.add(Restrictions.or(Restrictions.eq("archivesStatus", "1"), Restrictions.eq("archivesStatus", "2")));}else if("2".equals(fileType)){criteria.add(Restrictions.eq("archivesStatus", "99"));}if(beginDate!=null&&endDate!=null){//两者之间criteria.add(Restrictions.between("issueDate",beginDate,endDate));}//按日期降序排列criteria.addOrder(Order.desc("inputDate"));return archDao.getRowCount(criteria) ;}注意:①对于日期有点bug,如果查询的日期为空,则查询不到数据。
SPL用法介绍
目录一、数据库实体类、映射自动生成工具 (2)二、SmartPersistenceLayer之设计功能篇 (2)二、SmartPersistenceLayer 2.0 之基础设置篇 (6)三、SmartPersistenceLayer 2.0之实体操作篇 (16)四、SmartPersistenceLayer 2.0 之Criteria操作篇 (24)五、SmartPersistenceLayer 2.0 之事务处理篇 (30)六、SmartPersistenceLayer 2.0 之Condition篇 (34)七、SmartPersistenceLayer 2.0 之Query高级查询篇 (37)八、系统性能提升之道--内存镜像表 (40)九、SmartPersistenceLayer 3.1.0.0 之并发处理篇 (45)十、SmartPersistenceLayer 3.1(10) ---高级事务处理篇 (48)一、数据库实体类、映射自动生成工具SPL_Robot是作为SPL框架的一个辅助工具,不能算作SPL的核心,而且目前有很多朋友需要自己扩展数据库支持,因此决定把SPL_Robot的源码公开,目前公开的源码版本为3.1.0.4,可以支持Oracle、Sql Server、Access数据库,这样,万一在Robot生成过程中遇到错误也可以自行调试解决!!SPL_Robot代码生成器3.1.0.4源码下载:这里要维护SPL_Robot的扩展功能我个人实在是力不从心,所以更希望有网友们能一起来维护扩展SPL_Robot,要是有朋友对代码作了更新与修改,请在此帐后跟帐,说明:1、修改的内容2、在哪个版本号上作的修改3、修改后的版本号4、修改时间5、修改人我也在考虑采用CodeSmith来做SPL的实体代码生成,但精力有限,要是有熟悉CodeSmith 的朋友帮忙就最好了,有兴趣的朋友可以跟我联系!刚有位朋友进行了升级,如下(非常感谢这位网友):1:修改内容*修改生成的两个xml文件DatabaseMap.xml和ClassMap.xml文件格式为config类型,防止直接访问这两个文件造成数据库安全泄露。
criteria对象 逻辑运算查询
criteria对象逻辑运算查询一、引言在许多数据库应用中,我们经常需要使用查询语句来检索符合特定条件的数据。
Criteria对象是Hibernate等ORM框架提供的一种用于构建复杂查询的方法,它允许我们在实体类或映射文件中创建复杂的查询条件。
在本篇文章中,我们将介绍Criteria对象中逻辑运算查询的基本概念和用法。
二、基本逻辑运算符在Criteria对象中,我们通常使用AND、OR和NOT等逻辑运算符来组合查询条件。
这些运算符可以根据需要组合多个属性比较、集合比较、函数查询等操作符,从而构建复杂的查询语句。
以下是一些常用的逻辑运算符:* AND:表示两个条件都必须满足。
* OR:表示两个条件中至少有一个满足。
* NOT:表示否定一个条件。
三、示例查询以下是一个使用Criteria对象进行逻辑运算查询的示例:假设我们有一个User实体类,其中包含id、name和age三个属性。
我们想要查询年龄大于等于18岁且姓名包含“张”的所有用户。
```java// 创建Criteria对象Criteria criteria = session.createCriteria(User.class);// 添加条件:年龄大于等于18岁criteria.add(Property.ge("age", 18));// 添加条件:姓名包含“张”criteria.add(Property.like("name", "张%"));// 执行查询List<User> users = criteria.list();```在上述示例中,我们首先创建了一个Criteria对象,并使用add 方法添加了两个条件:年龄大于等于18岁和姓名包含“张”。
最后,我们使用list方法执行查询,并获取符合条件的User对象的列表。
四、多重条件查询在某些情况下,我们可能需要同时满足多个条件。
Criteria 使用指南
Criteria实际上只是个容器,如果想要设定查询条件,则要使用add()方法加入Restrictions的条件限制,例如查询age大于20且小于40的资料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();
您也可以使用逻辑组合来进行查询,例如结合age等于(eq)20或(or)age为空(isNull)的条件:
Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
其中alias将被替换为与User类别相关的名称,而?将被替换为cater%,也就是第二个参数所提供的值,在SQL撰写时,不必再写WHERE,如果有多个查询条件,例如BETWEEN子句的查询,则可以如下:
Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
我们也可以使用
cri.add(Restrictions.like(arg0, arg1));来进行模糊查询;
Restrictions的几个常用限定查询方法如下表所示:
方法 说明
Restrictions.eq 等于
criteria的一些示例语句或方法
Criteria的一些语句范例(方法)一、Criteria的一些基本查询Criteria有一个方法add(“限定条件”),这个方法可以添加限定条件,好得到自己应该要的查询结果;例如:有两个实体类,student和teacher已经有一个Criteria的关于Student 类的实例Criteria crit = session.createCriteria(Student.class);1)在一个班级中要查询姓“王”的学生都有谁,就可以这样:List list = crit.add(Restrictions.like(“name”,”王%”)).list();2)查询年龄在17-20之间的学生:List list = crit.add(Restrictions.between(“age”,new Integer(17),new Integer(20))).list();3)查询没有手机号码的学生:List list = crit.add(Restrictions.isNull(tel)).list();4)查询90后的学生:List list = crit.add(Restrictions.ge(new Date(1990-01-01)).list();5)查询考试分数在前十名的学生(可用于分页查询):List list = crit.addOrder(Order.desc(“grades”)).setFirstResult(0).setMaxResult(10).list();6)查询学生小明的个人信息:crit.add(Restriction.eq(“name”,”小明”)).list().iterator().next();7)查询小明的化学教师的信息:crit.add(Restricrions.eq(“name”,”小明”)).createCriteria(“teacher_id”).add(Restrictions.equ(“subject”,”化学”)).list().iterator().next();8)以上都是先创建session根据session得到Criteria的实体对象(即在线查询),下面来看看离线查询,离线查询用的是DetachedCriteria类,DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的Session来执行它。
criteria用法java
criteria用法java在Java中,"criteria"可以有不同的用法,具体取决于上下文和所使用的库或框架。
一般来说,"criteria"是指用于定义查询条件的对象或接口。
一种常见的使用情况是在Java持久层框架(如Hibernate)中使用"criteria"来创建查询。
在这种情况下,"criteria"可以作为一个类似于查询构造器的对象,用于动态地构建查询条件,以便从数据库中检索特定的数据。
这些查询条件可以包括等于、不等于、大于、小于等关系运算符,以及与、或等逻辑运算符。
通过使用"criteria",可以以一种灵活的方式生成查询,并且不需要直接编写SQL语句。
以下是一个简单的示例,展示了如何在Hibernate中使用"criteria"来创建查询条件:```//创建一个Criteria对象Criteria criteria =session.createCriteria(YourEntity.class);//添加查询条件criteria.add(Restrictions.eq("fieldName", value));//执行查询List results = criteria.list();```上述示例中,我们首先通过`session.createCriteria()`方法创建一个Criteria对象,然后使用`criteria.add()`方法添加一个查询条件,该条件是指字段`fieldName`等于特定值`value`。
最后,我们通过`criteria.list()`方法执行查询,并将结果以列表的形式返回。
除了上述示例中演示的用法,不同的持久层框架和库可能还提供其他用于"criteria"的方法和功能,以满足不同的查询需求。
SPL讲解(3)--实体操作篇
SmartPersistenceLayer 2.0之实体操作篇通过上一篇的”设置篇”后,在我们的系统中就可以开始使用SPL的强大功能了,这一节我主要是介绍SPL的实体(Entity)操作。
原理SPL中的实体可能与其他PL的实体有所区别,一般如果从理论上讲的话,实体仅仅是数据的属性描述,不应该带有操作方法,这种方式也存在一种缺点,就是实体没有了操作,只能借助”辅助类”进行实体的操作,而这种操作势必不能是强类型的,而且开发员可能无法彻底站在面向对象的角度开发系统,因此,SPL中采用了实体中集成部分常用操作,即Insert,Update,Delete,Retrieve操作,这样当我们要对实体进行操作时,可以直接调用实体的这些方法,实现强类型的操作控制。
为了让SPL能自动实现这种功能,实体(Entity)要继承SPL中的EntityObject抽象类,如:Public class StudentEntity : EntityObject这样,这个实体就自动具有了Save(),Retreve(),Delete()的功能。
实体操作实体的常用操作为新增(Insert)、更新(Update)、删除(Delete) 、获取(Retrieve),在SPL 中体现为Save(),Delete(),Retrieve()这三个方法,Save()会自动判断实体是否已经持久化(IsPersistence)来进行Insert和Update区分。
下面我还是以上一篇”基础设置篇”中的例子来演示:实体的XML定义如下:<class name="StudentEntity"table="Student"database="MyDB"><attribute name="Id"column="Id"type="Integer" increment="true"key="primary"/><attribute name="No"column="No"type="String"key="primary"/><attribute name="Name"column= StudentEntity "Name"type="String"/><attribute name="Birthday"column="Birthday"type="Date"/><attribute name="Grade"column="Grade"type="Integer"/><attribute name="Score"column="Score"type="Decimal"/></class>实体类如下:内容略,请参照”基础设置篇”namespace BusinessEntity{using System;using System.Collections;using System.Data;using PersistenceLayer;public class StudentEntity : EntityObject{//常量定义部分…//局部变量定义部分…//属性定义部分…}}实体新增:以往的编程模式中,要往数据库的某表中插入一条记录,有人采用SQL语句执行,这要注意SQL语句的正确性,单引号问题(要使用string.replace(“’”,”’’”)进行替换);还有可以采用Command的Parameter的方式,这样就可以避免单引号问题;还有人为了提高性能会采用存储过程,那么这些过程都会影响开发的速度,在SPL中我们的过程变的相当简单了:StudentEntity student=new StudentEntity(); //实体化一个学生对象//以下进行属性赋值//student.Id=1; //此为自动增长,SPL会自动获取student.No=”200401”;=”张三”;student.Birthday=DateTime.Parse(“1979-01-22”);student.Grade=2;student.Score=580;try{ student.Save(); //实体保存}catch(PlException exp) //抛出异常{if(exp.ErrorType==ErrorTypes.NotUnique) //如果是主键冲突{Response.Write(“主键冲突”);}elsethrow exp;}步骤分析:1.直接New一个实体对象,给对象属性赋值2.然后Save(),如果发生主键冲突,则可以通过catch PersistenLayer.PlException异常来处理,判断是否为PersistenceLayer.ErrorTypes.NotUnique,这样就可以完成新增记录。
浅谈DetachedCriteria和Criteria的使用方法(必看)
浅谈DetachedCriteria和Criteria的使⽤⽅法(必看)在常规的Web编程中,有⼤量的动态条件查询,即⽤户在⽹页上⾯⾃由选择某些条件,程序根据⽤户的选择条件,动态⽣成SQL语句,进⾏查询。
⽐如,我记得在Facebook中可以选择⾼级查询条件,这个就是个动态的查询了塞,我们⽆法预知使⽤多少个查询,直接书写死了在我们的Dao层显然是不服和我们的意思的塞针对这种需求,对于分层应⽤程序来说,Web层需要传递⼀个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句。
这⾥的⼀个难点是条件列表⽤什么来构造?传统上使⽤Map,但是这种⽅式缺陷很⼤,Map可以传递的信息⾮常有限,只能传递name和value,⽆法传递究竟要做怎样的条件运算,究竟是⼤于,⼩于,like,还是其它的什么,业务层对象必须确切掌握每条entry的隐含条件。
因此⼀旦隐含条件改变,业务层对象的查询构造算法必须相应修改,但是这种查询条件的改变是隐式约定的,⽽不是程序代码约束的,因此⾮常容易出错。
DetachedCriteria可以解决这个问题,即在web层,程序员使⽤DetachedCriteria来构造查询条件,然后将这个DetachedCriteria作为⽅法调⽤参数传递给业务层对象。
⽽业务层对象获得DetachedCriteria之后,可以在session范围内直接构造Criteria,进⾏查询。
就此,查询语句的构造完全被搬离到web层实现,⽽业务层则只负责完成持久化和查询的封装即可,与查询条件构造完全解耦,⾮常完美!Criteria 和 DetachedCriteria 的主要区别在于创建的形式不⼀样, Criteria 是在线的,所以它是由 Hibernate Session 进⾏创建的,⽽ DetachedCriteria 是离线的,创建时⽆需Session .DetachedCriteria的创建DetachedCriteria 提供了 2 个静态⽅法,进⾏DetachedCriteria 实例的创建。
excel criteria 用法
excel criteria 用法Excel的条件筛选函数(criteria)用法条件筛选是Excel中一个常用的功能,一种简单而有效的方式是使用条件筛选函数(criteria)来筛选数据。
条件筛选函数根据用户提供的条件(如数值、文本、日期等)来筛选和提取数据,帮助用户快速分析和处理数据。
下面将详细介绍Excel条件筛选函数的用法。
1. COUNTIF函数:COUNTIF函数用于统计满足指定条件的单元格数量。
它的基本语法为COUNTIF(range, criteria),其中range是要进行统计的区域,criteria是要筛选的条件。
例如,假设我们有一个包含学生考试成绩的数据表格,要统计大于等于60分的学生数量,可以使用COUNTIF函数:=COUNTIF(A2:A10, ">=60")这个公式将统计A2到A10单元格区域中大于等于60的单元格数量。
2. SUMIF函数:SUMIF函数用于根据指定条件对指定区域的单元格进行求和。
它的基本语法为SUMIF(range, criteria, sum_range),其中range是要进行筛选的区域,criteria是要筛选的条件,sum_range是要进行求和的区域。
例如,假设我们需要计算出所有英语成绩大于等于60分的学生总分,可以使用SUMIF函数:=SUMIF(A2:A10, ">=60", B2:B10)这个公式将对A2到A10单元格区域中大于等于60的英语成绩进行求和。
3. AVERAGEIF函数:AVERAGEIF函数用于根据指定条件计算指定区域的单元格平均值。
它的基本语法为AVERAGEIF(range, criteria, average_range),其中range是要进行筛选的区域,criteria是要筛选的条件,average_range是要进行计算平均值的区域。
例如,假设我们需要计算出所有数学成绩大于等于60分的学生的平均成绩,可以使用AVERAGEIF函数:=AVERAGEIF(A2:A10, ">=60", B2:B10)这个公式将对A2到A10单元格区域中大于等于60的数学成绩进行求平均值。
criteriaquery 位运算
criteriaquery 位运算摘要:1.位运算概述2.位运算的种类3.位运算的应用实例4.criteriaquery 的位运算功能正文:1.位运算概述位运算,又称为逻辑运算,是一种基于二进制位进行的数学运算。
在计算机科学中,位运算广泛应用于各种算法和数据结构中,它具有操作简单、效率高、资源占用少等优点。
位运算主要包括按位与、按位或、按位异或、按位非、位左移和位右移等几种。
2.位运算的种类(1)按位与(AND):对应位上都为1 时,结果为1,否则为0。
(2)按位或(OR):对应位上至少有一个为1 时,结果为1,否则为0。
(3)按位异或(XOR):对应位上相同时,结果为0,不同时结果为1。
(4)按位非(NOT):对应位为1 时,结果为0,对应位为0 时,结果为1。
(5)位左移:将二进制数的各位向左移动指定位数,右侧空出的位用0 填充。
(6)位右移:将二进制数的各位向右移动指定位数,左侧空出的位用0 填充。
3.位运算的应用实例位运算在实际应用中有很多场景,例如:(1)加密和解密:利用位运算的特性进行数据的加密和解密。
(2)数据压缩:利用位运算对数据进行压缩,减少存储空间。
(3)位域处理:对二进制数中的某一位或几位进行操作。
4.criteriaquery 的位运算功能criteriaquery 是一个用于构建查询条件的库,它可以帮助我们方便地编写各种查询语句。
在criteriaquery 中,位运算主要应用于对查询条件中的二进制数进行操作,例如:(1)根据某个二进制位的值判断是否满足条件。
(2)对二进制数进行位运算,得到新的条件。
(3)结合其他查询条件,进行复合查询。
总之,位运算作为计算机科学中的一种基本运算,其在criteriaquery 中的应用使得我们可以更加灵活地编写查询条件,提高查询效率。
criteria语法
criteria语法
Criteria语法是一种用于数据库查询的语句结构,它可以让我们轻松地查询数据库中存储的信息。
通过使用Criteria语法,我们可以在不写任何SQL语句的情况下轻松地查询数据库中的信息。
Criteria语法的基本结构包含三个部分:选择(Select)、条件(Where)和排序(Order By)。
在选择部分,我们可以列出需要查询的列名;在条件部分,我们可以指定一些限定条件,以过滤出满足条件的记录;在排序部分,我们可以按照指定的列名将结果按照升序或者降序排列。
在Criteria语法中,我们还可以使用一些常见的运算符,例如等于(=)、大于(>)、小于(<)、不等于(!=)等,以更精细地指定查询条件。
另外,我们还可以使用通配符(%)来进行模糊匹配,以便查询所有符合条件的记录。
除此之外,Criteria语法还支持多表查询,即同时查询多张相关联的数据库表。
通过使用关键字JOIN和ON,我们可以将不同的表连接起来,以获取更加详尽的信息。
总之,Criteria语法是一个非常实用的工具,可以让我们在数据库查询中更加高效和方便。
通过掌握Criteria语法的基本结构和常用运算符,我们可以轻松地对数据库中的信息进行查询、筛选和排序,从而更好地管理和利用数据库中的数据资源。
使用criteria进行多条件查询
使用criteria进行多条件查询在数据库查询中,我们经常需要根据多个条件来获取所需的数据。
为了实现这一目的,我们可以使用criteria进行多条件查询。
Criteria是一种用于构建数据库查询条件的API。
它提供了一种面向对象的方式来创建和组合查询条件,以便从数据库中检索满足特定条件的数据。
在使用criteria进行多条件查询时,我们首先需要创建一个Criteria对象,并指定要查询的实体类。
然后,我们可以使用Criteria 对象的方法来设置查询条件。
以下是一个使用criteria进行多条件查询的示例:```java// 创建一个Criteria对象并指定要查询的实体类Criteria criteria = session.createCriteria(Employee.class);//设置查询条件criteria.add(Restrictions.eq("department", "IT")); // 查询部门为IT的员工criteria.add(Restrictions.gt("salary", 5000)); // 查询工资大于5000的员工//执行查询List<Employee> employees = criteria.list(;//输出查询结果for (Employee employee : employees)System.out.println(employee.getName( + " - " +employee.getDepartment( + " - " + employee.getSalary();```在上面的示例中,我们创建了一个Criteria对象,并指定要查询的实体类为Employee。
然后,我们使用Criteria对象的add(方法来设置查询条件。
elasticsearch criteria用法
elasticsearch criteria用法Elasticsearch是一个开源的分布式搜索和分析引擎,它以高效的方式存储、检索和分析大量的数据。
作为一个功能强大的搜索引擎,Elasticsearch提供了丰富的查询功能,其中之一就是使用criteria(条件)来过滤和匹配数据。
在本文中,我们将深入探讨Elasticsearch的criteria用法,并一步一步回答相关问题。
一、什么是criteria?在Elasticsearch中,criteria是一种查询语句,用于筛选和匹配满足特定条件的数据。
它由一组键值对组成,每个键值对表示一个条件。
通过指定不同的条件,我们可以对数据进行高级过滤和搜索。
二、criteria的基本语法在Elasticsearch中,criteria使用查询体(query)来定义。
以下是一个基本的criteria语法示例:{"query": {"bool": {"must": [{"term": {"field1": "value1"}},{"range": {"field2": {"gte": "value2","lte": "value3"}}}],"must_not": [{"term": {"field3": "value4"}}]}}}上述示例中,我们使用了bool查询体来组合多个条件。
must表示所有条件都必须满足,而must_not表示条件不能满足。
我们可以在must或must_not数组中添加一个或多个condition来定义具体的条件。
三、criteria的常见类型1. term查询:term查询是用于完全匹配某个字段值的条件。
java criteria的用法
java criteria的用法Java Criteria是Java Persistence API (JPA) 提供的一个查询API,旨在简化数据库查询操作。
它能够以一种类型安全且面向对象的方式编写查询语句,而无需编写原始的SQL语句。
使用Java Criteria能够提供更灵活、可维护和可读性更高的代码,以下是Java Criteria的用法:1. 创建CriteriaBuilder对象:首先,我们需要创建一个CriteriaBuilder对象,它是创建CriteriaQuery和定义查询条件的工厂类。
```javaCriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();```2. 创建CriteriaQuery对象:接下来,使用CriteriaBuilder对象创建CriteriaQuery对象,并指定查询的返回结果类型。
```javaCriteriaQuery<Entity> criteriaQuery = criteriaBuilder.createQuery(Entity.class);```3. 定义查询条件:在CriteriaQuery对象中,我们可以通过CriteriaBuilder对象来定义查询条件。
常用的查询条件方法包括equal、notEqual、like、between等。
```javaRoot<Entity> root = criteriaQuery.from(Entity.class);criteriaQuery.select(root).where(criteriaBuilder.equal(root.get("columnName"), value));```4. 执行查询:最后,我们可以使用EntityManager对象来执行查询,并获取查询结果。
普元criteria or用法
普元criteria or用法摘要:1.普元criteria 的定义与作用2.普元criteria 的语法与使用方式3.普元criteria 的实际应用案例正文:一、普元criteria 的定义与作用普元criteria(普元准则)是一种在数学、逻辑以及计算机科学中广泛应用的概念,它主要用于描述或约束一个公式或表达式的取值范围。
简单来说,普元criteria 就是一个判断条件,它用来判断一个给定的值是否满足特定的要求。
在各种领域中,普元criteria 都发挥着重要作用,例如在编程中,它可以帮助我们编写更加高效、灵活的代码。
二、普元criteria 的语法与使用方式普元criteria 的语法相对简单,它主要包括两个部分:一个是条件表达式,另一个是结论。
条件表达式用来描述特定的条件,而结论则表示在满足这些条件时,应该执行的操作或满足的性质。
在数学中,普元criteria 通常表示为全称量词和存在量词的组合,例如:对于所有的x,如果x 大于0,则x 的平方大于0。
在计算机科学中,普元criteria 通常使用逻辑运算符(如AND、OR、NOT 等)来组合条件表达式。
使用普元criteria 时,我们需要注意以下几点:1.条件表达式应该清晰、简洁地描述所要约束的条件;2.结论应该明确、简洁地表示在满足条件时,应该执行的操作或满足的性质;3.在组合多个条件表达式时,需要使用适当的逻辑运算符。
三、普元criteria 的实际应用案例普元criteria 在实际应用中具有广泛的应用,下面我们通过一个编程案例来说明如何使用普元criteria:假设我们需要编写一个函数,该函数接受一个整数数组,并返回数组中所有元素的平方和。
我们可以使用普元criteria 来描述这个函数的输入和输出关系:1.输入:一个整数数组,数组中的元素可以是负数、零或正数;2.输出:数组中所有元素的平方和,结果应该是一个非负数;3.条件:数组中的元素可以是任意整数。
mybatis中criteria的用法
mybatis中criteria的用法MyBatis是一个开源的Java持久化框架,它允许开发人员通过简单的XML或注解来配置SQL映射,从而实现数据库访问操作。
在MyBatis中,Criteria是一种用于构建动态查询条件的方式。
使用Criteria可以方便地构建复杂的查询条件,而不需要编写繁琐的SQL语句。
以下是在MyBatis中使用Criteria的一般步骤:1. 创建Criteria对象:```Example example = new Example(User.class);Example.Criteria criteria = example.createCriteria();```在上述代码中,我们创建了一个Example对象,并通过该对象创建了一个Criteria对象,用于添加查询条件。
2. 添加查询条件:```criteria.andEqualTo("name", "John").andGreaterThan("age", 25);```在这个例子中,我们使用`andEqualTo`方法来添加等于条件,使用`andGreaterThan`方法来添加大于条件。
你可以根据自己的需求使用不同的方法,如`andLike`、`andBetween`等。
3. 执行查询:```List<User> userList = userDao.selectByExample(example);```在上述代码中,我们使用`selectByExample`方法执行查询操作。
该方法接受一个Example对象作为参数,并返回满足条件的实体对象列表。
使用MyBatis的Criteria可以简化复杂查询的编写,使代码更加清晰易懂。
通过以上步骤,我们可以灵活地构建不同的查询条件,以满足实际需求。
总结:MyBatis中的Criteria提供了一种方便的方式来构建动态查询条件。
mybatis criteria的用法
mybatis criteria的用法MyBatis的Criteria用于构建动态SQL查询条件,通过代码方式来拼接查询条件,使得查询操作更加灵活和可维护。
Criteria可以通过建立Criteria对象,并使用其提供的方法来组合查询条件。
使用MyBatis的Criteria进行查询时,通常需要进行以下步骤:1.创建Criteria对象:通过调用`example.createCriteria()`方法创建一个Criteria对象。
2.添加查询条件:通过调用Criteria对象的方法,例如`andXxx`、`orXxx`等来添加查询条件。
3.设置查询条件:在添加查询条件后,可以使用`example.setOrderByClause`方法来设置排序规则。
4.执行查询:通过调用`mapper.selectByExample(example)`方法来执行查询操作。
以下是一个示例:```javaExample example = new Example(User.class);Criteria criteria = example.createCriteria();criteria.andEqualTo("username", "admin");criteria.andGreaterThan("age", 18);example.setOrderByClause("create_time desc");List<User> userList = userMapper.selectByExample(example);```上述示例中,通过创建Example对象和Criteria对象,并使用其提供的方法来添加查询条件。
最后通过调用`userMapper.selectByExample(example)`方法来执行查询操作。
SPL讲解(4)--Criteria操作篇
SmartPersistenceLayer 2.0 之Criteria操作篇概念以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的。
如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和Delete,为此,在SPL引进了Criteria(标准)的概念,那么在SPL中设计了三种Criteria:RetrieveCriteria(获取标准)这个标准是根据查询条件,排序方式来获取满足条件的数据,可以以DataTable 、实体集的方式来返回。
此标准会生成”Select * from TB where … order …”语句执行UpdateCriteria (更新标准)这个标准是根据条件对一个表进行批量更新,最终会生成”Update TB set …where ..”语句执行DeleteCriteria(删除标准)这个标准是根据条件对一个表进行批量删除,最终会生成”Delete from TB where …”语句执行这些标准都是针对单一实体,也就是针对一个表的操作,当然对于Update和Delete来说,这些操作已经足够了,可对于Select来说,我们经常会多表查询,所以,关于这种联合查询将会在下一篇的”高级查询篇”中讲解。
RetrieveCriteria 获取标准这个RetrieveCriteria是针对单一实体的查询,可以定义查询条件,排序方式并以不同的结果返回出来,下面我举一个例子:我们查询二年级的姓刘的学生,并以学号升序排RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity)); //实例化Condition c=rc.GetNewCondition(); //实例化一个条件c.AddEqualTo(StudentEntity.__GRADE,2); //二年级条件c.AddMatchPrefix(StudentEntity.__Name,’刘’); //匹配’刘’字开头c.OrderBy(StudentEntity.__NO); //按学号排DataTable dt=rc.AsDataTable() ; //以DataTable方式返回步骤分析:1.实例化一个RetrieveCriteria时要指明是哪个实体类,使用“typeof(实体类名)”2.New一个Condition(条件),可以使用此方法New出多个Condition,多个Condition之间是”OR”的关系3.给Condition指定条件,比如使用AddEqualTo(相等)、AddMatchPrefix(前匹配),关于Condition将会专门进行介绍4.使用OrderBy()方法指定排序方式,默认为升序,如果要以降序排序使用:OrderBy(StudentEntity.__NO,false)5.最后以AsDataTable的方式返回DataTable,这可以方便进行DataGrid的数据绑定多种返回方式例子中是采用DataTable进行返回,这也是平时最常用的,SPL中还提供了其他的几种方式:EntityContainer 实体集这是指返回结果以实体的集合方式体现,对于实体集的操作是非常简单的:EntityContainer ec=rc.AsEntityContainer();for(int i=0;i<ec.Count;i++){StudentEntity student=(StudentEntity)ec[i];…..//得到实体后可以进行自己的操作}ObjectCursor 游标SPL也提供游标的方式返回,这与实体集是差不多的概念,这是对原版本的兼容保留:ObjectCursor oc=rc.AsObjectCursor();if(oc.HasObject()){StudentEntity student=(StudentEntity)oc.NextObject();…. //得到实体后可以进行自己的操作}在以游标返回后,进行操作前,一定要以HasObject()进行判断,以免抛出异常EntityObject 单实体SPL在 2.0中增加了以EntityObject单实体的返回方式,大家觉得奇怪了,RetrieveCriteria是返回多记录的,这个单实体是何意了。
条件类Criteria的用法
复合查询主要是处理,具有关联关系的两个实体怎样进行关联查询,比如User 实体对象与Addres实体对象具有一对多的关联关系,我们可以如下构造符合查询:Criteria criteria=session.createCriteria(User.class);Criteria addcriteria=criteria.createCriteria(“addresses”);(1)addcriteria.add(Express.like(“address”,”%tianjin%”));List list=criteria.list();for(int i=0;iUser user=(User)list.get(i);System.out.println(user.getName()+”\n”);Set addresses=user.getAddresses();Iterator it=addresses.iterator();while(it.hasNext(){Address address=(Address)it.next();Syste m.out.println(address.getAddress()+”\n”);}}当执行到了(1)处时,表明要针对User对象的addresses属性添加新的查询条件,因此当执行criteria.list()时,Hibernate会生成类似如下的SQL语句:Select * from user inner join address on user.id=address.id where address.address like …%shanghai%‟;正如我们所见,我们可以通过向Criteria中添加保存关联对象的集合属性(addresses属性保存与User对象相关联的Address对象),来构造复合查询,在数据库一端是通过内连接查询来实现。
Hibernate QBC查询QBC查询:QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。
SPL快速入门
SmartPersistenceLayer 3 快速入门前言SmartPersistenceLayer(SPL)自在博客园发布开始,就一直受到广大朋友的认可,那一套SPL的系列文档对SPL的使用与功能以及原理都作了充分的介绍,而这些系列文章有利于大家理解SPL的思想,将作为一个优秀的.NET系统框架持久层。
而那些文章由于比较分散,而且论述了一些架构思想,对一些初学者感觉有些困难,也应大家的要求,写一份简单的,实用的SPL应用手册,所以我接下来从实际场景模拟开发。
一、引用SPL的发布形式是一个名为PersistenceLayer.Dll的DLL文件,可以在我的BLOG(/tintown/)上下载,因此只需要在项目中“添加引用”即可:若要使用连接Oracle数据库,则用以上方式添加Oracle.DataAccess.dll若要使用SPL连接MySql数据库,则用以上方式添加MySql.Data.dll二、配置文件与实体类SPL的配置文件与实体类可以使用我提供的SmartRobot进行生成,这可以大大加快开发效率,但工具毕竟是工具,不属于SPL持久层的必选部分。
连接数据库:目前SmartRobot支持Ms Sql Server、Ms Access、Oracle数据库,如果是其他数据库只能只好手写实体类了或者等我升级喽;)确定好要生成的实体类存放的地址,到时生成时会生成到相应的目录里。
配置每个表对应的实体类属性,默认实体类名称为“表名”加“Entity”字符,属性名默认与列名相同,上图中的“2”“3”操作对每个表都要重复一次的。
这时就会生成勾上的实体类到指定的目录下了。
只要把指定的实体类引用到项目中即可,实体类默认使用的是BusinessEntity命名空间。
因此在开发时,只要用到实体类的地方使用:using BusinessEntity就可以了。
保存两个配置文件,放到你的项目中:ClassMap.xml与DatabaseMap.xml ClassMap.xml为数据库表与实体类的映射关系DatabaseMap.xml为数据库连接配置:Ms Sql Server例如下:<database name="Northwind"type="MsSqlServer"><parameter name="Provider"value="SQLOLEDB.1"/><parameter name="Password"value="tintown"/><parameter name="Initial Catalog"value="Northwind"/><parameter name="User ID"value="sa"/><parameter name="Data Source"value="(local)"/><classMapFile path="ClassMap.xml"/></database>Ms Access例如下:<database name="DMBCN"type="MsAccess"><parameter name="Provider"value="Microsoft.Jet.OLEDB.4.0"/><parameter name="Data Source"value="dmbcn.mdb"/><classMapFile path="ClassMap.xml"/></database>Oracle例如下:<database name="EDI"type="Oracle"><parameter name="Provider"value="MSDAORA.1"/><parameter name="Password"value="tintown"/><parameter name="User ID"value="EDI"/><parameter name="Data Source"value=""/><classMapFile path="ClassMap.xml"/></database>方式连接Oracle例如下:<database name="Acci2004"type="ODP"><parameter name="Password"value="tintown"/><parameter name="User ID"value="acci"/><parameter name="Data Source"value="oradb"/><parameter name="Persist Security Info"value="False"/><classMapFile path="ClassMap.config"/></database>MySql数据库例如下:<database name="MySql"type="MySql"><parameter name="User Id"value="root"/><parameter name="Data Source"value="localhost"/><parameter name="Database"value="mysql"/><parameter name="password"value="tintown"/><classMapFile path="ClassMap.xml"/></database>ClassMap.xml的地址是相对于DatabaseMap.xml地址的,象例子中都是放在同一目录下,所以直接使用文件名即可.如果是连接多数据库,则可以配置多个<database>节如:<?xml version="1.0"encoding="utf-8"?><map><database name="Northwind"type="MsSqlServer"><parameter name="Provider"value="SQLOLEDB.1"/><parameter name="Password"value="tintown"/><parameter name="Initial Catalog"value="Northwind"/><parameter name="User ID"value="sa"/><parameter name="Data Source"value="(local)"/><classMapFile path="ClassMap.xml"/></database><database name="MySql"type="MySql"><parameter name="User Id"value="root"/><parameter name="Data Source"value="localhost"/><parameter name="Database"value="mysql"/><parameter name="password"value="tintown"/><classMapFile path="ClassMap2.xml"/></database></map>所示为同时连接Ms Sql Server数据库与MySql数据库三、初始化数据连接在页面的Page_Onload中使用如下进行初始化(假设DatabaseMap.xml放在Config目录下):string DatabaseXml="Config/DatabaseMap.xml";PersistenceLayer.Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml);以上的初始化只需要执行一次即会放在应用项目中,但Web会经常性的丢失Application,导致初始信息丢失,因此在每次执行数据库操作前都最好能进行初始化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SmartPersistenceLayer 2.0 之Criteria操作篇概念以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的。
如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和Delete,为此,在SPL引进了Criteria(标准)的概念,那么在SPL中设计了三种Criteria:RetrieveCriteria(获取标准)这个标准是根据查询条件,排序方式来获取满足条件的数据,可以以DataTable 、实体集的方式来返回。
此标准会生成”Select * from TB where … order …”语句执行UpdateCriteria (更新标准)这个标准是根据条件对一个表进行批量更新,最终会生成”Update TB set …where ..”语句执行DeleteCriteria(删除标准)这个标准是根据条件对一个表进行批量删除,最终会生成”Delete from TB where …”语句执行这些标准都是针对单一实体,也就是针对一个表的操作,当然对于Update和Delete来说,这些操作已经足够了,可对于Select来说,我们经常会多表查询,所以,关于这种联合查询将会在下一篇的”高级查询篇”中讲解。
RetrieveCriteria 获取标准这个RetrieveCriteria是针对单一实体的查询,可以定义查询条件,排序方式并以不同的结果返回出来,下面我举一个例子:我们查询二年级的姓刘的学生,并以学号升序排RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity)); //实例化Condition c=rc.GetNewCondition(); //实例化一个条件c.AddEqualTo(StudentEntity.__GRADE,2); //二年级条件c.AddMatchPrefix(StudentEntity.__Name,’刘’); //匹配’刘’字开头c.OrderBy(StudentEntity.__NO); //按学号排DataTable dt=rc.AsDataTable() ; //以DataTable方式返回步骤分析:1.实例化一个RetrieveCriteria时要指明是哪个实体类,使用“typeof(实体类名)”2.New一个Condition(条件),可以使用此方法New出多个Condition,多个Condition之间是”OR”的关系3.给Condition指定条件,比如使用AddEqualTo(相等)、AddMatchPrefix(前匹配),关于Condition将会专门进行介绍4.使用OrderBy()方法指定排序方式,默认为升序,如果要以降序排序使用:OrderBy(StudentEntity.__NO,false)5.最后以AsDataTable的方式返回DataTable,这可以方便进行DataGrid的数据绑定多种返回方式例子中是采用DataTable进行返回,这也是平时最常用的,SPL中还提供了其他的几种方式:EntityContainer 实体集这是指返回结果以实体的集合方式体现,对于实体集的操作是非常简单的:EntityContainer ec=rc.AsEntityContainer();for(int i=0;i<ec.Count;i++){StudentEntity student=(StudentEntity)ec[i];…..//得到实体后可以进行自己的操作}ObjectCursor 游标SPL也提供游标的方式返回,这与实体集是差不多的概念,这是对原版本的兼容保留:ObjectCursor oc=rc.AsObjectCursor();if(oc.HasObject()){StudentEntity student=(StudentEntity)oc.NextObject();…. //得到实体后可以进行自己的操作}在以游标返回后,进行操作前,一定要以HasObject()进行判断,以免抛出异常EntityObject 单实体SPL在 2.0中增加了以EntityObject单实体的返回方式,大家觉得奇怪了,RetrieveCriteria是返回多记录的,这个单实体是何意了。
我们有时候会遇到一种情况,通过”侯选主键”来进行查询,所谓”侯选主键”就是非主键,但可以确定也是唯一的,比如学生表中的学号,但在数据表中学号不是主键,不能用Entity自动的Retrieve()方式来获取,而要使用RetrieveCriteria获取,所以可以确信是唯一记录的,可以使用单实体返回:EntityObject eo=rc.AsEntity();if(eo!=null){StudentEntity student=(EntityObject)eo;…. //得到实体后可以进行自己的操作}其实这种方式是取第一条信息并自动转换成EntityObject方式了,所以如果是多条记录的话,用这种可以取到第一个实体。
TOP功能在SPL2.0中增加了Top功能,我们只要使用:RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity));rc.Top=20;这样就会只返回符合条件的前20条目前此功能只支持SQL、ACCESS,因为这是使用”Select top n…”的语句,而ORACLE的TOP功能比较麻烦,尤其是在排序后进行前N条返回,由于时间与测试环境问题,一直没有对ORACLE支持。
多帐套功能这也是SPL2.0的新增功能,只要指定数据源名就可以,有两种方式:RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity),”DB2”);或者:RetrieveCriteira rc=new RetrieveCriteria(typeof(StudentEntity)):rc.DatabaseName=”DB2”;这样就可以对指定的数据源进行操作,而不是默认数据源。
其他Clear()方法可以清除所有的ConditionSqlString属性可以返回执行的标准SQL语句同样支持内存存储,这对开发员是透明的,只要实体在XML文件中声明为IsSaveToMemory=trueUpdateCriteria 更新标准更新标准是针对单一实体根据条件进行批量更新,下面我举个例子:把所有二年级的学生升级为三年级UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity)); //实例化Condition c=uc.GetNewCondition(); //实例化一个条件c.AddEqualTo(StudentEntity.__GRADE,2); //指定二年级的学生c. AddAttributeForUpdate(StudentEntity.__GRADE,3); //更新为三年级try{int re=uc.Perform(); //执行,返回影响条数if(re>0) //如果影响了数据库Response.Write(“更新影响了”+re.ToString()+”条记录”);else //未影响数据库Response.Write(“没有更新记录”);}carth(PlException exp) //捕捉异常{if(exp.ErrorType==ErrorTypes.RestrictError) //如果是级联更新约束异常Response.Write(“遇到级联更新约束异常”); //友好提示elsethrow exp; //抛出异常}步骤分析:1.实例化一个UpdateCriteria时也要指明是哪个实体类型的2.创建一个Condition,同样可以New多个Condition,Condition之间是“OR”的关系3.使用AddAttributeForUpdate(字段名,值)来指定要把某字段更新为某值,可以Add多个,由于时间问题,目前SPL2.0还不支持“字段之间更新”4.调用Perform()执行,会返回影响条数,如果没有AddAttributeForUpdate,即没有设定要更新的列,那么返回05.在招待中会抛出级联约束异常,可以捕捉后进行友好提示多帐套功能更新标准也支持多帐套功能,使用方式与RetrieveCriteria类似:UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity),”DB2”);或者:UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity));uc.DataBaseName=”DB2”;这样就可以在指定的数据源里更新数据了。
SqlString属性可以返回执行的SQL语句,以便调试语句。
支持内存存储,也就是如果实体为内存存储的,那么在执行Update后,会自动更新内存,对开发员透明支持事务处理DeleteCriteria 删除标准删除标准是根据条件对数据表进行批量删除,值得提醒的话,这个标准使用要非常谨慎,利用不当误删除数据的。
例如:要删除所以四年级的学生DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity));Condition c=dc.GetNewCondition();c.AddEqualTo(StudentEntity.__GRADE,4);try{int re=dc.Perform();if(re>0)Response.Write(“成功删除”+re.ToString()+”条记录”);elseResponse.Write(“没有删除记录”);}catch(PlException exp){if(exp.ErrorType==ErrorTypes. RestrictError)Response.Write(“遇到级联删除约束异常”);elsethrow exp;}步骤分析:1.实例化删除标准,需要指定实体类型2.创建删除条件,可以New多个条件,也是“OR”的关系3.调用Perform()执行,返回影响条数4.捕捉级联删除约束异常,友好提示多帐套功能这与其他的标准一样,有两种方式:DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity),”DB2”);或者:DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity));dc.DatabaseName=”DB2”;这样就可以对指定的数据源进行删除SqlString属性可以返回执行的SQL语句,以便调试语句。