热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何开发自己的通用Mapper

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


自从发了通用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会容易很多。


推荐阅读
author-avatar
手机用户2702937647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有