Mybatis学习之参数传递的5种方式

目录

准备介绍

表以及实体类

log4j日志

参数传递的5种方式

方式一:单个字面量类型的参数

方式二:多个字面量类型的参数

方式三:Map集合类型的参数

方式四:实体类类型的参数

方式五:命名参数

总结

 写在最后



准备介绍

表以及实体类

前面我们讲过了,我们创建了t_user表,并创建了对应的实体类User

package com.aoshen.beans;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author summer
 * @date 2022-04-04  19:56
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String email;
}

log4j日志

我们加入log4j的日志,再Maven项目的resources下建立log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

在pom文件中加入依赖

<!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

参数传递的5种方式

方式一:单个字面量类型的参数

比如,我们需要根据用户名来查询用户信息

①在mapper接口中加入方法

User getUserByUserName(String uername);

②在mapper.xml文件中实现方法

 ③测试

 说明:

方式二:多个字面量类型的参数

比如,我们根据用户名以及密码来进行验证登录

① 在mapper中定义方法

User getByNameAndPwd(String username,String password);

②在xml文件中实现方法

③测试

方式三:Map集合类型的参数

 通过方式2我们可以看出,其实Mybatis是将参数给我们封装成了map集合,而且集合的键只能是arg[0-n]或者是param[0-n].那么我们当然也可以自己封装map集合来自定义我们自己的键了。因此我们可以将上述方法改写一下为下面的格式

①mapper接口中改写方法

User getByNameAndPwd2(Map<String,Object> map);

②xml中实现

③测试方法

方式四:实体类类型的参数

很多时候我们在开发中不会说是仅仅是一个参数,更多情况下是以一个对象来进行封装参数。

比如,我们前端提交数据,需要插入一条用户信息

①mapper接口中定义方法

int insertUser(User user);

②xml文件

③测试

方式五:命名参数

通过方式一和方式二我们知道,当我们写在方法中写 参数的时候,在xml中的参数是不确定的。

比如方式一,我们在xml中的#里面的参数可以使任意的值,而方式二中的# 里面的值必须是arg或者param。那么我们能否统统一一下我们的参数值呢?答案是肯定的,这就需要我们用到我们而明明参数了。

比如,方式一的那个方法

User getUserByUserName(String uername);我们改写成如下

User getUserByUserName(@Param("username") String uername);

那么xml中#里面的参数就只能为 username了,不能随意了

方式二中的方法

User getByNameAndPwd(String username,String password);

我们改写成

User getByNameAndPwd(@Param("username") String username,@Param("password") String password);

那么xml里的# 里面的值就得是usrname和password了,有人可能会问还能是位arg或者param吗?这里可以说的是,依然可以使用param,但是既然通过@param来定义了最好是用自己定义的,要不我们定义它的意义是什么呢。

总结

建议分成两种情况进行处理

1. 实体类类型的参数
2. 使用@Param标识参数

 写在最后

其实,xml文件中的#可以用$来替代。那么两者有何不同呢?

以下面这个方法为例,当我们使用#的时候,

 sql语句的输出是这样的,用到的是占位符

 当我们改成$的时候

 sql语句是这样的且会报错

我们知道字符串类型的话需要在sql中写上引号,因此xml中应该这样写。

此时sql语句是这样的

 注意注意${}需要手动加单引号,而且这个与之前jdbc的占位符以及直接写死参数值类似,而且$会出现sql注入哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值