MyBatis参数传递

本文详细介绍了MyBatis中参数传递的各种方式,包括parameterType的使用、简单类型的参数、多个参数的传递(使用@Param和对象),以及#{}和${}占位符的区别。在MyBatis中,可以通过setter方法、@Param注解或对象直接映射来传递参数,而#{}用于PreparedStatement预编译,提高安全性,${}则进行字符串替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis中也适用了动态代理模式:使用SqlSession.getMapper(dao接口.class),获取这个dao接口的对象

传入参数:从java代码中把数据传入到mapper文件的sql语句

parameterType

写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型

例如UserDao接口

public User selectUserById(Integer id):该方法需要传递一个整型的参数

那么在mapper.xml中配置

<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.itheima.domain.User">
    select * from user where id=#{id}
</select>

parameterType它的值是java的数据类型的全限定名称或者是mybatis定义的别名

例如: parameterType="java.lang.Integer"

注意:parameterType不是强制的,因为mybatis通过反射机制能够发现接口参数的数据类型,所以可以没有,一般我们也不写。

一个简单类型的参数

简单类型:mybatis把java的基本数据类型和String都叫简单类型

在mapper文件中获取简单类型的一个参数的值,使用#{任意字符}

使用#{}之后,mybatis执行sql是使用的jdbc中的PreparedStatement对象

由mybatis执行下面的代码:

1、mybatis创建Connection、PreparedStatement对象

String sql = “select * from user where id=?”;

PreparedStatement pst = conn.preparedStatement(sql);

pst.setInt(1,1001);

2、执行sql封装为ResultType=“com.itheima.domain.User”

ResultSet rs = pst.executrQuery();

while(rs.next()){

//从数据库取表的行数据,存到一个java对选属性中

}

多个参数-使用@Param

当Dao接口方法多个参数,需要通过名称使用参数,在方法形参前面加入@Param{"自定义参数名"},mapper文件中使用#{自定义参数名}

例如UserDao中有这么一个方法:

public List<User> selectMutilParam(@Param("myname") String name,@Param("myage") Integer age)

使用@Param("参数名") String name

mapper文件:

<select>

select * from user where name=#{myage} or age=#{myage}

</select>

多个参数-使用对象

使用java对象传递参数,java的属性值就是sql需要的参数值,每一个属性就是一个参数

格式:#{属性名,javaType=类型名称,jdbcType=数据类型}   这种合适很少用

javaType:指java中的属性数据类型

jdbcType:在数据库中的数据类型

例如:#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}

简化方式:#{属性名},javaType和jdbcType的值,Mybatis反射能够获取,不用提供了

#{}和${}占位符的区别

#:使用?做占位符,告诉mybatis使用实际的参数值代替,并使用PrepareStatement对象执行sql语句,#{...}代替sql语句中的“?”,这样做更安全,更迅速,通常这也是首选做法。

$:字符串替换,告诉mybatis使用$包含的“字符串”替换所在位置,使用Statement把sql语句和${}的内容连接起来,主要用在替换表名、别列名、不同列排序等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值