Spring Data JPA动态查询

来源:互联网 发布:windows怎么录制视频 编辑:程序博客网 时间:2024/05/21 20:29

spring Data JPA大大的简化了我们持久层的开发,但是实际应用中,我们还是需要动态查询的。

    比如,前端有多个条件,这些条件很多都是可选的,那么后端的SQL,就应该是可以定制的,在使用hibernate的时候,可以通过判断条件来拼接SQL(HQL),当然,Spring Data JPA在简化我们开发的同时,也是提供了支持的。

    通过实现Criteria二实现的动态查询,需要我们的Repo接口继承JpaSpecificationExecutor接口,这是个泛型接口。

    然后查询的时候,传入动态查询参数,分页参数等即可。

    使用起来很简单,不过为了知其所以然,先介绍一下Criteria API。

    Criteria API

    如果编译器能够对查询执行语法正确性检查,那么对于 Java 对象而言该查询就是类型安全的。Java™Persistence API (JPA) 的 2.0 版本引入了 Criteria API,这个 API 首次将类型安全查询引入到 Java 应用程序中,并为在运行时动态地构造查询提供一种机制。本文介绍如何使用 Criteria API 和与之密切相关的 Metamodel API 编写动态的类型安全查询。

    在使用Spring Data JPA的时候,只要我们的Repo层继承JpaSpecificationExecutor接口就可以使用Specification进行动态查询了,我们先看下JpaSpecificationExecutor接口:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public interface JpaSpecificationExecutor<T> {  
  2.     T findOne(Specification<T> spec);  
  3.     List<T> findAll(Specification<T> spec);  
  4.     Page<T> findAll(Specification<T> spec, Pageable pageable);  
  5.     List<T> findAll(Specification<T> spec, Sort sort);  
  6.     long count(Specification<T> spec);  
  7. }  
    可以看到提供了5个方法,方法的参数和返回值已经很明显的表达了其意图。其中的参数,Pageable和Sort应该是比较简单的,分别是分页参数和排序参数,而重点就是Specification参数,先看下这个接口的定义:
[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public interface Specification<T> {  
  2.     Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);  
  3. }  
    其中就一个方法,返回的是动态查询的数据结构。

    javax.persistence.criteria.Predicate toPredicate(javax.persistence.criteria.Root<T> root,
    javax.persistence.criteria.CriteriaQuery<?> query,
    javax.persistence.criteria.CriteriaBuilder cb);

    这里使用的都是Java EE中的规范,具体实现本人采用的是Hibernate,当然也可以选择其他实现了JPA规范的数据持久层框架。

    这里需要再次回过头看看Criteria API中的一些东西:

    Criteria 查询是以元模型的概念为基础的,元模型是为具体持久化单元的受管实体定义的,这些实体可以是实体类,嵌入类或者映射的父类。 

    CriteriaQuery接口:代表一个specific的顶层查询对象,它包含着查询的各个部分,比如:select 、from、where、group by、order by等注意:CriteriaQuery对象只对实体类型或嵌入式类型的Criteria查询起作用

    Root接口:代表Criteria查询的根对象,Criteria查询的查询根定义了实体类型,能为将来导航获得想要的结果,它与SQL查询中的FROM子句类似

    1:Root实例是类型化的,且定义了查询的FROM子句中能够出现的类型。

    2:查询根实例能通过传入一个实体类型给 AbstractQuery.from方法获得。

    3:Criteria查询,可以有多个查询根。

    4:AbstractQuery是CriteriaQuery 接口的父类,它提供得到查询根的方法。CriteriaBuilder接口:用来构建CritiaQuery的构建器对象Predicate:一个简单或复杂的谓词类型,其实就相当于条件或者是条件组合
    其中支持的方法非常之强大,下面给出一个示例,大家可以参考一下,同样的,可以根据示例,自己可以写出更为复杂的查询:
    Repo接口:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public interface DevHREmpConstrastDao  
  2.         extends JpaRepository<DevHREmpConstrast, Long>,JpaSpecificationExecutor<DevHREmpConstrast>  
    查询实例1:
