特殊 SQL
模糊查询
<!-- List<User> getUserByLike(@Param("username") String username); -->
<select id="getUserByLike" resultType="User">
<!--
${}方式:select * from users where username like '%${username}%'
字符串拼接:select * from users where username like concat('%',#{username},'%')
-->
<!-- 最常用 -->
select * from users where username like "%"#{username}"%"
</select>
批量删除
1、只能使用 ${}
2、若使用 #{},自动加上 '',则将实参视作整体
<!-- int deleteMore(@Param("ids") String ids); -->
<delete id="deleteMore">
delete from users where id in (${ids})
</delete>
动态设置表名
1、一张表进行水平拆分,分成多个表存储原表数据
2、只能使用 ${},因为表名不能加 ''
<!-- List<User> getUserByTable(@Param("tableName") String tableName); -->
<select id="getUserByTable" resultType="User">
select * from ${tableName}
</select>
添加功能获取自增的主键
1、场景:一对多、多对多
2、属性
(1)useGeneratedKeys:是否自动生成主键,默认false,设置为 true,表示当前 SQL 使用自增的主键
(2)keyProperty:将返回自增主键的值,赋值给参数的某个属性,value 为参数属性
<!-- void insertUser(User user); -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
<!-- 第一列为id,keyProperty="id":表示将获取到的主键值,自动赋值给id -->
insert into user values (null,#{username},#{password})
</insert>
3、需要数据库支持自动生成主键的字段,如:MySQL、SQL Server
insert 获取非自增主键的值
1、应用场景:不支持自增型主键的数据库,如:Oralce
2、selectKey 子标签
属性 | 描述 |
keyProperty | selectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称 |
keyColumn | 返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称 |
resultType | 结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map |
order | 可以设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用 |
statementType | 和前面一样,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 类型的映射语句,分别代表 Statement, PreparedStatement 和 CallableStatement 类型 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战