目录
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