[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 条件查询时动态组装条件 
  3.  */  
  4. private Specification<DevHREmpConstrast> where(  
  5.         final String corg,final String name,final String type,final String date,final String checker){  
  6.     return new Specification<DevHREmpConstrast>() {  
  7.         @Override  
  8.         public Predicate toPredicate(Root<DevHREmpConstrast> root, CriteriaQuery<?> query, CriteriaBuilder cb) {  
  9.             List<Predicate> predicates = new ArrayList<Predicate>();  
  10.             //机构  
  11.             if(corg!=null&&!corg.equals("")){  
  12.                 List<String> orgIds = organizationDao.findByName("%"+corg+"%");  
  13.                 if(orgIds.size()>0&&orgIds.size()<1000)  
  14.                     predicates.add(root.<String>get("confirmOrgNo").in(orgIds));//confirmOrgNo  
  15.             }  
  16.             //名字  
  17.             if(name!=null&&!name.equals("")){  
  18.                 List<String> userIds = userDao.findByName(name);  
  19.                 if(userIds.size()>0&&userIds.size()<1000)//如果太多就不管了这个条件了  
  20.                     predicates.add(root.<String>get("hrUserName").in(userIds));  
  21.             }  
  22.             //类型  
  23.             if(type!=null&&!type.equals(""))  
  24.                 predicates.add(cb.equal(root.<String>get("hrUpdateType"),type));  
  25.             //日期  
  26.             if(date!=null&&!date.equals("")){  
  27.                 //处理时间  
  28.                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
  29.                 Date startDate;  
  30.                 Date endDate;  
  31.                 try {  
  32.                     startDate = format.parse(date);  
  33.                 } catch (ParseException e) {  
  34.                     startDate = new Date(946656000000L);//2000 01 01  
  35.                 }  
  36.                 endDate = startDate;  
  37.                 Calendar calendar = Calendar.getInstance() ;  
  38.                 calendar.setTime(endDate);  
  39.                 calendar.add(Calendar.DATE, 1);  
  40.                 endDate = calendar.getTime();  
  41.                 calendar = null;  
  42.                 predicates.add(cb.between(root.<Date>get("insDate"),startDate,endDate));  
  43.             }  
  44.             //审核人  
  45.             if(checker!=null&&!checker.equals("")){  
  46.                 List<String> userIds = userDao.findByName(checker);  
  47.                 if(userIds.size()>0&&userIds.size()<1000)//如果太多就不管了这个条件了  
  48.                     predicates.add(root.<String>get("confirmUserId").in(userIds));  
  49.             }  
  50.             return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();  
  51.         }  
  52.     };  
  53. }  
    查询实例2:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.    * 条件查询时动态组装条件 
  3.    */  
  4.   private Specification<DevHREmpConstrast> where(  
  5.           final String corg,final String name,final String type,final String date,final String checker){  
  6.       return new Specification<DevHREmpConstrast>() {  
  7.           @Override  
  8.           public Predicate toPredicate(Root<DevHREmpConstrast> root, CriteriaQuery<?> query, CriteriaBuilder cb) {  
  9.               List<Predicate> predicates = new ArrayList<Predicate>();  
  10.               //机构  
  11.               if(corg!=null&&!corg.equals("")){  
  12.                   List<String> orgIds = organizationDao.findByName("%"+corg+"%");  
  13.                   if(orgIds.size()>0&&orgIds.size()<1000)  
  14.                       predicates.add(root.<String>get("confirmOrgNo").in(orgIds));//confirmOrgNo  
  15.               }  
  16.               //名字  
  17.               if(name!=null&&!name.equals("")){  
  18.                   List<String> userIds = userDao.findByName(name);  
  19.                   if(userIds.size()>0&&userIds.size()<1000)//如果太多就不管了这个条件了  
  20.                       predicates.add(root.<String>get("hrUserName").in(userIds));  
  21.               }  
  22.               //类型  
  23.               if(type!=null&&!type.equals(""))  
  24.                   predicates.add(cb.equal(root.<String>get("hrUpdateType"),type));  
  25.               //日期  
  26.               if(date!=null&&!date.equals("")){  
  27.                   //处理时间  
  28.                   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
  29.                   Date startDate;  
  30.                   Date endDate;  
  31.                   try {  
  32.                       startDate = format.parse(date);  
  33.                   } catch (ParseException e) {  
  34.                       startDate = new Date(946656000000L);//2000 01 01  
  35.                   }  
  36.                   endDate = startDate;  
  37.                   Calendar calendar = Calendar.getInstance() ;  
  38.                   calendar.setTime(endDate);  
  39.                   calendar.add(Calendar.DATE, 1);  
  40.                   endDate = calendar.getTime();  
  41.                   calendar = null;  
  42.                   predicates.add(cb.between(root.<Date>get("insDate"),startDate,endDate));  
  43.               }  
  44.               //审核人  
  45.               if(checker!=null&&!checker.equals("")){  
  46.                   List<String> userIds = userDao.findByName(checker);  
  47.                   if(userIds.size()>0&&userIds.size()<1000)//如果太多就不管了这个条件了  
  48.                       predicates.add(root.<String>get("confirmUserId").in(userIds));  
  49.               }  
  50.               return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();  
  51.           }  
  52.       };  
  53.   }  

    然后调用dao层方法传入where()方法返回的参数即可。




项目结构如下:



pom.xml

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.   
  5.     <groupId>cn.db</groupId>  
  6.     <artifactId>psql</artifactId>  
  7.     <packaging>war</packaging>  
  8.     <version>0.0.1-SNAPSHOT</version>  
  9.   
  10.     <name>psql Maven Webapp</name>  
  11.     <url>http://maven.apache.org</url>  
  12.   
  13.     <dependencies>  
  14.   
  15.         <dependency>  
  16.             <groupId>junit</groupId>  
  17.             <artifactId>junit</artifactId>  
  18.             <version>4.10</version>  
  19.             <scope>test</scope>  
  20.         </dependency>  
  21.   
  22.         <dependency>  
  23.             <groupId>commons-dbcp</groupId>  
  24.             <artifactId>commons-dbcp</artifactId>  
  25.             <version>1.4</version>  
  26.         </dependency>  
  27.   
  28.         <dependency>  
  29.             <groupId>javax.servlet</groupId>  
  30.             <artifactId>jsp-api</artifactId>  
  31.             <version>2.0</version>  
  32.         </dependency>  
  33.   
  34.         <dependency>  
  35.             <groupId>mysql</groupId>  
  36.             <artifactId>mysql-connector-java</artifactId>  
  37.             <version>5.1.5</version>  
  38.         </dependency>  
  39.   
  40.         <dependency>  
  41.             <groupId>org.springframework.data</groupId>  
  42.             <artifactId>spring-data-jpa</artifactId>  
  43.             <version>1.6.1.RELEASE</version>  
  44.         </dependency>  
  45.   
  46.         <dependency>  
  47.             <groupId>org.springframework.boot</groupId>  
  48.             <artifactId>spring-boot-starter-data-jpa</artifactId>  
  49.             <version>1.1.4.RELEASE</version>  
  50.         </dependency>  
  51.   
  52.         <dependency>  
  53.             <groupId>org.apache.maven.plugins</groupId>  
  54.             <artifactId>maven-resources-plugin</artifactId>  
  55.             <version>2.6</version>  
  56.         </dependency>  
  57.   
  58.     </dependencies>  
  59.   
  60.     <repositories>  
  61.         <repository>  
  62.             <id>spring-milestones</id>  
  63.             <url>http://repo.spring.io/libs-milestone</url>  
  64.         </repository>  
  65.     </repositories>  
  66.   
  67.     <build>  
  68.         <plugins>  
  69.             <plugin>  
  70.                 <groupId>org.apache.maven.plugins</groupId>  
  71.                 <artifactId>maven-compiler-plugin</artifactId>  
  72.                 <configuration>  
  73.                     <source>1.8</source>  
  74.                     <target>1.8</target>  
  75.                 </configuration>  
  76.             </plugin>  
  77.         </plugins>  
  78.     </build>  
  79.   
  80. </project>  


persistence.xml

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  4.     version="2.0">  
  5.     <persistence-unit name="SimplePU" transaction-type="RESOURCE_LOCAL">  
  6.         <provider>org.hibernate.ejb.HibernatePersistence</provider>  
  7.   
  8.         <properties>  
  9.             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
  10.             <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/db_cloud" />  
  11.             <property name="hibernate.connection.username" value="root" />  
  12.             <property name="hibernate.connection.password" value="root" />  
  13.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />  
  14.             <property name="hibernate.show_sql" value="true" />  
  15.             <property name="hibernate.format_sql" value="true" />  
  16.             <property name="hibernate.use_sql_comments" value="false" />  
  17.             <property name="hibernate.hbm2ddl.auto" value="update" />  
  18.         </properties>  
  19.     </persistence-unit>  
  20. </persistence>   


applicationContext.xml

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:jpa="http://www.springframework.org/schema/data/jpa"  
  6.     xsi:schemaLocation="    
  7.         http://www.springframework.org/schema/beans    
  8.         http://www.springframework.org/schema/beans/spring-beans.xsd    
  9.         http://www.springframework.org/schema/tx    
  10.         http://www.springframework.org/schema/tx/spring-tx.xsd    
  11.         http://www.springframework.org/schema/data/jpa  
  12.         http://www.springframework.org/schema/data/jpa/spring-jpa.xsd  
  13.         http://www.springframework.org/schema/context    
  14.         http://www.springframework.org/schema/context/spring-context.xsd">  
  15.   
  16.     <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  17.         <property name="driverClassName">  
  18.             <value>com.mysql.jdbc.Driver</value>  
  19.         </property>  
  20.         <property name="url">  
  21.             <value>jdbc:mysql://127.0.0.1:3306/db_cloud</value>  
  22.         </property>  
  23.         <property name="username" value="root" />  
  24.         <property name="password" value="root" />  
  25.     </bean>  
  26.   
  27.     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
  28.         <property name="entityManagerFactory" ref="entityManagerFactory" />  
  29.     </bean>  
  30.   
  31.     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>  
  32.   
  33.     <bean id="entityManagerFactory"  
  34.         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
  35.     </bean>  
  36.   
  37.     <jpa:repositories base-package="cn.db.psql"  
  38.         entity-manager-factory-ref="entityManagerFactory"  
  39.         transaction-manager-ref="transactionManager" />  
  40.   
  41. </beans>    


Person.Java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package cn.db.psql;  
  2.   
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.GeneratedValue;  
  6. import javax.persistence.GenerationType;  
  7. import javax.persistence.Id;  
  8. import javax.persistence.Table;  
  9.   
  10. @Entity  
  11. @Table(name = "ts_person")   
  12. public class Person {  
  13.       
  14.     @Column  
  15.     @Id  
  16.     @GeneratedValue(strategy=GenerationType.IDENTITY)  
  17.     private Integer userid;  
  18.       
  19.     @Column  
  20.     private String username;  
  21.       
  22.     @Column  
  23.     private String stype;  
  24.       
  25.     @Column  
  26.     private Integer city_id;  
  27.   
  28.     public Integer getUserid() {  
  29.         return userid;  
  30.     }  
  31.   
  32.     public void setUserid(Integer userid) {  
  33.         this.userid = userid;  
  34.     }  
  35.   
  36.     public String getUsername() {  
  37.         return username;  
  38.     }  
  39.   
  40.     public void setUsername(String username) {  
  41.         this.username = username;  
  42.     }  
  43.   
  44.     public String getStype() {  
  45.         return stype;  
  46.     }  
  47.   
  48.     public void setStype(String stype) {  
  49.         this.stype = stype;  
  50.     }  
  51.   
  52.     public Integer getCity_id() {  
  53.         return city_id;  
  54.     }  
  55.   
  56.     public void setCity_id(Integer city_id) {  
  57.         this.city_id = city_id;  
  58.     }  
  59.       
  60.     public String toString()  
  61.     {  
  62.         return "[userid="+userid+",username="+username+",stype="+stype+",city_id="+city_id+"]";  
  63.     }  
  64. }  

PersonJpaSpecificationExecutor.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package cn.db.psql;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.domain.Page;  
  6. import org.springframework.data.domain.Pageable;  
  7. import org.springframework.data.jpa.domain.Specification;  
  8. import org.springframework.data.jpa.repository.JpaRepository;  
  9. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;  
  10. import org.springframework.stereotype.Repository;  
  11.   
  12. /** 
  13.  * 复杂条件的查询 
  14.  */  
  15. @Repository("personJpaSpecificationExecutor")  
  16. public interface PersonJpaSpecificationExecutor extends JpaRepository<Person, Long>, JpaSpecificationExecutor<Person>   
  17. {  
  18.     Page<Person> findAll(Specification<Person> spec, Pageable pageable);  //分页按条件查询    
  19.       
  20.     List<Person> findAll(Specification<Person> spec);  
  21. }  

PersonRepository.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package cn.db.psql;  
  2.   
  3. import org.springframework.data.jpa.repository.JpaRepository;  
  4. import org.springframework.data.jpa.repository.Query;  
  5. import org.springframework.data.repository.query.Param;  
  6. import org.springframework.stereotype.Repository;  
  7.   
  8. /** 
  9.  * 简单的查询 
  10.  */  
  11. @Repository("personRepository")  
  12. public interface PersonRepository extends JpaRepository<Person, Long>   
  13. {  
  14.     @Query("select a from Person a where a.userid = :userid")  
  15.     public Person findByUserid(@Param("userid")Integer userid);  
  16. }  


PersonSpecification.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package cn.db.psql;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import javax.persistence.criteria.CriteriaBuilder;  
  7. import javax.persistence.criteria.CriteriaQuery;  
  8. import javax.persistence.criteria.Path;  
  9. import javax.persistence.criteria.Predicate;  
  10. import javax.persistence.criteria.Root;  
  11.   
  12. import org.springframework.data.jpa.domain.Specification;  
  13.   
  14. public class PersonSpecification implements Specification<Person>  
  15. {  
  16.     private String _username;  
  17.     private String _stype;  
  18.     private Integer _cityId;  
  19.       
  20.     public PersonSpecification(String username, String stype, Integer cityId)  
  21.     {  
  22.         this._username = username;  
  23.         this._stype = stype;  
  24.         this._cityId = cityId;  
  25.     }  
  26.       
  27.     public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> query,CriteriaBuilder cb)   
  28.     {  
  29.           
  30.         Path<String> username = root.get("username");  
  31.           
  32.         Path<String> stype = root.get("stype");  
  33.         Path<Integer> city_id = root.get("city_id");  
  34.           
  35.         List<Predicate> list = new ArrayList<Predicate>();   
  36.           
  37.         Predicate pa = cb.equal(username, _username);  
  38.         Predicate pb = cb.equal(stype, _stype);  
  39.         Predicate pc = cb.equal(city_id, _cityId);  
  40.           
  41.         if(_username != null)  
  42.         {  
  43.             list.add(pa);  
  44.         }  
  45.         if(_stype != null)  
  46.         {  
  47.             list.add(pb);  
  48.         }  
  49.         if(_cityId != null)  
  50.         {  
  51.             list.add(pc);  
  52.         }  
  53.           
  54.         Predicate[] parray = new Predicate[list.size()];  
  55.           
  56.         return cb.and(list.toArray(parray));  
  57.     }  
  58.   
  59.     public String get_username() {  
  60.         return _username;  
  61.     }  
  62.   
  63.     public void set_username(String _username) {  
  64.         this._username = _username;  
  65.     }  
  66.   
  67.     public String get_stype() {  
  68.         return _stype;  
  69.     }  
  70.   
  71.     public void set_stype(String _stype) {  
  72.         this._stype = _stype;  
  73.     }  
  74.   
  75.     public Integer get_cityId() {  
  76.         return _cityId;  
  77.     }  
  78.   
  79.     public void set_cityId(Integer _cityId) {  
  80.         this._cityId = _cityId;  
  81.     }  
  82. }  


