mybatis多级关联查询数据封装
来源:互联网 发布:免费音乐制作软件 知乎 编辑:程序博客网 时间:2024/06/08 19:13
原文链接
最近一个项目用到mybatis,花了一点时间看了官方文档,后面就搭建起了框架,着手进行开发,mybatis上手很容易,但是有一些小的细节的注意(下文说明),否则错误很难查找,对于用惯了hibernate的开发人员来说,使用mybatis可能可能需要加强SQL。大概说一下mybatis优缺点,欢迎补充。
mybatis优点:
1. 易于上手和掌握。
2. sql写在xml里,便于统一管理和优化。
3. 解除sql与程序代码的耦合。
4. 提供映射标签,支持对象与数据库的orm字段关系映射
5. 提供对象关系映射标签,支持对象关系组建维护
6. 提供xml标签,支持编写动态sql。
mybatis缺点:
1. sql工作量很大,尤其是字段多、关联表多时,更是如此。
2. sql依赖于数据库,导致数据库移植性差。
3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)
5. DAO层过于简单,对象组装的工作量较大。
6. 不支持级联更新、级联删除。
7. 编写动态sql时,不方便调试,尤其逻辑复杂时。
8. 提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。
9. 使用不当,容易导致N+1的sql性能问题。
10. 使用不当,关联查询时容易产生分页bug。
11. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。
12. 参数的数据类型支持不完善。(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)
13. 多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)
查询结果说明:
mybatis可以通过配置返回Java对象,例如查询一个用户对象,下面为mapper配置,select查询可以指定返回resultType或者resultMap。
如果实体类属性和数据库中字段名一样,则可以直接指定resultType,值为定义的实体类,mybatis会默认创建resultMap指定对应关系,resultType=“User”,User需在配置中定义,如下段代码,查询成功后返回User对象。
如果实体类属性和数据库中字段名称不相同,必须在配置中声明resultMap映射,指定字段和属性对应关系,查询时指定resultMap,查询成功后会返回User对象,或者是User集合。
三张表关联查询,这里定义三张表,A、B、C,B关联A,C关联B,在查询A的时候同时查询B和C,在A实体类中定义B对象集合,在B实体类中定义C对象集合。
A表{a_id,......},B表{b_id,b_a_id,......},C表{c_id,c_b_id,......}
在调用getAById或者getAllA,返回A对象或者A集合,A对象中已经封装了关联的B对象,B对象中已经封装了关联的C对象。
mybatis的关联查询还有其他集中配置方式,这里只介绍多级关联查询,
- mybatis多级关联查询数据封装
- mybatis多级关联查询数据封装
- mybatis 关联查询之association定义关联对象封装规则
- mybatis 关联查询 Collection定义关联集合封装规则
- PHP TP5 省市区表多级关联模型查询,和db方式查询封装效率
- Mybatis上路_03-简单关联数据查询
- mybatis 关联查询只返回一条数据
- mybatis实现关联数据的查询
- mybatis关联查询
- mybatis表关联查询
- Mybatis关联表查询
- MyBatis关联查询
- Mybatis关联查询
- MyBatis 关联查询
- mybatis实现关联查询
- Mybatis如何关联查询
- mybatis 关联sql查询
- MyBatis关联查询(一对一)
- 做好软件的要求
- (4.5.5.9)Espresso之UiAutomator2与Espresso的结合
- jquery中attr()方法的使用(转载)
- tomcat部署web应用的4种方法
- caffe入门----模型
- mybatis多级关联查询数据封装
- Java String去除HTML标签
- iOS 从某一界面pop回指定界面
- session会话技术
- 创建MFC对话框
- Linux命令CURL用法
- 安卓 简单集成腾讯X5 浏览器
- target 事件属性(转载)
- ExpandableListView或ListView拉取阴影的问题