java.util.Map 类型在 Java 中有广泛的应用,在数据持久层用好 Map,同样能起到事半功倍的效果,以下是一些使用场景,可能有你平时没注意到的,快来看看吧。
Case 1 简化代码
如果实体类的属性过多,则可以考虑使用万能的 Map,查询和新增数据时都可以用 java.util.Map 类型,可极大地简化代码。如果数据库中的字段为 NULL,则在查询时不会被放进 Map;更新时,也会根据 Map 中存在的属性有选择性地更新,很方便。
1 查询数据
查询 SQL:
1 | <select id="queryOrgInfo" resultType="map" parameterType="string"> |
对应的 Mapper 类:
1 | import com.github.yulichang.base.MPJBaseMapper; |
在上面的 SQL 中,可以发现 resultType 和 parameterType 的数据类型首字母用的都是小写,而不是全限定类名。原因是 Mybatis 在加载时已经给常用的数据类型注册了别名,所以可以用小写(具体的对应关系可参考:Mybatis 的参数处理详解)。
查询到数据后,服务层将其转换为 JSON 字符串并进行后续处理,可以发现,Map 中元素的 Key 为数据库表的字段名:
1 | Map map = orgMapper.queryOrgInfo(orgId); |
2 新增数据
首先在服务层对 JSON 字符串进行解析:
1 | import com.alibaba.fastjson.JSON; |
编写 Mapper 类:
1 | import com.github.yulichang.base.MPJBaseMapper; |
编写对应的新增 SQL:(其中的 map 含义不同,应该能看懂吧)
1 | <insert id="addOrUpdateOrg" parameterType="map"> |
Case 2 传递参数
关联查询,传多个参数时要用 java.util.Map 类型。
1 传多个参数
1 | <resultMap id="testMap" type="XXX" > |
2 传单个参数
1 | <resultMap id="PathMap" type="com.test.entity.po.Path"> |
(完)