Client.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package cn.db.psql;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. public class Client {  
  8.       
  9.     public static void find() throws Exception  
  10.     {  
  11.         ClassPathXmlApplicationContext ctx =   
  12.                 new ClassPathXmlApplicationContext("applicationContext.xml");   
  13.           
  14.         try  
  15.         {  
  16.             PersonJpaSpecificationExecutor ur = (PersonJpaSpecificationExecutor)ctx.getBean("personJpaSpecificationExecutor");  
  17.               
  18.             PersonSpecification us = new PersonSpecification(null,"1",1);  
  19.               
  20.             List<Person> plist = ur.findAll(us);  
  21.               
  22.             System.out.println("==============================================");  
  23.               
  24.             for(Person p : plist)  
  25.             {  
  26.                 System.out.println(p);  
  27.             }  
  28.               
  29.             System.out.println("==============================================");  
  30.               
  31.         }catch(Exception e)  
  32.         {  
  33.             e.printStackTrace();  
  34.         }  
  35.           
  36.         ctx.close();  
  37.     }  
  38.       
  39.     public static void main(String[] args) throws Exception  
  40.     {  
  41.         find();  
  42.     }  
  43. }  




FastQuery 快速操作数据层框架

FastQuery 基于Java语言.他的使命是:简化Java操作数据层.做为一个开发者, 仅仅只需要设计DAO接口即可,其内部采用ASM动态生成实现,执行快. 因此,代码简洁而优雅.从而,大幅度提升开发效率.

