1.mybatis动态sql
1.1 if
参考 https://blog.csdn.net/cd18333612683/article/details/78079137
1.2 trim
trim 属性
prefix:前缀覆盖并增加其内容
suffix:后缀覆盖并增加其内容
prefixOverrides:前缀判断的条件
suffixOverrides:后缀判断的条件
作用:构造可运行的sql语句
1.3 foreach
参考 https://www.cnblogs.com/chn58/p/5587955.html
1.4 其他
choose/set/where
choose 参考 https://blog.csdn.net/u012441924/article/details/63250496
set 参考 https://blog.csdn.net/yalishadaa/article/details/72578693
where 参考 https://blog.csdn.net/tensionsky/article/details/54969208
2.模糊查询(3种方式)
2.1 参数中直接加入%%
2.2 使用${…}代替#{…}(不建议使用该方式,有SQL注入风险)
关键:#{...}与${...}区别?
参数类型为字符串,#会在前后加单引号['],$则直接插入值
注:
1) mybatis中使用OGNL表达式传递参数
2) 优先使用#{...}
3) ${...}方式存在SQL注入风险
2.3 SQL字符串拼接CONCAT
concat(concat(’%’,#{bname}),’%’)
3.查询返回结果集
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型
3.1 使用resultMap返回自定义类型集合
3.2 使用resultType返回List
3.3 使用resultType返回单个对象
3.4 使用resultType返回List
3.5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
4.分页查询
为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
4.1 导入分页插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
4.2 将pagehelper插件配置到mybatis中
<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
4.3 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页
//设置分页处理
if (null != pageBean && pageBean.isPaginate()) {
PageHelper.startPage(pageBean.getCurPage(), pageBean.getPageRecord());
}
4.4 获取分页信息(二种方式)
4.4.1 使用插件后,查询实际返回的是Page,而非List,Page继承了ArrayList,同时还包含分页相关的信息
Page page = (Page)list;
System.out.println(“页码:” + page.getPageNum());
System.out.println(“页大小:” + page.getPageSize());
System.out.println(“总记录:” + page.getTotal());
4.4.2 使用PageInfo
PageInfo pageInfo = new PageInfo(list);
System.out.println(“页码:” + pageInfo.getPageNum());
System.out.println(“页大小:” + pageInfo.getPageSize());
System.out.println(“总记录:” + pageInfo.getTotal());
5.特殊字符处理
>(& gt;)
<(& lt;)
&(& amp;)
空格(& nbsp;)
mybatis实现批量增加/删除/修改
注意在jdbc文件中添加:allowMultiQueries=true 允许mybatis进行多sql语句操作
总结:
动态sql
if/trim/foreach
foreach用于in关键字 集合、item、开头、结尾、分隔符
模糊查询(#{…},
,
c
o
n
c
a
t
函
数
)
使
用
{},concat函数) 使用
,concat函数)使用,需要在mapper。xml加上单引号
mapper中的结果集处理
resulttype 对应着jdk自带的实体类map
resultmap 对应的自定义的实体类
如果说多张表查询,建议使用resultmap,这样的话不许额外创建vo类
特殊字符处理:
类似<,>,>=...这类字符,需要在mapper。xml进行转义处理
< CDATA
github的分页插件
导入依赖
在mybatis.cfg.xml中配置拦截器,拦截所有mapper接口
具体也处理逻辑之前添加
if(pagebean!=null && pagebean.ispagination)
Pagehelper.startpage(当前页,偏移量);
具体也处理逻辑之后添加
if(pagebean!=null && pagebean.ispagination){
pageinfo pageInfo = new pageInfo(结果集);
pagebean.setTotal(pageinfo.gettotal()+"");
}