相关文章

更多>

最新资讯

更多>
  • 谷歌开源了一个Java容器化工具Jib

        谷歌开源了一个Java容器化工具Jib,Java开发人员可以使用他们熟悉的Java工具来构建容器。

  • 使用文件系统TCFS的好处

        TCFS是迅雷在百万级共享计算节点的基础上,从高性能迅雷链和独创的分布式技术中积累而来,专为区块链倾力打造的数据云存储与授权分发的开放式文件系统。

  • win10系统关闭时间轴功能的两种操作方法

        关闭时间轴功能的两种操作方法:一、组策略方式 本方法适用于有组策略编辑器的Win10专业版/企业版/教育版。通过组策略编辑器,定位至“计算机配置 - 管理模板 - 系统 - OS策略”。然后在右侧窗口中找到“启用活动源(ActivityFeed)”配置项将配置项修改为“已禁用”应用确定就可以解决了。

  • 在Word中编辑公式,不用从外部打开MathType软件的方法

        MathType是一个很强大的编辑公式的工具。这里给大家介绍一种在Word中编辑公式,不用从外部打开MathType软件的方法。

  • 云计算技术的现况

        在科研领域可以通过云计算进行地震监测、海洋信息监控、天文信息计算处理;在网络安全防护上可以通过云计算进行病毒库存储、垃圾邮件屏蔽。

首页> 知识分享> JAVA框架> Spring Boot MyBatis注解之动态SQL(if test)(二)

Spring Boot MyBatis注解之动态SQL(if test)(二)

时间: 2018-07-12 15:19:58 标签mybatis , springboot , Mybatis的动态SQL

1)动态语言注解

对于创建动态的查的语言。MyBatis提供了多个注解如:@InsertProvider,@UpdateProvider,@DeleteProvider@SelectProvider,这些都是建立动态语言和让MyBatis执行这些语言。


2@Provider使用思路

      对于MyBatis提供的几个@Provider,里面最主要的参数是type,也就是sql类的Calss对象,另外就是对应的方法名,我们看SelectProvider的源代码:

    @Documented  
    @Retention(RetentionPolicy.RUNTIME)  
    @Target(ElementType.METHOD)  
    public @interface SelectProvider {  
      Class<?> type();  
       
      String method();  
    }

   所以要实现动态的SQL查询,那么大体的思路就是,编写一个SqlProvider,比如:DemoSqlProvider,在此方法中返回一条SQL语句即可。然后在Mapper类中使用@SelectProvider注解,指定provider类和对应的SQL方法。

3@SelectProvider

UserSqlProvider类

public class UserSqlProvider {
   
    /**
     * 查询语句.
     */
    public String select1(User user ){
       StringBuffer sql = new StringBuffer("select * from tb_user1 where 1=1 ");
       if(user.getAge() != 0){
           sql.append(" and age=#{age}");
       }
       if(user.getUsername() != null){
           sql.append(" and username=#{username}");
       }
       return sql.toString();
    }
}

  UserMapper中加入查询方法:

@SelectProvider(type=UserSqlProvider.class,method="select1")
    List<User> getUserByIdAndUsername(User user);

4@InsertProvider

UserSqlProvider

   public String save( final User  user){  
       return new SQL(){{  
           INSERT_INTO("tb_user1");  
           //多个写法.  
           INTO_COLUMNS("username","age");  
           INTO_VALUES("#{username}","#{age}");  
                        
       }}.toString();  
    }

(5)@UpdateProvider

             
   public String update(final User  user){  
       return new SQL(){{  
           UPDATE("tb_user1");  
        
           //条件写法.  
           if(user.getAge() != 0 ){  
              SET("age=#{age}");  
           }  
           if(demo.getUsername() != null){  
              SET("username=#{username}");  
           }  
           WHERE("id=#{id}");  
       }}.toString();  
    }

6@DeleteProvider

  public String delete(){  
       return new SQL(){{  
           DELETE_FROM("tb_user1");  
           WHERE("id=#{id}");  
       }}.toString();  
    }



版权说明| 关于我们| 合作伙伴| 联系我们| 网站地图| 招贤纳士

Copyright © 2017 www.ijava.com All Rights Reserved 版权所有•ijava学习网 京ICP备14061482号-18         官方QQ:3325669927

ijava学习网提供免费java教程和大量java面试题库,给高级会员提供免费的java培训,同时提共一些java开发项目和java下载,java工程师,java菜鸟们快来哦。记住我们的网站:www.ijava.com