MyBatis03

MyBatis的运行流程【运行原理】

MyBatis03_第1张图片

 关联查询

数据表:一对一、多对一、一对多、多对多

MyBatis的关联查询分了两种:

  X对一:有三种解决方案

  X对多:有两种解决方案

X对一的查询

例子:员工和部门、订单项和订单。以员工和部门表为例讲解关联查询。

要求:在查询员工信息的时候,把该员工所属的部门信息一起查询出来.

关联查询

第一种解决方案:直接在resultMap标签内部采用连缀【.】的方式。

接口

SQL映射文件:

MyBatis03_第2张图片

测试代码:

MyBatis03_第3张图片

第二种解决方案:直接在resultMap标签内部采用assocition标签的方式

SQL映射文件

MyBatis03_第4张图片

第三种解决方案:直接在resultMap标签内部采用association标签.分步查询!

对于分步查询存在懒加载机制:需要的时候再去加载,不需要的时候就不加载,默认是关闭的,需要手动开启。

 

 

MyBatis03_第5张图片

MyBatis03_第6张图片

X对多的关联查询

以部门和员工为例:一个部门对应多个员工。

要求:查询部门信息的时候,同时将将部门下的所有员工信息查询出来。

Dept类:提供getter/setter方法

MyBatis03_第7张图片

Employee类:getter/setter

 

  关联查询

第一种解决方案:在resultMap标签内部采用collection标签

MyBatis03_第8张图片

第二种:分步查询:resultMap标签内部采用collection标签

 MyBatis03_第9张图片

MyBatis03_第10张图片

 动态SQL

MyBatis的动态SQL支持以下几个标签。

if:类似于java中if语句

• choose (when, otherwise):多分支判断

• trim (where, set):

   Trim:对SQL语句进行修改的。

   Where:代替了原来的SQL语句中的where关键字

Set: 代替了原来的SQL语句中的set关键字

• foreach:遍历集合或者数组

 If标签

需求:如果条件携带了书名,就用书名查询,如果携带了价格,就用价格查询,如果携带了类型,就用类型查,如果携带了id就用id字段查.

接口:

 

SQL映射文件:

MyBatis03_第11张图片

 

 

 测试代码

MyBatis03_第12张图片

问题1:当不带bookName的时候,在where后面会多一个and关键字。

 where标签

解决办法:

  1. where关键字后面加 1=1 ,和后面的sql连接起来
  2. where标签代替where关键字

作用where标签可以将where标签内部的sql拼接起来的字符串最前面的and或者or关键字去掉。

MyBatis03_第13张图片

问题2:

where标签只能将where标签内部的sql拼接之后的字符串最前面的and或者or关键字去掉,但是不能将where标签内部的sql拼接之后的字符串最后面的and或者or关键字去掉?

 trim标签

解决方案:使用trim标签

 MyBatis03_第14张图片

Set标签

用来代替sql语句中的set关键字

接口:

 

SQL映射文件:

MyBatis03_第15张图片

测试代码:

MyBatis03_第16张图片

当然也可以使用我们前面学过的trim标签:

MyBatis03_第17张图片

 choose (when, otherwise)标签

需求:如果条件携带了书名,就用书名查询,如果携带了价格,就用价格查询,如果携带了类型,就用类型查,如果携带了id就用id字段查.

类似于java基础学过的switch...case语句|javaweb学过c:choose-->c:when..other

多分支判断和if的区别:有顺序、只会走其中一个判断。

接口:

SQL映射文件:

MyBatis03_第18张图片

 Foreach标签

遍历集合或者数组

1. 遍历列表

接口:

 

SQL映射文件:

MyBatis03_第19张图片

测试语句:

MyBatis03_第20张图片

2.遍历数组

接口:

SQL映射文件:

MyBatis03_第21张图片

测试代码:

MyBatis03_第22张图片

 3.批量添加数据

接口:

 

SQL映射文件:

MyBatis03_第23张图片

 

 

 SSM整合

MyBatis03_第24张图片

1.导包

 

MyBatis03_第25张图片

 

 

 2.web.xml


    
        contextConfigLocation
        classpath:applicationContext.xml
    

    
        class>org.springframework.web.context.ContextLoaderListenerclass>
    
    
    
    
        springDispatcherServlet
        class>org.springframework.web.servlet.DispatcherServletclass>
        
            contextConfigLocation
            classpath:springmvc.xml
        
        1
    

    
        springDispatcherServlet
        /
    
    
    
    
      CharacterEncodingFilter
      class>org.springframework.web.filter.CharacterEncodingFilterclass>
      
         encoding
         UTF-8
      
    
    
    
      CharacterEncodingFilter
      /*
    
    
    
    
    
      HiddenHttpMethodFilter
      org.springframework.web.filter.HiddenHttpMethodFilter
    
    
    
      HiddenHttpMethodFilter创建并配置springmvc.xml

3.springmvc.xml

  1. MyBatis03_第26张图片

 

 

 4.beans.xml

 
     base-package="com.offcn">
      "annotation" expression="org.springframework.stereotype.Controller"/>
      "annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
   
   
   
   "classpath:jdbc.properties"/>
   
   "druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
      "username" value="${jdbc.userName}"/>
      "password" value="${jdbc.password}"/>
      "url" value="${jdbc.jdbcUrl}"/>
      "driverClassName" value="${jdbc.driverClass}"/>
   
 
   
   "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     "dataSource" ref="druidDataSource"/>
   
   
   "transactionManager"/>
   
   
   
      
      
   
   
   
     
   

。。

你可能感兴趣的:(MyBatis03)