Mybatis使用的困惑? 400 报错
为了解决“N+1”问题,Mybatis推荐使用left join等关联查询,并结合<association>等标签来映射高级查询结果。
比如:
<resultMap type="Order" id="baseResultMap"> <id property="id" column="order_id" /> <result property="no" column="order_no"/> <result property="name" column="order_name" /> <association property="goods" javaType="Goods" resultMap="com.hfrelay.persistence.spares.SparesMapper.sparesResultMap"> </association> </resultMap>
<select id="findById" resultMap="baseResultMap"> select a.order_id, a.order_no, b.goods_id, b.goods_name, b.* /* Goods的 N 多 字段(假如某天删除一个Goods的一个属性,就得来这边顺便删除)*/ from order a, goods b where a.goods_id = b.goods_id </select>
这样虽然解决了N+1问题。但是,由于很多类都将Goods作为子对象,因此,若删除Goods的某一个字段,则必须在引用它的所有XML配置文件中删除高级查询语句对应的字段,甚是麻烦!
后面,改用“<association select=“XXX””,就相对简单了,但新的问题又出现了,如果在改文件中使用缓存配置“<cache />”则会提示出错,╮(╯▽╰)╭
没人。。。######
像这种连表查询。只需要sql写完,然后在resultMap里写上另一张表<result property="goods" column="Goods" />
在表中只要加一个变量private Goods goods,就可以了啊。
######像这种连表查询。只需要sql写完,然后在resultMap里写上另一张表<result property="goods" column="Goods" />
在表中只要加一个变量private Goods goods,就可以了啊。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。