特殊 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 支持 STATEMENTPREPARED 和 CALLABLE 类型的映射语句,分别代表 StatementPreparedStatement 和 CallableStatement 类型

 

posted @   半条咸鱼  阅读(36)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示