现在公司在使用Mybatis 做开发,遇到Mybatis传参的问题,刚好总结下,因为之前也没总结归纳过,刚好有时间做个总结。
MyBatis的优缺点(推荐使用 Mybatis plus)
优点
- 简单易学
- 本身就很小且简单。
- 没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活
- mybatis不会对应用程序或者数据库的现有设计强加任何影响。
- sql写在xml里,便于统一管理和优化。
- 通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
解除sql与程序代码的耦合
- 通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
缺点
- 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
- SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
- 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
传参方式
方法一
#{} 里面的数字 代表传入的 参数的 顺序,这样的传参方式,其实不太直观, 看代码的话,不方便。 不推荐
public User selectUser(String name,int deptId);
<select id="selectUser" resultMap="UserResultMap">
select
*
from
user
where
user_name=#{0} and dept_id = #{1}
</select>
方法二
@Param 注解,#{} 里面 直接就是 @Param() 里面的值
==推荐此方法,直观,一目了然==
public User selectUser(@Param("name") String name,@Param("deptId") int deptId);
<select id="selectUser" resultMap="UserResultMap">
select
*
from
user
where
user_name=#{name} and dept_id = #{deptId}
</select
方法三
Bean 传参
==推荐此方法,直观,使用对象传参,看情况使用,需要建实体,扩展不便==
public User selectUser(User user);
<select id="selectUser" resultMap="UserResultMap">
select
*
from
user
where
user_name=#{user.name} and dept_id = #{user.deptId}
</select>
方法四
==适用于多个参数 传参的情况,传参方式灵活,#{} 里面就是 map的 key==
public User selectUser(Map<String,Object> params);
<select id="selectUser" resultMap="UserResultMap">
select
*
from
user
where
user_name=#{name} and dept_id = #{deptId}
</select>
评论区