1.简单介绍
2.@SelectProvider
3.@InsertProvider
4.@UpdateProvider
5.@DeleteProvider
6.参数传递问题
@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(); }
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(); }
@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(); }
/** * @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);
/** * @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);
对于只有一个参数的情况(不加param),可以直接使用,参见前面的部分。但是,如果在dao方法中,对参数使用了@Param注解的话,那么相应selectUser方法必须接受Map<String, Object>做为参数
在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数,如果参数使用了@Param注解,那么参数在Map中以@Param的值为key