动态SQL

#动态SQL中本章只讲if/foreach

  1. mybatis的动态sql语句是基于OGNL表达式的。可以方便的在sql语句中实现某些逻辑. 总体说来mybatis动态SQL语句主要有以下几类:
    1.1 if 语句 (简单的条件判断)

1.2 choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似
1.3 trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)
1.4 where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误)
1.5 set (主要用于更新时)
1.6 foreach (在实现 mybatis in 语句查询时特别有用)

  1. Mybatis中模糊查询的各种写法
    2.1 sql中字符串拼接(推荐)
    SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT(’%’, #{text}), ‘%’);//注:CONCAT是mysql数据库中才有的
    SELECT * FROM tableName WHERE name LIKE like ‘%’+#{bookName}+’%’;//注:sqlserver中的写法
    2.2 使用 #{…} 代替 . . . S E L E C T ∗ F R O M t a b l e N a m e W H E R E n a m e L I K E ′ {...} SELECT * FROM tableName WHERE name LIKE '% ...SELECTFROMtableNameWHEREnameLIKE{text}%’;
    #与KaTeX parse error: Expected 'EOF', got '#' at position 20: … 前提:参数类型为字符串,#̲会在前后加单引号['],则直接插入值
    2.3 程序中拼接
    String searchText = “%” + text + “%”;
    2.4 大小写匹配查询

注:sql模糊查询中小于符号“<”报错,<
>(>=) <(<=) &(&) 空格( )

  1. mybatis中返回List集合
    3.1 定义结果集

3.2 指定结果集

select book_id, book_name, book_price, book_brief
from t_book where 1=1

  List<Map>
  1. 为什么要重写mybatis的分页
    Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
    selectList(String statement, Object parameter, RowBounds rowBounds)

  2. 使用pagehelper插件分页
    3.1 导入分页插件

    com.github.pagehelper
    pagehelper
    5.1.2

3.2 将pagehelper插件配置到mybatis中


3.3 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页
//设置分页处理
if (null != pageBean && pageBean.isPagination()) {
PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
}

3.4 获取分页信息(二种方式)
3.4.1 使用插件后,查询实际返回的是Page,而非List,Page继承了ArrayList,同时还包含分页相关的信息
if (null != pageBean && pageBean.isPagination()) {
PageInfo pageInfo = new PageInfo(bookList);
pageBean.setTotal(pageInfo.getTotal() + “”);
}
System.out.println(“页码:” + page.getPageNum());
System.out.println(“页大小:” + page.getPageSize());
System.out.println(“总记录:” + page.getTotal());
3.4.2 使用PageInfo
PageInfo pageInfo = new PageInfo(list);
System.out.println(“页码:” + pageInfo.getPageNum());
System.out.println(“页大小:” + pageInfo.getPageSize());
System.out.println(“总记录:” + pageInfo.getTotal());

  1. 通过version字段解决并发问题

    throw new RuntimeException(“对象已过期(ObjectExpired)或不存在(Object Not Found)”)

    update t_book set book_price = #{bookPrice},version=version+1

    where book_id=#{bookId} and version=#vsersion#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值