MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可。Mybatis在接收系统传来的参数和返回的参数时主要可以有Map类型和实体类型两种。在我参与开发的有限几个项目当中,有使用实体类型比较多的,也有使用Map类型比较多的。不管选择哪种类型,在项目架构来说决定了这个项目中部分请求和返回数据的类型。
使用Map作为接收类型时,通常能够在传参到持久层这一过程中省去很多麻烦。前端请求及参数到达Action或者Controller时通常使用map来进行接收,使用map作为传递类型可以不用再将数据封装为Bean类型再去根据实体属性一一填充,直接通过Service和Dao以map类型将数据传到map配置SQL文件当中,省去很多数据转换环节。再执行完SQL语句返回时制定map类型返回,不管是单条数据还是List都可以快速编写并返回给前端。这种方式在处理多表查询时避免了编写大量的实体类和属性字段定义,减少了很多中间流程。缺点也一样明显,由于这种完全摒弃了面向对象思想的传值类型,首先需要自己详细记好map中key-value映射的关系,尤其的记好自己给每个数据库字段所定义的key值以做中间过程的查看或修改。其次,当你的代码不止你一个维护时,你的同事并不能通过查看实体类来获知你这个业务所传递的具体字段,只有通过询问或查看Map文件或者调试才能知晓,也不利于自己后期的codeReview。
使用实体类Bean来作为参数的传递类型,麻烦之处在于实体类的编写以及大量的get、set方法,以及需要在map文件中手写大量关系映射。除此之外在设计多表多字段的查询和操作时往往需要大量的代码编写已经多个代码层的变动,使得代码变得十分繁琐。优点之处是在于使用了面向对象的思想,使得你的代码更容易读懂。