使用 Mybatis 真心不要偷懒!,达内Java百度云
Posted 程序员超时空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Mybatis 真心不要偷懒!,达内Java百度云相关的知识,希望对你有一定的参考价值。
自动生成代码的若干宗罪:
-
SQL怎么优化?
-
命名不规范如何修改?
-
冗余代码怎么办?常常是为了一个代码,生成一堆代码。
-
参数可理解性?
…
传参方式
1. 使用 _parameter 关键字
接口:
List<Address> queryAddressBySimplte(String address,String coinType);
XML文件:
<sql id="querySQL">
select oid, party_id, coin_type, address,address_alias,address_type, wallet_id,
user_id, status, register_time, created_time, update_time from t_molecule_address
</sql>
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="_parameter!=null and _parameter!=''">
address=#{0}
</if>
<if test="_parameter!=null and _parameter!=''">
and coin_type=#{1}
</if>
</select>
其中_parameter 参数表示参数对象,其内部数据结构为:MapperParamMap 。按照index进行参数值的获取。
注意事项:
-
当方法是单个参数时,可以直接使用 #{_parameter} 进行获取。
-
当方法有多个参数时,则不能直接使用 #{_parameter} 方式,必须通过Index的形式进行获取,#{0} 表示第一个参数,#{1} 表示第二个参数。
-
当方法为多个参数时使用 #{_parameter} 时。日志显示如下所示:
DEBUG main - ==> Preparing: select oid, party_id, coin_type,
address,address_alias,address_type, wallet_id, user_id, status,
register_time, created_time, update_time from t_molecule_address where
address=? and coin_type=? 2019-05-07 13:24:31 DEBUG main - ==>
Parameters: {0=0xbfa8f58ebea6e0643a5370c555a5bacfe320fd72, 1=ETH,
param1=0xbfa8f58ebea6e0643a5370c555a5bacfe320fd72,
param2=ETH}(MapperParamMap)
优点:
暂时没想出来啥优点。(知道的可以在评论区留言补充)。
缺点:
多个参数时,只能通过角标的形式引入,可读性,以及可理解性比较差。
传参时,不同参数数量其规则不同,容易出错。
代码生成工具使用的比较多,我相信很少有人主动用这种方式。
- 使用@Param 注解
接口:
List<Address> queryAddressBySimplte(@Param("address")String address,@Param("coinType") String coinType);
XML文件
<sql id="querySQL">
select oid, party_id, coin_type, address,address_alias,address_type, wallet_id,
user_id, status, register_time, created_time, update_time from t_molecule_address
</sql>
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="_parameter!=null and _parameter!=''">
address=#{address}
</if>
<if test="_parameter!=null and _parameter!=''">
and coin_type=#{coinType}
</if>
</select>
注意事项:
在XML文件中的参数名与@Param()中的参数名一致,与方法参数名无关。
例如:
List<Address> queryAddressBySimplte(@Param("addressAlias")String address,@Param("coinTypeAlias") String coinType);
这时我们在XML文件中,对应的参数应该为:
<select id="queryAddressBySimplte" resultType="Address">
<include refid="querySQL"/> where
<if test="_parameter!=null and _parameter!=''">
address=#{addressAlias}
</if>
<if test="_parameter!=null and _parameter!=''">
and coin_type=#{coinTypeAlias}
</if>
</select>
使用注解时,我们还可以 params 方式。
例如:
<select id="queryAddressBySimplte" resultType="Address">
# **Java高频面试专题合集解析:**
![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/622f5c57cda58627218db5aab7059d42.png)
当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,在这也是免费分享给那些有需要的朋友,其中囊括了**Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!**
**这些资料都以整理成了PDF文档,如果有需要可以[狂戳这里免费下载](https://gitee.com/vip204888/java-p7)即可!**
![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/00b17269e8c4a31507b4ef7b54e2f2f7.png)
**更多Java架构进阶资料展示**
![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/17e3b6d9ebdf53818f7a22417ea27391.png)
![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/b475b62fd215abeb349563996312e253.png)
cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!**
**这些资料都以整理成了PDF文档,如果有需要可以[狂戳这里免费下载](https://gitee.com/vip204888/java-p7)即可!**
[外链图片转存中...(img-WwgNiCqU-1628434986369)]
**更多Java架构进阶资料展示**
[外链图片转存中...(img-otX7ktWf-1628434986371)]
[外链图片转存中...(img-XqkaDLmT-1628434986374)]
![阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等](https://img-blog.csdnimg.cn/img_convert/19acd31c6a08f52c746af8e16641d2de.png)
以上是关于使用 Mybatis 真心不要偷懒!,达内Java百度云的主要内容,如果未能解决你的问题,请参考以下文章
还在用分页?太Low !试试 MyBatis 流式查询,真心强大!
还在用分页?太Low !试试 MyBatis 流式查询,真心强大!