写点什么

JavaEE 框架学习笔记——Mybatis 篇

  • 2021 年 11 月 11 日
  • 本文字数:3133 字

    阅读完需:约 10 分钟

目录


一、Mybatis的Dao编写【mapper代理方式实现】


[二、mybatis 与 hibernate 的区别](about:blank#%E4%BA%8C%E3%80%81mybatis%E4%B8%8Ehi


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


bernate%E7%9A%84%E5%8C%BA%E5%88%AB)


三、延迟加载(懒加载)


四、一级缓存


五、二级缓存



一、Mybatis 的 Dao 编写【mapper 代理方式实现】

Mapper 代理的开发方式,程序员只需要编写 mapper 接口(相当于 dao 接口)即可。Mybatis 会自动的为 mapper 接口生成动态代理实现类。不过要实现 mapper 代理的开发方式****,需要遵循一些开发规范。****


<table border="1" cellpadding="1" cellspacing="1"><caption><span style="color:#f33b45;"><strong>开发规范</strong></span></caption><tbody><tr><td><p>1、mapper 接口的全限定名要和 mapper 映射文件的 namespace 的值相同。</p></td></tr><tr><td><p style="margin-left:0pt;">2、mapper 接口的方法名称要和 mapper 映射文件中的 statement 的 id 相同。</p></td></tr><tr><td>3、mapper 接口的方法参数只能有一个,且类型要和 mapper 映射文件中 statement 的 parameterType 的值保持一致。</td></tr><tr><td>4、mapper 接口的返回值类型要和 mapper 映射文件中 statement 的 resultType 值或 resultMap 中的 type 值保持一致</td></tr></tbody></table>


<table border="1" cellpadding="1" cellspacing="1"><caption><strong><span style="color:#f33b45;">编写步骤</span></strong></caption><tbody><tr><td><p><strong>第一步:重新写个 UserMapper 文件和定义 mapper 映射文件 UserMapper.xml(内容同 Users.xml,<span style="color:#ff0000;">除了 namespace 的值</span>),放到新创建的目录 mapper 下。</strong></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="433" src="https://img-blog.csdnimg.cn/20200320160510352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gyNTAzNjUyNjQ2,size_16,color_FFFFFF,t_70" width="700"></p><p> </p></td></tr><tr><td><p><strong><strong><strong>第二步:在全局配置文件中添加映射配置文件</strong></strong></strong></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="116" src="https://img-blog.csdnimg.cn/20200320160637907.png" width="858"></p><p> </p></td></tr><tr><td><p><strong><strong><strong>第三步:测试</strong></strong></strong></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="540" src="https://img-blog.csdnimg.cn/2020032016072824.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gyNTAzNjUyNjQ2,size_16,color_FFFFFF,t_70" width="600"></p><p> </p></td></tr></tbody></table>

二、mybatis 与 hibernate 的区别

<table border="1" cellpadding="1" cellspacing="1"><caption><span style="color:#f33b45;"><strong>Mybatis 技术特点</strong></span></caption><tbody><tr><td><p style="margin-left:0pt;">1、通过直接编写 SQL 语句,可以直接对 SQL 进行性能的优化。</p></td></tr><tr><td><p style="margin-left:0pt;">2、学习门槛低,学习成本低。只要有 SQL 基础,就可以学习 mybatis,而且很容易上手。</p></td></tr><tr><td>3、由于直接编写 SQL 语句,所以灵活多变,代码维护性更好。</td></tr><tr><td>4、不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。</td></tr><tr><td>5、需要编写结果映射。</td></tr></tbody></table>


<table border="1" cellpadding="1" cellspacing="1"><caption><span style="color:#f33b45;"><strong>Hibernate 技术特点</strong></span></caption><tbody><tr><td><p style="margin-left:0pt;">1、标准的 orm 框架,程序员不需要编写 SQL 语句。</p></td></tr><tr><td><p style="margin-left:0pt;">2、具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。(以后,mysql 数据迁移到 oracle,只需要改方言配置)。</p></td></tr><tr><td>3、学习门槛高,需要对数据关系模型有良好的基础,而且在设置 OR 映射的时候,需要考虑好性能和对象模型的权衡。</td></tr><tr><td>4、不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。</td></tr><tr><td>5、程序员不能自主的去进行 SQL 性能优化。</td></tr></tbody></table>


Mybatis 应用场景:****


需求多变的互联网项目,例如电商项目。


Hibernate 应用景:****


需求明确、业务固定的项目,例如 OA 项目、ERP 项目等。

三、延迟加载(懒加载)

延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在需要的时候,再去加载从信息。在 mybatis 中,resultMap 标签?的 association 标签和 collection 标签具有延迟加载的功能。


<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><span style="color:#f33b45;"><strong>UserMapper.java</strong></span></td></tr><tr><td><p style="text-align:center;"><img alt="" height="100" src="https://img-blog.csdnimg.cn/2020032019273052.png" width="590"></p><p> </p></td></tr><tr><td><span style="color:#f33b45;"><strong>OdersMapper.java</strong></span></td></tr><tr><td><p style="text-align:center;"><img alt="" height="104" src="https://img-blog.csdnimg.cn/2020032019280780.png" width="802"></p><p> </p></td></tr><tr><td><p style="margin-left:0pt;"><span style="color:#f33b45;"><strong>UserMappler.xml</strong></span></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="113" src="https://img-blog.csdnimg.cn/20200320192841935.png" width="800"></p><p> </p></td></tr><tr><td><p style="margin-left:0pt;"><span style="color:#f33b45;"><strong>OrdersMapper.xml</strong></span></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="186" src="https://img-blog.csdnimg.cn/20200320192927840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gyNTAzNjUyNjQ2,size_16,color_FFFFFF,t_70" width="600"></p><p> </p></td></tr><tr><td><p style="margin-left:0pt;"><span style="color:#f33b45;"><strong>在全局配置文件中配置懒加载</strong></span></p></td></tr><tr><td><p style="text-align:center;"><img alt="" height="229" src="https://img-blog.csdnimg.cn/20200320193018952.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gyNTAzNjUyNjQ2,size_16,color_FFFFFF,t_70" width="700"></p><p> </p></td></tr><tr><td><span style="color:#f33b45;"><strong>测试</strong></span></td></tr><tr><td><p style="text-align:center;"><img alt="" height="279" src="https://img-blog.csdnimg.cn/20200320193128291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gyNTAzNjUyNjQ2,size_16,color_FFFFFF,t_70" width="700"></p><p> </p></td></tr></tbody></table>


没有配置懒加载之前:即使不打印订单所属人的信息,也会执行查询订单所属人的 sql 语句。


配置懒加载后:只有在代码执行到打印所属人信息那一行时才会执行查询订单所属人的 sql 语句。

评论

发布
暂无评论
JavaEE框架学习笔记——Mybatis篇