Mybatis中关于自定义mapper.xml时,参数传递的方式及写法

 更新时间:2023年12月27日 08:57:58   作者:huangyaa729  
这篇文章主要介绍了Mybatis中关于自定义mapper.xml时,参数传递的方式及写法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在使用mybatis框架时,大多时候自动生成的mapper.xml文件能满足我们所需的数据库操作,但一些情况下还是需要我们自己写sql;为了加深印象,总结了下参数传递的方式以及各个关键字的含义如下:

语句中接收参数的方式有两种

1、 #{}预编译 (可防止sql注入)

2、${}非预编译(直接的sql拼接,不能防止sql注入)

参数类型有三种

1、 基本数据类型

2、 HashMap(使用方式和pojo类似 )

3、 Pojo自定义包装类型

基本数据类型使用方式

List<Bean> selectIdBySortTime(@Param(value="id")Long  id);

<sql id="Base_Column_List" > 
 id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type 
 </sql> 
 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > 
 select 
 <include refid="Base_Column_List" /> 
 from common_car_make 
 where id = #{id,jdbcType=BIGINT} (jdbcType可省略)
 </select>

基本类型多参传递时候的方式,sql中不指定接收参数类型,直接对应即可:

User login(@Param(value="name")String name,@Param(value="password")String password );
<select id="login"  resultType="com.pojo.User">
    select * from us where name=#{name} and password=#{password}
 </select>

复杂类型–map类型

   Service层
    Map<String, Object> paramMap=new hashMap();
    paramMap.put(“id”, value);
    paramMap.put(“carDeptName”,value);
    paramMap.put(“carMakerName”,value);
    paramMap.put(“hotType”,value);

Dao层 (如果不使用@Param注解,则sql中也可以省略属性前缀cm.)
List<Bean> queryCarMakerList(@Param(value="cm")Map paramMap);

<select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map"> 
  select 
  <include refid="Base_Column_List" /> 
  from common_car_make cm 
  where 1=1 
  <if test="id != null"> 
   and id = #{cm.id,jdbcType=DECIMAL} 
  </if> 
  <if test="carDeptName != null"> 
   and car_dept_name = #{cm.carDeptName,jdbcType=VARCHAR} 
  </if> 
  <if test="carMakerName != null"> 
   and car_maker_name = #{cm.carMakerName,jdbcType=VARCHAR} 
  </if> 
  <if test="hotType != null" > 
   and hot_type = #{cm.hotType,jdbcType=BIGINT} 
  </if> 
  ORDER BY id 
 </select>

复杂类型–类类型

与Map传参的使用方式基本相同,不同的地方在于不同自己再填充map数据,直接使用已定义的bean类即可。

<update id="updateByPrimaryKeySelective" parameterType="com.epeit.api.model.CommonCarMake" > 
 update common_car_make 
 <set > 
  <if test="carDeptName != null" > 
  car_dept_name = #{carDeptName,jdbcType=VARCHAR}, 
  </if> 
  <if test="carMakerName != null" > 
  car_maker_name = #{carMakerName,jdbcType=VARCHAR}, 
  </if> 
  <if test="icon != null" > 
  icon = #{icon,jdbcType=VARCHAR}, 
  </if> 
  <if test="carMakerPy != null" > 
   car_maker_py = #{carMakerPy,jdbcType=VARCHAR}, 
  </if> 
  <if test="hotType != null" > 
   hot_type = #{hotType,jdbcType=BIGINT}, 
  </if> 
 </set> 
 where id = #{id,jdbcType=BIGINT} 
 </update>

返回类型与接收类型关键字的区别

resultMap和 resultType的区别

两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。

  • resultMap表示将查询结果集中的列一一映射到bean对象的各个属性,映射的查询结果集中的列标签可以根据需要灵活变化。
  • resultType表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。

parameterMap(不推荐) & parameterType

parameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。

一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应,例如上述代码中下划线部分表示将查询结果类型自动对应到Bean对象的属性类型

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot整合Hibernate Validator实现参数验证功能

    SpringBoot整合Hibernate Validator实现参数验证功能

    这篇文章主要介绍了SpringBoot整合Hibernate Validator实现参数验证功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 指定springboot的jar运行内存方式

    指定springboot的jar运行内存方式

    这篇文章主要介绍了指定springboot的jar运行内存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java泛型最全知识总结

    Java泛型最全知识总结

    面试被问到Java泛型怎么办,有了这篇文章,让你直接保送,文中有非常详细的知识总结及相关代码示例,需要的朋友可以参考下
    2021-06-06
  • Java解决NullReferenceException异常的方法小结

    Java解决NullReferenceException异常的方法小结

    NullReferenceException是Java程序中常见的异常之一,但通过合理的编码实践和技术手段可以有效地避免和处理,本文介绍了NullReferenceException的产生原因、常见场景和多种解决方法,感兴趣的可以了解一下
    2025-10-10
  • 如何通过Java实现加密、解密Word文档

    如何通过Java实现加密、解密Word文档

    这篇文章主要介绍了如何通过Java实现加密、解密Word文档,对一些重要文档,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码保护,需要的朋友可以参考下
    2019-07-07
  • SpringBoot详细讲解多个配置文件的配置流程

    SpringBoot详细讲解多个配置文件的配置流程

    SpringBoot项目是一个标准的Maven项目,它的配置文件需要放在src/main/resources/下,其文件名必须为application,其存在两种文件形式,分别是properties和yaml(或者yml)文件
    2022-06-06
  • SpringBoot对数据库用户名和密码进行加密的两种方案

    SpringBoot对数据库用户名和密码进行加密的两种方案

    在当今互联网时代, 数据库安全的重要性不言而喻,作为Java开发的主流框架,Spring Boot项目通常需要连接数据库,而数据库的 用户名和密码作为最敏感的信息之一,所以本文给大家详细介绍两种主流的数据源配置加密方案,需要的朋友可以参考下
    2025-12-12
  • MyBatis-Plus中的更新操作方式(通过id更新和条件更新)

    MyBatis-Plus中的更新操作方式(通过id更新和条件更新)

    本文主要介绍了MyBatis-Plus中实体对象的更新操作,包括通过id更新和条件更新两种方式,详细解释了每种方式的方法使用、传入参数以及生成的SQL语句,并给出测试代码和运行结果
    2026-04-04
  • Java持久化XML文件配置解析

    Java持久化XML文件配置解析

    这篇文章主要为大家介绍了Java持久化XML文件配置解析,当你在使用 Java 编程语言 来编写软件时,实现持久化配置的方式。有需要的朋友可以借鉴参考下,希望能够有所帮助<BR>
    2022-03-03
  • 分享关于JAVA 中使用Preferences读写注册表时要注意的地方

    分享关于JAVA 中使用Preferences读写注册表时要注意的地方

    这篇文章介绍了关于JAVA 中使用Preferences读写注册表时要注意的地方,有需要的朋友可以参考一下
    2013-08-08

最新评论