FastQuery 主要特性如下:

  1. 设计优雅,配置简单,极易上手.
  2. 采用ASM动态生成字节码,因此支持编译前预处理,可最大限度减少运行期的错误.显著提升程序的强壮性.
  3. 支持安全查询,防止SQL注入.
  4. 支持与主流数据库连接池框架集成,如集成c3p0,dbcp等等
  5. 支持 @Query 查询,使用 @Condition,可实现动态 where 条件查询.
  6. 支持查询结果集以JSON类型返回
  7. 支持AOP,注入拦截器只需标识几个简单的注解,如: @Before , @After

运行环境要求

jdk1.8+

配置文件

jdbc-config.xml

用来配置支持jdbc. 注意:如果采用连接池,该配置文件可以不要.

<code class="language-xml hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-pi" style="color: rgb(0, 102, 102); box-sizing: border-box;"><?xml version="1.0" encoding="UTF-8"?></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">jdbc-config</span>></span>          <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 配置第一个数据源 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"xk_db"</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"driverClass"</span>></span>com.mysql.jdbc.Driver<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"url"</span>></span>jdbc:mysql://192.168.1.1:3306/xk?user=xk&amp;password=abc123<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span>></span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 配置第二个数据源 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"shtest_db"</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"driverClass"</span>></span>com.mysql.jdbc.Driver<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- jdbc 驱动 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"databaseName"</span>></span>dbname<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 数据库的名称 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"user"</span>></span>username<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 数据库用户名称 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"password"</span>></span>userpasswd<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 数据库用户的密码 --></span>         <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"portNumber"</span>></span>3306<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 端口 --></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"serverName"</span>></span>192.168.1.1<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!-- 数据库主机地址 --></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">jdbc-config</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul><div class="save_code tracking-ad" data-mod="popu_249" style="box-sizing: border-box; position: absolute; height: 60px; right: 30px; top: 5px; color: rgb(255, 255, 255); cursor: pointer; z-index: 2;"><a target=_blank style="color: rgb(255, 153, 0); box-sizing: border-box;"><img src="http://static.blog.csdn.net/images/save_snippets.png" style="border: none; box-sizing: border-box; max-width: 100%;" alt="" /></a></div><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>

