SpringBoot中Mapper.xml的入参方式

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

在SpringBoot开发过程中,我们使用 ***Mapper.xml+***Mapper.java 来封装对数据库表的 CURD 操作,正常每张表会有一组对应的文件。

一、Mapper常见用法

下面例举一个查询操作:

  • 数据表t_sap_customer,表中有字段id、code、name、create_time、update_time、last_ver、is_valid
  • 现在需要根据idis_valid来查询一条数据

TSapCustomerMapper.java 代码:

package com.starcharge.repository.db1.product.mapper;

import com.starcharge.repository.db1.product.domain.TSapCustomerDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(String id,String isValid);
}

TSapCustomerMapper.xml 代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.repository.db1.product.mapper.TSapCustomerMapper">

    <!-- 创建数据库与实体类字段对应关系 -->
    <resultMap id="BaseResultMap" type="com.abc.repository.db1.product.domain.TSapCustomerDO">
        <result property="id" column="id"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="createTime" column="create_time" jdbcType="VARCHAR"/>
        <result property="updateTime" column="update_time" jdbcType="VARCHAR"/>
        <result property="lastVer" column="last_ver" jdbcType="VARCHAR"/>
        <result property="isValid" column="is_valid" jdbcType="VARCHAR"/>
    </resultMap>

    <!--查询列表-->
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{isValid} and id = #{id}
    </select>
</mapper>

上面TSapCustomerMapper.javaTSapCustomerMapper.xml就是一组针对数据库表t_sap_customer的实体类操作,*Mapper.java负责定义实体类的对外Api,*Mapper.xml负责实现具体的CURD操作的SQL语句。

两者使用xml文件中的id属性值来做映射对应,具体来说就是TSapCustomerMapper接口中的detail方法,会到xml文件中找到对应的id='detail'来执行。

二、mapper.xml入参方法

这里常见的一个问题是,我们在执行SQL的时候会有各种入参,那么我们要如何将api中的入参传入xml文件中,请看下面介绍。

1、简单传参

TSapCustomerMapper.javaTSapCustomerMapper.xml 之间,默认按照参数名入参

