Mybatis动态sql之@provider使用
2022/1/20 19:14:18
本文主要是介绍Mybatis动态sql之@provider使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
1.简单介绍
2.@SelectProvider
3.@InsertProvider
4.@UpdateProvider
5.@DeleteProvider
6.参数传递问题
1.简单介绍
-
@provider包括@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider
-
主要有两个参数:
-
type:sql类的Class对象(写动态的sql的类的类名)
-
method:类中该方法名
-
- 统一用法(基于注解)
DemoDao中: @对应的注解名(type=类名.class,method="方法名"):通过调用Class上的这个方法来获得sql语句 public 方法的返回值 方法名(参数类型 参数); DemoSqlProvider中 public class 类型 { /** * 查询语句. * @param demo * @return */ public String select5(参数类型 参数){ return new SQL(){{ SELECT("*"); FROM("student") if(参数.getName() != null){ WHERE("name=#{name}"); } if(参数.getEmail() != null){ WHERE("email=#{email}") } }}.toString(); }
2.@SelectProvider
StudentDao中: @SelectProvider(type=StudentSqlProvider.class,method="select5") public List<Demo> select5(Student demo); StudentemoSqlProvider中: public cStudent StudentSqlProvider { /** * 查询语句. * @param demo * @return */ public String Studentct5(Student demo){ public String select5(参数类型 参数){ return new SQL(){{ SELECT("*"); FROM("student") if(参数.getName() != null){ WHERE("name=#{name}"); } if(参数.getEmail() != null){ WHERE("email=#{email}") } }}.toString(); }
3.@InsertProvider
@InsertProvider(type=StudentSqlProvider.class,method="save3") public void save3(Student demo); /** * 查询语句.使用SQL * @param demo * @return */ public String save3(final Student demo){ return new SQL(){{ INSERT_INTO("sutdent"); //多个写法. INTO_COLUMNS("name","email"); INTO_VALUES("#{name}","#{email}"); //条件写法. // if(demo.getName() != null){ // VALUES("name","#{name}"); // } // if(demo.getEmail() != null){ // VALUES("email","#{email}"); // } }}.toString(); }
4.@UpdateProvider
/** * @param demo * @return */ public String update2(final Student demo){ return new SQL(){{ UPDATE("sutdent"); //条件写法. if(demo.getName() != null){ SET("name=#{name}"); } if(demo.getEmail() != null){ SET("email=#{email}"); } WHERE("id=#{id}"); }}.toString(); } @UpdateProvider(type=StudentSqlProvider.class,method="update2") public int update2(Student demo);
5.@DeleteProvider
/** * @param id * @return */ public String delete2(@param("id") long id){ return new SQL(){{ DELETE_FROM("sutdent"); WHERE("id=#{id}"); }}.toString(); } @UpdateProvider(type=StudentSqlProvider.class,method="delete2") public int delete2(int id);
6.参数传递问题
-
对于只有一个参数的情况(不加param),可以直接使用,参见前面的部分。但是,如果在dao方法中,对参数使用了@Param注解的话,那么相应selectUser方法必须接受Map<String, Object>做为参数
-
在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数,如果参数使用了@Param注解,那么参数在Map中以@Param的值为key
这篇关于Mybatis动态sql之@provider使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?