先简单讲一下mybatis。

mybatis是一个orm框架、持久层框架、作用于dao层,负责数据库的访问操作。

几乎消除了jdbc的赋值代码、动态获取结果集等等。

再来是应用的需求配置:

1)核心配置文件:mybatis.xml

2)读取加载mybatis.xml并转换成输入流InputStream

3)创建sqlSessionfactorybuilder并读取mybatis.xml文件输入流

4)获取SqlSessionFactory实例

5)获取SQLSessionFactory工厂类获取SqlSession(正常访问数据库,完成crud即增删改查)

mybatis与hibernate区别或异同?

都是orm框架,但是有不同

orm框架:object Relational Mapping。对象与关系型数据库之间的映射管理框架

mybatis:半自动、轻量级、支持sql、扩展性和迁移性比较差。

hibernate:全自动、重量级、支持hql和sql、无缝移植。

ssh2/自定义MVC与ssm的区别

ssh2/自定义MVC                    ssm       
   action                                                controller
   biz                                                     service
   dao                                                    mapper
     IXxxDAO.java(接口)                             XxxMapper.java(接口) 
     XxxDAOImpl.java(实现类)                        XxxMapper.xml
   entity                                                 model
     Xxx.java                                               Xxx.java

使用mybatis-generator插件自动生成代码

1)在pom.xml中配置mybatis-generator插件,并指定mysql的版本(不能使用高版本8+)

2)导入generateConfig,xml至resources目录,并做项目的配置

1.配置外部的数据库连接配置文件jdbc.properties

2.设置本地mysql的jar包位置

3.设置实体类生成位置

4.设置Mapper层接口位置

5.设置Mapper层的sql映射文件

6.生成对应的表的实体类<table>

3)配置maven的启动插件,设置启动的命令

4)启动并生成代码(注意,不要重复生成)

注意:

xml的根节点有且只有一个mapper!

mybayis动态sql:

trim : java中表示去除前后空格,mybatis中是动态拼接

prefix:前缀

suffix:后缀

suffixOverride:去除前缀指定的字符

separator:表示间隔,可以改值如:‘’,‘’

注意!!!String类型传递参数不能直接传参,应该增加一个注解如图:

注意!!!!加了注解后,此时btype才是参数名,uname就只是变量名了

如图:

模糊查询1)#():相当于占位符,参数传递时需要手动拼接%% ,如:"zs“->#{}->'zs'2)$()使用$传递参数时,只会传递参数本身, 如:"zs" -> ${} ->zs关键:#{...}与${...}区别?参数类型为字符串,#会在前后加单引号['],$则直接插入值

使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)

比如:

1.3 foreach
  
    1.4 其他

choose/set/where  (作业)

2.模糊查询(3种方式)
 
    2.1 参数中直接加入%%

2.2 使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)
       
          关键:#{...}与${...}区别?
          参数类型为字符串,#会在前后加单引号['],$则直接插入值

注:
          1) mybatis中使用OGNL表达式传递参数
          2) 优先使用#{...}
          3) ${...}方式存在SQL注入风险

2.3 SQL字符串拼接CONCAT

3.查询返回结果集

resultMap:适合使用返回值是自定义实体类的情况
    resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

3.1 使用resultMap返回自定义类型集合
    
    3.2 使用resultType返回List<T>

3.3 使用resultType返回单个对象

3.4 使用resultType返回List<Map>,适用于多表查询返回结果集

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<E>,而非List<E>,Page继承了ArrayList,同时还包含分页相关的信息
          Page<Book> page = (Page<Book>)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;)

作业:
1)choose、set、where标签的使用(写例子)
2)mybatis实现批量insert/update/delete

mybatis的动态sql和分页相关推荐

  1. mybatis动态sql及分页

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

  2. 9、mybatis中动态sql的使用

    对于初学者,如何进行mybatis的学习呢?我总结了几点,会慢慢的更新出来.首先大家需要了解mybatis是什么.用mybatis来做什么.为什么要用mybatis.有什么优缺点:当知道了为什么的时候 ...

  3. 利用MyBatis的动态SQL特性抽象统一SQL查询接口

    1. SQL查询的统一抽象 MyBatis制动动态SQL的构造,利用动态SQL和自定义的参数Bean抽象,可以将绝大部分SQL查询抽象为一个统一接口,查询参数使用一个自定义bean继承Map,使用映射 ...

  4. MyBatis 03 动态SQL

    MyBatis 03 动态SQL 文章目录 MyBatis 03 动态SQL 一.学习目标 二.动态SQL if 标签2-1 if 标签2-2 where标签2-1 where 标签2-2 choos ...

  5. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有:   if choose(when,otherwis ...

  6. Mybatis解析动态sql原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

  7. MyBatis中动态sql实现时间范围比较的查询

    场景 前端传递两个时间参数,开始时间和结束时间,然后从数据库中筛选出某个时间属性在此范围的数据. Mybatis的动态sql的写法. 注: 博客: https://blog.csdn.net/bada ...

  8. MyBatis中动态sql的模糊搜索、foreach实现In集合的用法

    场景 在使用MyBatis的动态sql时,常见的是传递一个ID的数组,查询记录的 ID在这个数组中的记录和模糊搜索这两种场景. 注: 博客: https://blog.csdn.net/badao_l ...

  9. mybatis的动态sql的一些记录

    动态sql的作用:传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if ...

最新文章

  1. 图片轮播点击轮播(二)
  2. 用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科
  3. C/C++之变长数组(VLA)和可伸缩型数组成员
  4. Grandma Capa Knits a Scarf 模拟,字符串
  5. 【机器学习基础】GBDT 与 LR 的区别总结
  6. Azkaban安装部署,配置文件配置,启动等
  7. Redis快的原因:内存操作 单线程没有切换开销 多路复用IO
  8. Redux Vuex
  9. 计算机电源外形,电源外观及铭牌解析_HKC电源_机箱电源评测-中关村在线
  10. Python爬虫入门四urllib库的高级用法
  11. 玩转oracle 11g(19):ora-00020和64位数据库安装32为plsql
  12. 10.众里寻他千百度- Find命令和文件后缀
  13. 如何在软件发布计划中自动化语义化版本与变更日志
  14. linux下备份mysql日志_Linux下使用Logrotate对MySQL日志进行轮转备份
  15. python day 10
  16. windows 中hosts文件
  17. 核心网upf作用_【5G核心网】5GC核心网之网元UPF
  18. 蓝色的网站商城后台通用管理模板——后台
  19. linux 添加声卡驱动,Linux操作系统下声卡驱动的详细加载方法
  20. 利用浏览器另存为将网页内容保存为word

热门文章

  1. 盘点:国内外军工行业(固态硬盘)数据销毁方式
  2. Mybatis中的#{xxx}与${xxx}的区别
  3. Python继承的理解
  4. android识别手机文件 快速扫描并优化加载速度
  5. LTF散热框架软件实现_结合MTK6797平台
  6. 15.说说你对slot的理解?slot使用场景有哪些?
  7. 如何多台电脑同时安装windows系统
  8. 全功能Weatherford/Neotec.WellFlo.2015.v6.1.0.3494油气井生产模拟软件
  9. 名余曰正则兮,字余曰灵均
  10. 『C语言』getchar() putchar() 〖input output〗