以下的入参都是可以正常运行的:

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(String id, String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{isValid} and id = #{id}
    </select>

2、@Param传参

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(@Param("id1") String id, @Param("isValid1") String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{isValid1} and id = #{id1}
    </select>

3、Map入参

//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService {    
	@Override
    public TSapCustomerDO detail(String id) {
        HashMap<String,String> map=new HashMap<String,String>();
        map.put("id",id);
        map.put("isValid","2");
        TSapCustomerDO r = sapCustomerMapper.detail(map);
        return r;
    }
}

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(HashMap query);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{isValid} and id = #{id}
    </select>

4、param、arg入参

xml文件中默认会传入arg0...argNparam1...paramN两个使用索引的入参。arg从0开始,param从1开始。

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(String id, String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{param2} and id = #{param1}
    </select>

5、简单入参+Map入参

//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService {    
	@Override
    public TSapCustomerDO detail(String id) {
        HashMap<String,String> map=new HashMap<String,String>();
        map.put("isValid","2");
        TSapCustomerDO r = sapCustomerMapper.detail(id, map);
        return r;
    }
}

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    TSapCustomerDO detail(String id, HashMap map);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{map.isValid} and id = #{id}
    </select>

三、#{} 和 ${} 的区别

MyBatis中 #{ }和${ }都可以用来动态传递参数。

1、不同点

#{} 对应底层使用 jdbcPreparedStatementd 对象来执行sql语句,在SQL中相当于一个参数占位符“?”,用来补全预编译语句。它补全预编译语句时,可以理解为在此参数值两端统统使用单引号引起来。 #{} 里除了可以写接收参数的名称外,还可以设置javaTypejdbcTypemode等。

${} 对应底层使用 jdbcStatement 对象来执行sql语句,就是单纯的字符串拼接,拼接完成后才会对SQL进行编译、执行,所以性能较低,也无法复用。但是在有些 #{ }无法胜任的地方,还是会需要${ }来完成。

2、结论

#{} 很大程度防止sql注入,提高系统安全,一般能用#的地方就别用$

${} 无法防止Sql注入,如果写的SQL语句的参数内容应该作为SQL的一部分,此时必须使用$,比如:表名称,order by 排序字段,分组 group by 等。文章来源地址https://www.toymoban.com/news/detail-663844.html

到了这里,关于SpringBoot中Mapper.xml的入参方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring Boot入门(09):如何使用MyBatis的XML配置方式实现MySQL的增删改查操作?

            想要快速高效地开发Java Web应用程序,选择使用Spring Boot和MyBatis无疑是明智之举。本篇文章将教你使用MyBatis的XML配置方式,结合MySQL数据库,实现常见的增删改查操作,让你的应用程序更加实用和强大。跟随本文一起来探索MyBatis在Spring Boot中的力量吧!        

    2024年02月11日
    浏览(70)
  • (MVC)SpringBoot+Mybatis+Mapper.xml

    前言:本篇博客主要对MVC架构、Mybatis工程加深下理解,前面写过一篇博客:SprintBoot+html/css/js+mybatis的demo,里面涉及到了Mybatis的应用,此篇博客主要介绍一种将sql语句写到了配置文件里的方法,即Mybatis里Mapper.xml文件配置,其主要用于定义sql语句和映射关系 目录 MVC架构流程图

    2024年02月13日
    浏览(45)
  • springboot文件中创建mapper.xml文件

        file  --  settings  --  editor(编辑器)  --  file and code templates(文件和代码模板)  -- 点击加号 --  name:mapper.xml  Extension:.xml 将下面的代码复制到空白处  --  apply -- ok  new  --  mapper.xml    输入文件名:  在mapper标签的namespace属性那里输入对应的mapper文件的类路径即可  

    2024年02月11日
    浏览(39)
  • Spring boot项目java bean和xml互转

    工作中需要给下游第三方收费系统做数据挡板,由于下游系统使用的是 soap webservice ,里面涉及各种xml跟bean的互转,在此介绍一下使用的方法。 基于springboot搭建webservice的过程将会在下篇博客介绍 这里介绍两种方法. 使用 jackson 进行互转, Spring boot 项目自带的 json 和 bean 的互

    2024年01月19日
    浏览(50)
  • Spring Boot入门(09):使用MyBatis的XML配置方式访问MySQL实现增删改查 | 超级详细,建议收藏

            想要快速高效地开发Java Web应用程序,选择使用Spring Boot和MyBatis无疑是明智之举。本篇文章将教你使用MyBatis的XML配置方式,结合MySQL数据库,实现常见的增删改查操作,让你的应用程序更加实用和强大。跟随本文一起来探索MyBatis在Spring Boot中的力量吧!        

    2024年02月13日
    浏览(46)
  • Spring Boot中使用validator如何实现接口入参自动检验

    在项目开发过程中,经常会对一些字段进行校验,比如字段的非空校验、字段的长度校验等,如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护,如何更加规范和优雅的校验呢? Spring Boot中可以使用Validation Api和Hibernate Validator实现接口入参自动检

    2024年02月12日
    浏览(44)
  • Spring Boot 别再用 Date 作为入参了,LocalDateTime、LocalDate 真香!

    作者:TinyThing 链接:https://www.jianshu.com/p/b52db905f020 项目中使用LocalDateTime系列作为dto中时间的类型,但是spring收到参数后总报错,为了全局配置时间类型转换,尝试了如下3中方法。 注:本文基于Springboot2.0测试,如果无法生效可能是spring版本较低导致的。PS:如果你的Controll

    2024年02月11日
    浏览(43)
  • Springboot接口多个DTO入参的Postman上传方式

    TO(Data Transfer Object)是一个常见的设计模式,用于封装数据传输对象。它通常用于将数据从一个层传递到另一个层,例如将数据从服务层传递到控制器层。 在Spring Boot中,使用DTO作为方法参数可以使代码更具可读性和可维护性。例如,如果您需要从前端传递多个参数到控制器

    2024年02月03日
    浏览(39)
  • Spring CORS 跨域使用与原理(@CrossOrigin注解,Java配置类方式,xml方式)

    出于安全原因,浏览器禁止AJAX调用当前源之外的资源。 跨域资源共享(CORS)是由大多数浏览器实现的W3C规范,它允许您以一种灵活的方式指定授权哪种跨域请求,而不是使用一些不太安全、功能不太强大的hack(如IFrame或JSONP)。 Spring Framework 4.2 GA为CORS提供了一流的开箱即用支持

    2024年02月08日
    浏览(60)
  • 【群答疑】jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参...

    一个非常不错的问题,来检验下自己jmeter基本功 可能有同学没看懂题,这里再解释一下,上面问题需求是:jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参 建议先自己思考,如果2小时没做出来,可以参考文末评论区的实现

    2024年02月09日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包