设为首页 加入收藏

TOP

你还在用传统的 JDBC 持久化访问吗(二)
2017-12-18 12:37:05 】 浏览:521
Tags:在用 传统 JDBC 持久化 访问
/动态查询 @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
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring、Spring Boot 和 TestNG .. 下一篇Spring、Spring Boot 和 TestNG ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目