c3p0-config.xml

支持c3p0配置,详情配置请参照c3p0官网的说明: http://www.mchange.com/projects/c3p0/.

<code class="language-xml hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-pi" style="color: rgb(0, 102, 102); box-sizing: border-box;"><?xml version="1.0" encoding="UTF-8"?></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">c3p0-config</span>></span>      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"><!--    <default-config>          <property name="driverClass">com.mysql.jdbc.Driver</property>          <property name="jdbcUrl">jdbc:mysql://...</property>        <property name="user">root</property>          <property name="password">123***</property>          <property name="initialPoolSize">10</property>          <property name="maxIdleTime">30</property>          <property name="maxPoolSize">20</property>          <property name="minPoolSize">5</property>          <property name="maxStatements">200</property>      </default-config> --></span>       <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"xk-c3p0"</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"driverClass"</span>></span>com.mysql.jdbc.Driver<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"jdbcUrl"</span>></span>jdbc:mysql://192.168.1.1:3306/xk<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"user"</span>></span>xk<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"password"</span>></span>abc123<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"acquireIncrement"</span>></span>50<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"initialPoolSize"</span>></span>100<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"minPoolSize"</span>></span>50<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"maxPoolSize"</span>></span>1000<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"maxStatements"</span>></span>0<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>          <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"maxStatementsPerConnection"</span>></span>5<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>             <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">named-config</span>></span> <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">c3p0-config</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

