如何在mybatis注解开发中使用动态SQL

1、使用脚本sql

      脚本sql和xml配置基本类似,只需在外层包裹上即可

      例如:

public interface UserMapper {
    @Select("")
    List getUsers(User user);
}

 

2、使用方法构建sql

       使用方法构建sql需要用到内部类,此外要将@select替换成@selectProvider,另外insert,update,delete也都有相应的Provider方法使用

       具体使用方法如下:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsers")
    List getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            String sql = "select * from user";
            if(user != null){
                if(user.getUsername() != null){
                    sql = sql + " where username = '"+user.getUsername()+"'";
                }
            }
            return sql;
        }
    }

3、使用结构化sql

       使用结构化sql和使用方法构建sql基本相同,只不过是将String替换成new SQL(),注意点是SQL对象中的SELECT、FROM、WHERE等是叠加的,不是覆盖的,如下例子中两次SELECT等同于一次SELECT("id,username,password")

       具体使用方法如下:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsers")
    List getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            SQL sql = new SQL();
            sql.SELECT("id,username");
            sql.SELECT("password");
            sql.FROM("user");
            if(user.getUsername() != null){
                sql.WHERE("username = #{username}");
            }
            return sql.toString();
        }
    }

      此外还有另外一种写法:

    @SelectProvider(type = UserMapperProvider.class,method = "getUsersBySql")
    List getUsers(User user);

    class UserMapperProvider{
        public String getUsers(User user){
            return new SQL(){{
                SELECT("id,username");
                SELECT("password");
                FROM("user");
                if(user.getUsername() != null){
                    WHERE("username = #{username}");
                }
            }}.toString();
        }
    }

 

你可能感兴趣的:(mybatis框架)