003Mybatis传参
mybatis中#和$的区别_mybatis中$和井号区别_码农小安的博客-CSDN博客
默认的别名
- 参数名本身
- param1, param2
SysUser selectByUserIdAndUsername(int user_id, String userName);
<select id="selectByUserIdAndUsername" resultType="com.du.bean.manytomany.SysUser">
select *
from sys_user
where user_id = #{user_id}
and user_name = #{userName}
</select>
@Param 参数别名传递
索引
按照参数的顺序,从0开始
List<Blog> selectBlogByPage(int offset, int pagesize);
<select id="selectBlogByPage" resultMap="blogResultMap">
select * from blog limit #{0}, #{1}
</select>
Entity,Map
SysUser selectByUser(SysUser sysUser);
<select id="selectByUser" resultType="com.du.bean.manytomany.SysUser">
select *
from sys_user
where user_code=#{userCode,jdbcType=VARCHAR}
</select>
参数转换
- 参数也可以指定一个特殊的数据类型
- #{property,javaType=int,jdbcType=NUMERIC}
- #{height,javaType=double,jdbcType=NUMERIC,numericScale=2}
和 MyBatis 的其它部分一样,几乎总是可以根据参数对象的类型确定 javaType,除非该对象是一个 HashMap。这个时候,你需要显式指定 javaType 来确保正确的类型处理器(TypeHandler)被使用。
自定义类型转换
#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}
常见问题
插入语句中存在空值
当列中存在空值时,必须指定参数对象的类型
JDBC 要求,如果一个列允许使用 null 值,并且会使用值为 null 的参数,就必须要指定 JDBC 类型(jdbcType)
<set>
<if test="name != null">
name =#{name,jdbcType=VARCHAR},
</if>
</set>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端