ijava学习网> 知识分享> 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();  
    }



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

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