MyBatis的核心技术掌握,简单易懂(上)

这篇具有很好参考价值的文章主要介绍了MyBatis的核心技术掌握,简单易懂(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.MyBatis中的动态SQL

二.MyBatis中的模糊查询

        1.  # 符号

        2.  $  符号

---问题

---所以大家知道 # 和 $  在MyBatis中的模糊查询中的区别了嘛??

三.MyBatis 中的结果映射

        1. resultType:

        2. resultMap:

---问题

---所以大家知道 resultType 和 resultMap  在MyBatis中的映射中的区别了嘛???


一.MyBatis中的动态SQL

        动态SQL是MyBatis中一个非常有用的功能,可以根据不同的条件来动态生成SQL语句,以实现更灵活的数据操作。在MyBatis中,动态SQL可以通过使用if、choose、when、otherwise等标签来实现。这些标签可以根据条件判断来决定是否包含某部分SQL语句

MyBatis提供了几种方式来实现动态SQL:

1. 使用基于XML的动态SQL:在映射文件(mapper.xml)中使用if、choose、when、otherwise等标签来实现条件判断和SQL片段的动态拼接。例如:

<select id="findUser" parameterType="map" resultType="User">
  SELECT *
  FROM user
  WHERE 1=1
    <if test="id != null">
      AND id = #{id}
    </if>
    <if test="name != null">
      AND name = #{name}
    </if>
</select>

在上面的例子中,根据传入的参数map中的id和name是否为空,动态拼接了不同的SQL片段。

2. 使用基于注解的动态SQL:通过在Java方法上使用@SelectProvider、@UpdateProvider等注解,并在对应的Provider类中编写动态SQL逻辑。Provider类可以根据传入参数动态生成SQL语句。例如:


@SelectProvider(type = UserProvider.class, method = "findUser")
User findUser(Map<String, Object> params);



public class UserProvider {
    public String findUser(Map<String, Object> params) {
        StringBuilder sql = new StringBuilder("SELECT * FROM user WHERE 1=1");
        if (params.get("id") != null) {
            sql.append(" AND id = #{id}");
        }
        if (params.get("name") != null) {
            sql.append(" AND name = #{name}");
        }
        return sql.toString();
    }
}

上面的例子中,根据传入的参数params中的id和name是否为空,动态拼接了不同的SQL语句。

使用动态SQL能够根据不同的条件生成不同的SQL语句,提高了查询的灵活性和代码的可维护性。在实际开发中,可以根据具体需求选择适合的动态SQL实现方式。

二.MyBatis中的模糊查询

        1.  # 符号:这种方式是使用预编译的方式处理参数,即将参数值转义后拼接到SQL语句中。在SQL语句执行前,会使用PreparedStatement进行参数绑定。这种方式可以一定程度上防止SQL注入攻击,因为参数值会被转义处理。

例如: 

MyBatis的核心技术掌握,简单易懂(上),mybatis,java,开发语言,intellij-idea,idea,ide,spring

输出结果:

MyBatis的核心技术掌握,简单易懂(上),mybatis,java,开发语言,intellij-idea,idea,ide,spring

         在上面的例子中,#{bname}会将传入的bname值进行预编译转义处理,然后再拼接到SQL语句中。

        2.  $  符号:这种方式是直接将参数值按照原样拼接到SQL语句中。在SQL语句执行前,不会进行预编译处理。这种方式适用于处理列名、表名等无法通过预编译处理的情况。然而,这种方式存在SQL注入的风险,因为参数值是直接拼接到SQL语句中,没有经过转义处理。

例如:

MyBatis的核心技术掌握,简单易懂(上),mybatis,java,开发语言,intellij-idea,idea,ide,spring

 输出结果:

MyBatis的核心技术掌握,简单易懂(上),mybatis,java,开发语言,intellij-idea,idea,ide,spring

 在上面的例子中,${bname}会将传入的bname值直接拼接到SQL语句中。

---问题

---所以大家知道 # 和 $  在MyBatis中的模糊查询中的区别了嘛???

  •         使用  # 可以有效防止SQL注入攻击,因为参数值会进行预编译处理。但是,这样会导致SQL语句无法被缓存,因为每次参数值不同,都会生成一个新的预编译SQL语句。使用的时候不需要带引号
  •         使用 $ 符号可以处理那些不能被预编译处理的部分,使用符号可以处理那些不能被预编译处理的部分,但是存在SQL注入的风险。此外,使用符号会将参数值直接拼接到SQL语句中,有一定的性能提升,因为SQL语句可以被缓存和重用。在使用的时候需要带引号。并且 $ 可以用来做动态列,完成动态开发

        因此,在使用#和$时需要根据具体场景和需求来选择合适的方式。一般来说,推荐使用#符号,并根据需要在SQL语句中使用动态SQL来处理特殊情况下的参数拼接。

        MyBatis的模糊查询有三种查询方式,上面已经介绍了两种,还有最后一种

                MyBatis的核心技术掌握,简单易懂(上),mybatis,java,开发语言,intellij-idea,idea,ide,spring

         它输出的方式和 # 的是一样的,在企业中一般采用这种方式

三.MyBatis 中的结果映射

        在MyBatis的结果映射中,resultTyperesultMap是两种不同的方式来指定结果映射规则。

        1. resultType:

                        resultType是一种简单的结果映射方式,用于指定查询结果应该映射到的Java对  象的类型。可以直接指定Java对象的类名或别名

        例如:

<select id="getUserById" resultType="User">
  SELECT *
  FROM user
  WHERE id = #{id}
</select>

在上面的例子中,resultType="User"指定了查询结果应该映射到User对象。

        2. resultMap:

                resultMap是一种更灵活和复杂的结果映射方式,用于定义详细的结果映射规则。通过                在映射文件(mapper.xml)或注解中定义<resultMap>标签或@Results注解来指定结 映             射规则。可以通过<id>、<result>和<association>等标签或注解来指定如何将查询结果映             射到Java对象的属性。

例如:

<resultMap id="userResultMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="age" column="age"/>
  <association property="department" javaType="Department">
    <id property="id" column="dept_id"/>
    <result property="name" column="dept_name"/>
  </association>
</resultMap>

在上面的例子中,定义了一个名为userResultMap的结果映射,详细指定了查询结果的字段与Java对象的属性之间的映射关系。

---问题

---所以大家知道 resultTyperesultMap  在MyBatis中的映射中的区别了嘛???

区别和使用场景:文章来源地址https://www.toymoban.com/news/detail-673546.html

  •  resultType适用于简单的结果映射,当查询结果只涉及一个Java对象时,可以使用resultType来指定映射的Java对象类型。这种方式简单明了,适用于简单的查询场景。
  •  resultMap适用于复杂的结果映射,当查询结果涉及多个Java对象、关联对象或需要自定义映射规则时,可以使用resultMap来定义详细的结果映射规则。这种方式更灵活,适用于复杂的查询场景。

到了这里,关于MyBatis的核心技术掌握,简单易懂(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java后端开发——Mybatis实验

    1.创建工程 在Eclipse中,创建名称为mybatis的工程 2.引入相关依赖 3.数据库准备 4.编写数据库连接信息配置文件 在项目的src目录下创建数据库连接的配置文件,这里将其命名为db.properties,在该文件中配置数据库连接的参数。 5.创建POJO实体 在项目的src/main/java目录下创建com.java

    2024年01月24日
    浏览(48)
  • MyBatis基础知识和快速入门、MyBatis核心配置文件讲解

    什么是Mybatis MyBatis 是一个优秀的基于java的 持久层框架 ,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中

    2024年02月04日
    浏览(101)
  • 【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

    SSM( S pring、 S pringMVC、 M yBatis) Apache Shiro SpringBoot 事务 :若将 N 个 数据库操作 (CRUD)放到同一个事务中,则这 N 个数据库操作最终要么全都生效,要么全都不生效 🍀 开启事务【 START TRANSACTION 】 🍀 回滚事务:若事务中的某个数据库操作失败,其他所有数据库操作都需要

    2024年02月08日
    浏览(78)
  • 学会Mybatis框架:一文掌握MyBatis与GitHub插件分页的完美结合【三.分页】

    接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一.Mybatis分页 1. Mybatis自带分页 2.插件分页 二.特殊字符的操作 1.使用CDATA区间 2.实体引用 三.结果集的处理   其实Mybatis本身是有分页的功能的,但是我们还是需要重写其中的分页,这

    2024年02月11日
    浏览(47)
  • day03 MyBatis 核心

    mapper接口和原理 之前的持久层组成部分: UserMapper.xml + IUserDAO + UserDAOimpl 使用mapper接口: UserMapper.xml + UserMaper接口 mapper接口的好处; 避免持久层里面传入参数错误 :以前里面写错了不会报错,只有等到运行代码才能看到错误,第二个参数的类型是Objiect MAPPer使用注意 1.mapper接口的命

    2024年02月07日
    浏览(41)
  • MyBatis 核心配置讲解(上)

    大家好,我是王有志,一个分享硬核 Java 技术的互金摸鱼侠。 前两篇的文章中我们分别介绍了 MyBatis 和 MyBaits 的应用组成,到这里基础篇的内容就结束了。 从今天开始,我们正式进入 MyBatis 学习的第二阶段:MyBatis 的应用部分。这个阶段从 MyBatis 应用程序的核心配置文件 m

    2024年04月25日
    浏览(51)
  • MyBatis 核心组件 —— Configuration

    Mybatis 的核心组件如下所示: Configuration:用于描述 MyBatis 的主配置信息,其他组件需要获取配置信息时,直接通过 Configuration 对象获取。除此之外,MyBatis 在应用启动时,将 Mapper 配置信息、类型别名、TypeHandler 等注册到 Configuration 组件中,其他组件需要这些信息时,也可以

    2024年02月14日
    浏览(39)
  • Mybatis核心配置文件介绍

    核心配置文件包含了 MyBatis 最核心的设置和属性信息 properties标签引入外部文件 具体使用,如下配置   typeAliases:为全类名起别名的父标签。 typeAlias:为全类名起别名的子标签。 属性 type:指定全类名 alias:指定别名 package:为指定包下所有类起别名的子标签。(别名就是类名

    2024年02月17日
    浏览(50)
  • mybatis核心配置文件解读

    目录 标签具体含义  数据源dataSource  properties导入配置 配置文档的顶层结构如下(必须严格按照以下顺序): configuration(配置)     properties(属性)     settings(设置)     typeAliases(类型别名)     typeHandlers(类型处理器)     objectFactory(对象工厂)     plugins(插件

    2024年02月16日
    浏览(47)
  • MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!

    目录 一、引言 二、MyBatis动态SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查询 ①使用#{字段名} ②使用${字段名} ③使用concat{\\\'%\\\',#{字段名},\\\'%\\\'} 总结 四、MyBatis结果映射 4.1.案例演示 4.1.1.resultType进行结果映射 4.1.2.resultMap进行结果映射 在当今的软件开发环境中,数据库的使

    2024年02月11日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包