教你如何开发Mybatis的通用Mapper

为什么80%的码农都做不了架构师?>>>   hot3.png

本文档地址: 如何开发自己的通用Mapper

博客排版不如直接在gitosc上查看,建议去上面的链接查看。

#前言

自从发了通用Mapper-0.1.0版本后,我觉得对少数人来说,这可能是他们正好需要的一个工具。至少目前的通用DAO中,很少能有比这个更强大的。

但是对另一部分人来说,使用Mybatis代码生成器(我正在和一些朋友翻译这个文档,地址:MyBatis Generator)生成xml很方便,不需要使用通用Mapper。

实际上如果你无法在自己的业务中提取出通用的单表(多表实际上能实现,但是限制会增多,不如手写xml)操作,通用的Mapper除了能增加你的初始效率以及更干净的xml配置外,没有特别大的优势。

为了更方便的扩展通用Mapper,我对0.1.0版本进行了重构。目前已经发布了0.2.0版本,这里要讲如何开发自己需要的通用Mapper。

#如何开发自己的通用Mapper

##要求

  1. 自己定义的通用Mapper必须包含泛型,例如MysqlMapper

  2. 自定义的通用Mapper接口中的方法需要有合适的注解。具体可以参考Mapper

  3. 需要继承MapperTemplate来实现具体的操作方法。

  4. 通用Mapper中的Provider一类的注解只能使用相同的type类型(这个类型就是第三个要实现的类。)。实际上method也都写的一样。

##HsqldbMapper实例

###第一步,创建HsqldbMapper

public interface HsqldbMapper {
}

这个接口就是我们定义的通用Mapper,具体的接口方法在第三步写。其他的Mapper可以继承这个HsqldbMapper

###第二部,创建HsqldbProvider

public class HsqldbProvider extends MapperTemplate {
    //继承父类的方法
    public HsqldbProvider(Class mapperClass, MapperHelper mapperHelper) {
        super(mapperClass, mapperHelper);
    }
}

这个类是实际处理操作的类,需要继承MapperTemplate,具体代码在第四步写。

###第三步,在HsqldbMapper中添加通用方法 这里以一个分页查询作为例子。 public interface HsqldbMapper { /** * 单表分页查询 * * @param object * @param offset * @param limit * @return */ @SelectProvider(type=HsqldbProvider.class,method = "dynamicSQL") List selectPage(@Param("entity") T object, @Param("offset") int offset, @Param("limit") int limit); }

返回结果为List,入参分别为查询条件和分页参数。在Mapper的接口方法中,当有多个入参的时候建议增加@Param注解,否则就得用param1,param2...来引用参数。

同时必须在方法上添加注解。查询使用SelectProvider,插入使用@InsertProvider,更新使用UpdateProvider,删除使用DeleteProvider。不同的Provider就相当于xml中不同的节点,如 SELECT ID,COUNTRYNAME,COUNTRYCODE FROM COUNTRY id = #{entity.id} countryname = #{entity.countryname} countrycode = #{entity.countrycode} LIMIT #{limit} LIMIT #{limit} OFFSET #{offset}

看到这个结构,再和上面代码一一对应应该就不难理解了。熟悉以后,你可能也会觉得JAVA代码方式处理通用的Mapper会容易很多。

转载于:https://my.oschina.net/flags/blog/354573

你可能感兴趣的:(教你如何开发Mybatis的通用Mapper)