fastquery.json

配置数据源的作用范围

<code class="language-js hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// @author xixifeng (fastquery@126.com)</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 配置必须遵循标准的json语法.</span>[    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// config目前支持的可选值有"jdbc","c3p0"</span>    {        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"config"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"c3p0"</span>,            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 表示由c3p0负责提供数据源</span>        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dataSourceName"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xk-c3p0"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 数据源的名称</span>        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"basePackages"</span>: [            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 该数据源的作用范围</span>            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"org.fastquery.example.StudentDBService"</span>            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在这可以配置多个DB接口,以","号隔开</span>        ]    },    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*     再配置一个数据源作用域    */</span>    {        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"config"</span> : <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"jdbc"</span>,            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 表示由jdbc驱动负责提供数据源</span>        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dataSourceName"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"shtest_db"</span>,        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"basePackages"</span>: [ <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 该数据源的作用范围</span>            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"org.fastquery.example.DataAcquireDbService"</span>                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在这可以配置多个DB接口,以","号隔开</span>        ]    }]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul>

一个完整的入门例子

  • 准备一个实体
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Student</span> {</span>      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String no;      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String name;      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String sex;      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Integer age;      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> String dept;      <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// getter /setter 省略...</span> } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
  • DAO接口
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">StudentDBService</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">QueryRepository</span> {</span>    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from student"</span>)    JSONArray findAll();    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from student"</span>)    Student[] find();       }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
  • 使用DAO接口.

    注意:不用去实现StudentDBService接口.

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// get porxy impl</span> StudentDBService studentDBService = FQuery.getRepository(StudentDBService.class); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// call findAll</span> JSONArray jsonArray = studentDBService.findAll(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// call find</span> Student[] students = studentDBService.find(); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

