<select id=“findUser”
resultType=“User”>
SELECT * FROM User WHERE age = 26
AND name like #{name}
AND sex like #{sex}
AND valid = 1
3、trim (where, set)
//prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它的作用是移除所有指定在 prefixOverrides 属性中的内容,并且插入 prefix 属性中指定的内容。
…
//set 元素会动态前置 SET 关键字,同时也会删掉无关的逗号
…
4、foreach
//collection=“要遍历的集合”
//item = “可以在元素体内使用的集合项”
//index = “索引”
//open = “开始字符串”
//separator = “分隔符”
//close = “结束字符串”
SELECT *
FROM User
WHERE ID in
<foreach item=“item” index=“index” collection=“list”
open=“(” separator=“,” close=“)”>
#{item}
5、bind
//bind可以创建一个变量并将其绑定到上下文
SELECT * FROM User
WHERE name LIKE #{pattern}
6、xml中的timestamp比较
第一种写法:
原符号 < <= > >= & ’ "
替换符号 < <= > >= & ' "
例如:sql如下:
create_date_time >= #{startTime} and create_date_time <= #{endTime}
第二种写法:
大于等于
<![CDATA[ >= ]]>小于等于
<![CDATA[ <= ]]>例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime} and create_date_time <![CDATA[ <= ]]> #{endTime}
<select id=“getUser”
resultType=“java.lang.String” >
select name from user
where birthday < TO_TIMESTAMP(#{start}, ‘yyyy-mm-dd hh24:mi:ss’)
and birthday >= TO_TIMESTAMP(#{end}, ‘yyyy-mm-dd hh24:mi:ss’) order by start desc LIMIT 1;
7、@Param
@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。
(1)原始的方法
当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,这时可以考虑用Map,例如接口
public List findRoleByMap(Map<String, Object> parameter);
SELECT id,name FROM t_role
WHERE roleName=#{roleName}
AND note=#{note}
(2) 使用@Param
很明显上面的缺点就在于可读性差,每次必须阅读他的键,才能明白其中的作用,并且不能限定其传递的数据类型,下面是使用@Param的情况,需要将接口改为
public List findRoleByAnnotation(@Param(“roleName”) String roleName, @Param(“note”) String note);
这样我们就可以直接传入对应的值了。
当然也可以使用Java Bean来传递多个参数,定义一个POJO
public class RoleParam {
private String roleName;
private String note;
/getter和setter/
}
此时接口就变为
public List findRoleByBean(RoleParam role);
这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。
而使用更多的场景可能是这样的,对应多个POJO
public List findRoleByMix(@Param(“roleP”) RoleParam role, @Param(“permissionP”) PermissionParam permission);
这样就可以进行如下映射
SELECT id,name FROM t_role
WHERE roleName=#{roleP.roleName}
AND note=#{rolep.note}
AND level=#{permissionP.level}
注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。
(3)总结
-
当你不使用@Param注解来声明参数时,必须使用使用 #{}方式;
-
便于传多个参数;
-
类似于别名之类的功能;
三、批量插入
<?xml version="1.0" encoding="UTF-8" ?>
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-Dqe0OzFe-1710833566346)]
[外链图片转存中…(img-EOF77z3S-1710833566347)]
[外链图片转存中…(img-kQ9GL6tn-1710833566347)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-9FHQfvAt-1710833566348)]