
本文共 2991 字,大约阅读时间需要 9 分钟。
Mybatis 笔记
判断字符串相等
在Mybatis映射文件中,使用if
标签判断字符串相等的两种方式:因为Mybatis映射文件是使用Ognl表达式,所以在判断字符串sex
变量是否是字符串y
的时候使用。
可以使用以下两种方式:
/test="sex=='y'.toString()">或者/test="sex='y'">
将自己的SQL改为:
AND COMPANY_ID = `#{companyId,jdbcType=VARCHAR}` AND COMPANY_ID != `#{companyId,jdbcType=VARCHAR}`
再次调用SQL,则条件正常可用了。
Mybatis 批量插入
在使用list
时,需要先判断是否为空,否则会报错。
可以使用以下SQL:
AND purchase_id IN (229, 159)
接下来进行批量插入操作:
insert into redeem_code ( bach_id, code, type, facevalue, create_user, create_time ) values (`#{reddemCode.batchId}, #{reddemCode.code}`, `#{reddemCode.type}`, `#{reddemCode.facevalue}`, `#{reddemCode.createUser}`, `#{reddemCode.createTime}`)
where 条件
where
标签可以用来处理条件判断,Mybatis会自动移除第一个AND
连接词。
where
标签的使用注意事项:
- 第一个
AND
不需要写,但即使写也不会报错。 - 第二个及之后的
AND
必须写。 - 如果条件不存在,
where
标签对结果没有影响。 - 如果条件不存在,返回所有条目。
- 类似于
where 1=1
后加条件。 - 如果没有一个条件符合,返回所有条目。
循环获取 Map 中的 key 和 value
有时候需要将Map中的所有键值获取出来并拼接到SQL语句中。可以使用foreach
标签遍历entrySet
。
INSERT INTO table_name(hot_word, cnt) VALUES (`#{key}, #{value}`) ON DUPLICATE KEY UPDATE cnt = VALUES(cnt)
Mybatis property 列
通过<id>
和<result>
标签建立映射关系,指定实体类属性和数据表的列名。
XML 中使用特殊符号
在XML中使用特殊符号需要注意以下几点:
<
表示小于号>
表示大于号&
表示与'
表示双引号"
表示双引号
如果需要使用CDATA区,可以用<![CDATA[...]]>
包裹。
以下是常见特殊字符的替代符号:
&
替代为&
<
替代为<
>
替代为>
"
替代为"
'
替代为'
插入并更新
在MySQL中可以使用ON DUPLICATE KEY UPDATE
来处理插入冲突。
insert into user(userName, password, comment) values (`#{userName}, #{password}, #{comment}`)
MyBatis+MySQL 返回插入的主键ID
可以使用usegeneratedkeys
属性来获取插入的主键ID。
insert into user(userName, password, comment) values (`#{userName}, #{password}, #{comment}`)
MybatisPlus问题:XXXMapper 未找到Bean
如果你遇到了xxxMapper 未找到Bean
的问题,可能是因为以下原因:
建议检查pom.xml
文件,确保以下依赖存在:
com.baomidou mybatis-plus-core ${mybatis-plus.version} com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version}
IndexOutOfBoundsException 解决方案
如果遇到IndexOutOfBoundsException
,可以通过在实体类中添加全参构造方法来解决。
@Entitypublic class User { @AllArgsConstructor@NoArgsConstructor public User(...) { // 初始化代码 }}
Mybatis 中的 foreach 优化
and EXISTS (select 1 from (SELECT regexp_split_to_table(#{devIds},',') AS dev_id) AS vir where cast(vir.dev_id as BIGINT) = sd.id)
Mybatis 传入多个 Map 参数
如果需要传入多个 Map 参数,可以将它们合并到一个大 Map 中。
sql语句 sql语句
MyBatis 嵌套循环 Map
如果 Map 参数结构是Map<String, HashSet<String>>
,可以使用以下方式:
(id = `#{key}` AND name in (#{value}))
MyBatis 嵌套循环 Map 高级用法
如果参数类型是Map<String, HashSet<String>>
,可以写成:
(id = `#{key}` AND name in (#{value}))
最终,通过以上方法可以灵活地处理 Map 参数,并嵌套使用。
发表评论
最新留言
关于作者