带条件查询

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// sql中的?1 表示当前方法的第一个参数</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// sql中的?2 表示当前方法的第二个参数</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//       ?N 表示当前方法的第N个参数</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 查询返回数组格式</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select no as no,name,sex,age,dept from student s where s.sex=?2 and s.age > ?1"</span>)Student[] find(Integer age,String sex);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 查询返回JSON格式</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from student s where s.sex=?1 and s.age > ?2"</span>)JSONArray find(String sex,Integer age);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 查询返回List Map</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from student s where s.sex=?1 and s.age > ?2"</span>)List<Map<String, Object>> findBy(String sex,Integer age);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>

动态条件查询

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from Student #{#where} order by age desc"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 增加一些条件</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"no"</span>,o=Operator.LIKE,r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"?1"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ?1的值,如果是null, 该行条件将不参与运算</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(c=COperator.AND,l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name"</span>,o=Operator.LIKE,r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"?2"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 参数 ?2,如果接收到的值为null,该条件不参与运算</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//通过 ignoreNull=false 开启条件值即使是null也参与运算</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(c=COperator.AND,l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"age"</span>,o=Operator.GT,r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"?3"</span>,ignoreNull=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ?3接收到的值若为null,该条件也参与运算.</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(c=COperator.OR,l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dept"</span>,o=Operator.IN,r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(?4,?5,?6)"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// dept in(?4,?5,?6)</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(c=COperator.AND,l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name"</span>,o={Operator.NOT,Operator.LIKE},r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"?7"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 等效于 name not like ?7</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Condition</span>(c=COperator.OR,l=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"age"</span>,o=Operator.BETWEEN,r=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"?8 and ?9"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 等效于 age between ?8 and ?9</span>Student[] findAllStudent(... args ...);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

