/动态查询
@SelectProvider(method = "selectWhitParam", type = UserDynaSqlProvider.class)
List<User> selectByPage(Map<String, Object> params);
//根据参数查询用户总数
@SelectProvider(method = "count", type = UserDynaSqlProvider.class)
Integer count(Map<String, Object> params);
//动态插入用户
@SelectProvider(method = "inserUser", type = UserDynaSqlProvider.class)
void save(User user);
}
这里才是真正的开始升华了,首先我只定义了一个 UserDao的接口,然后充分利用mybatis的注解优势,定义了’登录用户名和密码查询员工’的方法……
这里为大家补充一下注解知识:
@Select注解,这个不用解释了吧,就相当于存放查询语句的一个注解,定义在某一个方法上,效果相当于在配置文件里面编写查询语句。
@Param注解,是对参数的解释。这里用的 string loginname是前面在公共常量类里面定义的。怎么说呢,我们可以理解成request.setAttribute(“”,”")这种形式的升华吧。
@SelectProvider注解,用于生成查询用的sql语句,有别于@Select注解。结构上看,@SelectProvide指定了一个Class及其方法,通过调用Class上的这个方法来获得sql语句。
注意事项:
①这里的@Param注解是基于mybatis框架的,不是spring框架上的,导入包的时候要注意哟!
②@SelectProvider注解在编程的思维上有一个跨度,因为它本身需要一个class和其方法,所以在定义这个注解的时候,务必思考好下一个层次结构里面的类和方法所需要做的事哦!当然,在接口里面的方法,是可以事先预算好的,但是在它上面的注解,就要多思考思考才能做决定哦!
③公共常量类。在此接口的运用上,既然是面向接口编程,还要完成数据库的基本操作,那么是一定要导入公共常量类里面的USERTABLE的。
④id = #{id} 生成的sql语句是 id = ?
4.动态SQL提供类
public class UserDynaSqlProvider {
//分页动态查询
public String selectWhitParam(final Map<String, Object> params) {
String sql=new SQL(){
{
SELECT("*");
FROM(USERTABLE);
if (params.get("user")!=null) {
User user=(User) params.get("user");
if (user.getUsername()!=null && !user.getUsername().equals("")) {
WHERE(" username LIKE CONCAT('%',#{user.username},'%') ");
}
if (user.getStatus()!=null && !user.getStatus().equals("")) {
WHERE(" status LIKE CONCAT('%',#{user.status},'%') ");
}
}
}
}.toString();
if (params.get("pageModel")!=null) {
sql += " limit #{pageModel.firstLimitParam} , #{pageModel.pageSize} ";
}
return sql;
}
//动态查询总数量
public String count(final Map<String, Object> params) {
return new SQL(){
{
SELECT("*");
FROM(USERTABLE);
if (params.get("user") !=null) {
User user=(User) params.get("user");
if (user.getUsername()!=null && !user.getUsername().equals("")) {
WHERE(" username LIKE CONCAT('%',#{user.username},'%') ");
}
if (user.getStatus()!=null && !user.getStatus().equals("")) {
WHERE(" status LIKE CONCAT('%',#{user.status},'%') ");
}
}
}
}.toString();
}
//动态插入
public String inserUser(final User user) {
return new SQL(){
{
INSERT_INTO(USERTABLE);
if (user.getUsername()!=null && !user.getUsername().equals("")) {
VALUES("username", "#{username}");
}
if (user.getStatus()!=null && !user.getStatus().equals("")) {
VALUES("status", "#{status}");
}
if (user.getLoginname()!=null && !user.getLoginname().equals("")) {
VALUES("loginname", "#{loginname}");
}
if (user.getPassword()!=null && !user.getPassword().equals("")) {
VALUES("password", "#{password}");
}
}
}.toString();
}
//动态更新
public Str