MyBatis 基础功能汇总

这篇具有很好参考价值的文章主要介绍了MyBatis 基础功能汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、MyBatis实现分页功能

1. 原始方法,使用 limit,需要自己处理分页逻辑:

对于 mysql 数据库可以使用 limit ,如:

select * from table limit 5; --返回前5行

select * from table limit 0,5; --同上,返回前5行

select * from table limit 5,10; --返回6-15行

对于 oracle 数据库可以使用 rownum ,如:

--如:从表Sys_option(主键为sys_id)中从第10条记录开始检索20条记录,语句如下

SELECT * FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2

Where t2.R >= 10

2、使用PageHelper插件 :Mybatis分页方式详解_配置拦截器插件_Doker 多克的博客-CSDN博客

二、MyBatis 多参数传递

方法一:使用map接口传递参数

严格来说,map适用几乎所有场景,但是我们用得不多。原因有两个:首先,map是一个键值对应的集合,使用者要通过阅读它的键,才能明了其作用;其次,使用map不能限定其传递的数据类型,因此业务性质不强,可读性差,使用者要读懂代码才能知道需要传递什么参数给它,所以不推荐用这种方式传递多个参数。

public List<Role> findRolesByMap(Map<String, Object> parameterMap);
<select id="findRolesByMap" parameterType="map" resultType="role">
    select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') and note like concat('%', #{note}, '%')
</select>

方法二:使用注解传递多个参数  

MyBatis为开发者提供了一个注解@Param(org.apache.ibatis.annotations.Param),可以通过它去定义映射器的参数名称,使用它可以得到更好的可读性  这个时候需要修改映射文件的代码,此时并不需要给出parameterType属性,让MyBatis自动探索便可以了  使可读性大大提高,使用者也方便了,但是这会带来一个麻烦。如果SQL很复杂,拥有大于10个参数,那么接口方法的参数个数就多了,使用起来就很不容易,不过不必担心,MyBatis还提供传递Java Bean的形式。

public List<Role> findRolesByAnnotation(@Param("roleName") String rolename, @Param("note") String note);
<select id="findRolesByAnnotation" resultType="role">
    select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') and note like concat('%', #{note}, '%')
</select>

方法三:通过Java Bean传递多个参数