count

统计查询行数

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select count(no) from student"</span>)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> count();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

exists

判断是否存在

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"select * from student s where s.no=?1"</span>)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> exists(String no);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

改操作

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"update student s set s.age=?3,s.name=?2 where  s.no=?1"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> update(String no,String name,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> age); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 返回修改之后所影响的行数</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"DELETE FROM `userinfo` WHERE id=?1"</span>)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">boolean</span> deleteUserinfoById(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> id);<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"update student s set s.age=?2 where  s.no=?1"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> update(String no,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> age);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 以实体bean格式,返回当前保存的数据</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"insert into student (no, name, sex, age, dept) values (?1, ?2, ?3, ?4, ?5)"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span>(table=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"student"</span>,id=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"no"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 注意: student的主键是字符串不会自增长,在此处需要用@Id标识</span>Student addStudent(<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Id</span> String no,String name,String sex,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> age,String dept);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 以Map格式,返回当前保存的数据</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span>(id=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id"</span>,table=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userinfo"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"insert into #{#table} (name,age) values (?1, ?2)"</span>)Map<String, Object> addUserInfo(String name,Integer age);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 以JSON格式,返回当前保存的数据</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span>(id=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id"</span>,table=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userinfo"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"insert into #{#table} (name,age) values (?1, ?2)"</span>)JSONObject saveUserInfo2(String name,Integer age);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 返回当前保存的数据的主键信息.</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Modifying</span>(id=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id"</span>,table=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userinfo"</span>)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Query</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"insert into #{#table} (name,age) values (?1, ?2)"</span>)Primarykey saveUserInfo(String name,Integer age);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li></ul>

@Before拦截器

  • 准备一个BeforeFilter
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**  *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> xixifeng (fastquery@126.com)  */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MyBeforeFilter1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">BeforeFilter</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Repository</span>> {</span>    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">doFilter</span>(Repository repository, Method method, Object[] args) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// repository: 当前拦截到的实例</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// method: 当前拦截到的方法</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// args: 当前传递进来的参数</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// this.abortWith(returnVal); // 中断拦截器</span>    } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>
  • 注入Filter
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 可以同时标识多个@Before</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Before</span>(MyBeforeFilter1.class)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Before</span>(MyBeforeFilter2.class)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Before</span>(MyBeforeFilter3.class)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">StudentDBService</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">QueryRepository</span> {</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// some code ... ...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

@After拦截器

<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> xixifeng (fastquery@126.com) */</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MyAfterFilter</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">AfterFilter</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Repository</span>> {</span>    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Object <span class="hljs-title" style="box-sizing: border-box;">doFilter</span>(Repository repository, Method method, Object[] args, Object returnVal) {        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// repository: 当前拦截到的实例</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// method: 当前拦截到的method</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// args: 当前传递进来的参数</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// returnVal 即将返回的值</span>        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在这里可以中途修改 returnVal</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> returnVal;    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 可以同时标识多个@After</span><span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@After</span>(MyAfterFilter.class)<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@After</span>(MyAfterFilter2.class)<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">interface</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">StudentDBService</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">QueryRepository</span> {</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// some code ... ...</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

开源地址

http://www.oschina.net/p/fastquery


0 0
原创粉丝点击