public List<Role> findRolesByBean(RoleParams roleParam);
<select id="findRolesByBean" parameterType="com.xc.pojo.RoleParams" resultType="role">
    select id, role_name as roleName, note from t_role where role_name like concat('%', #{roleName}, '%') and note like concat('%', #{note}, '%')
</select>

方法四:混合使用  

在某些情况下可能需要混合使用几种方法来传递参数。举个例子,查询一个角色,可以通过角色名称和备注进行查询,与此同时还需要支持分页

public List<Role> findByMix(@Param("params") RoleParams roleParams, @Param("page") PageParam PageParam);
<select id="findByMix" resultType="role">
    select id, role_name as roleName, note from t_role
    where role_name like concat('%', #{params.roleName}, '%') and note like concat('%', #{params.note}, '%') limit #{page.start}, #{page.limit}
</select>

总结:

描述了4种传递多个参数的方法,对各种方法加以点评和总结,以利于我们在实际操作中的应用。

  •使用 map 传递参数导致了业务可读性的丧失,导致后续扩展和维护的困难,在实际的应用中要果断废弃这种方式。

  •使用 @Param 注解传递多个参数,受到参数个数(n)的影响。当 n≤5 时,这是最佳的传参方式,它比用 Java Bean 更好,因为它更加直观;当 n>5 时,多个参数将给调用带来困难,此时不推荐使用它。

  •当参数个数多于5个时,建议使用 Java Bean 方式。

  •对于使用混合参数的,要明确参数的合理性。

三、MyBatis 中#{}和${}区别

#{} 是预编译处理,像传进来的数据会加个" "(#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号)

${} 就是字符串替换。直接替换掉占位符。$方式一般用于传入数据库对象,例如传入表名.

使用 ${} 的话会导致 sql 注入。什么是 SQL 注入呢?比如 select * from user where id = ${value}

value 应该是一个数值吧。然后如果对方传过来的是 001  and name = tom。这样不就相当于多加了一个条件嘛?把SQL语句直接写进来了。如果是攻击性的语句呢?001;drop table user,直接把表给删了

所以为了防止 SQL 注入,能用 #{} 的不要去用 ${}

如果非要用 ${} 的话,那要注意防止 SQL 注入问题,可以手动判定传入的变量,进行过滤,一般 SQL 注入会输入很长的一条 SQL 语句文章来源地址https://www.toymoban.com/news/detail-469599.html

到了这里,关于MyBatis 基础功能汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus实现分页查询

    分页查询使用的方法是: IPage:用来构建分页查询条件 Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+

    2023年04月08日
    浏览(52)
  • java springboot整合MyBatis实现分页查询以及带条件的分页查询

    之前的文章 java springboot整合MyBatis做数据库查询操作操作了springboot整合MyBatis,然后简单做了个按id查询的操作 那么 我们按上文搭建起的环境继续 我们直接在staffDao接口中声明一个分页函数 这里 我们直接在 sql语句中写limit 分页逻辑 参数是方法接收的 这个函数接收两个参数

    2024年02月10日
    浏览(46)
  • MyBatis-Plus 实现分页的几种写法

    MyBatis-Plus (opens new window) (简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小 :启动即会自动注入基本 CURD,性能基本无损

    2024年01月20日
    浏览(48)
  • SpringBoot整合mybatis-plus实现分页查询(建议收藏)

    一、前言         最近学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现。现在我将具体的实现流程分享一下。 二、手动实现分页查询         先复习一下,SQL中的limit,下面一行sql语句的意思是从第二个数据开始查,查询出两条数据

    2024年01月16日
    浏览(70)
  • MyBatisPlus分页插件实现分页功能

    本教程需要有MyBatisPlus基础 后端技术:SpringBoot2.7.9、MyBatisPlus3.5.1、MySQL8 前端技术:Vue2.5.16+axios、BootStrap3.3.7 1.1.1、在pom.xml中添加依赖 1.1.2、在application.yml中配置数据源 1.1.3、在启动类中配置分页插件 1.2.1、SQL脚本 1.2.2、实体Article 1.2.3、ArticleMapper.java 1.2.4、ArticleMapper.xml 1.2

    2024年03月13日
    浏览(54)
  • tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询

    Mybatis-Plus极大简化了我们的开发,作为mybatis的增强版,Mybatis-Plus确实帮我们减少了很多SQL语句的编写,通过其提供的API,可以方便地完成增删查改操作。但是,其实除了Mybatis-Plus以外,还有一个技术tk-mybatis可以达到同样的效果,只不过随着MP的兴起,tk-mybatis已经被渐渐淡忘

    2024年02月12日
    浏览(40)
  • 分页功能实现

    大家好 , 我是苏麟 , 今天聊一聊分页功能 . Page分页构造器是mybatisplus包中的一个分页类 . 引入依赖 配置 分页查询的实现 无条件查询 PageHelper官网 : MyBatis 分页插件 PageHelper  开始使用 引入依赖  在spring boot 配置 Spring Boot 引入 starter 后自动生效,对分页插件进行配置时,在

    2024年02月10日
    浏览(69)
  • 7.3 SpringBoot整合MyBatis分页插件github.pageHelper:实现图书列表API

    在软件开发中,分页是一个非常常见的需求,无论是在Web应用程序还是在移动应用程序中,我们经常需要将大量的数据分成多个页面进行展示。 本文主要实现图书列表API,使用 SpringBoot集成MyBatis分页插件github.pageHelper ,首先会从「 自己实现分页原理 」说起,再到「 使用gi

    2024年02月11日
    浏览(61)
  • mybatis 在当前项目中的实际应用及自定义分页的实现

    实现目标 实现目标,使用spring 提供的分页相关的类,避免代码中直接使用PageHelper 具体实现 创建自定义PageHelper,并使用spring-data-common提供的具体实现类操作分页 maven 中引入相关依赖 这样我们在项目中就不直接与pageHelper 打交道了,将代码控制在自定义的 PageHelper 中了。 具

    2024年02月07日
    浏览(61)
  • Vue 怎样实现分页功能

    Vue是一款流行的前端框架,它提供了丰富的API和组件,可以帮助开发者快速地构建现代化的Web应用程序。在Web应用程序中,分页功能是一个非常常见的需求,它可以帮助用户快速地浏览和查找大量数据。本文将介绍Vue如何实现分页功能,包括数据的获取、分页器的实现、以及

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包